MaterialInstance 的作用 【UE4】

Advertisement

转载自:http://blog.csdn.net/pizi0475/article/details/50948904

原文格式有些问题,遂整理如下:

我们经常会在游戏中看到Materials,但是还有一种数据结构名字叫做MaterialInstance。其实不少游戏的Mesh指认的都是 MaterialInstance 而不是 Materials,为什么呢?

1. Materials和MaterialInstance都可以指认给Mesh

2. Materials是在游戏运行之前编译好了的,而想要修改Materials的内部参数(比如动态修改其基本色,法线贴图等等)都需要实时 Compilation(Runtime编译),非常耗时,而且对于一种 Material 的修改,会反映到场景中所有使用了它的 Mesh 身上。

3. 但是对 MaterialInstance 修改只会影响一个对象,而且不需要实时编译,不过对MaterialInstance的修改仅仅限制在一些参数上,你想像 MaterialeEditor 一样大幅度修改渲染流程是不行的

4. Material 里所有的Node(参数节点)都能暴露在 MaterialInstance 中,比如基本色在 MaterialInstance 中就是一个 VectorParameterValue,金属参数就是一个ScalarParameterValue

5. 不仅如此,我们可以创建一个基础 Material,然后以他为基础创建多个 MaterialInstance 给不同对象(比如汽车的基础材质创建好,然后仅仅修改颜色,得到多个MaterialInstance,也就是多个不同颜色的汽车),这里的 MaterialInstance 是Constant 的,主要用于相近 Material 的性能优化

6. 而我们在游戏的代码中可以调用函数得到 Mesh上的 MaterialInstance,然后直接修改他的某些参数已达到视觉效果(比如树被烧黑),这里得到的 MaterialInstance 是DynamicMaterialInstance,代码如下:

//0代表get的MaterialInstance的index,因为不少Mesh有多个Material在身上
 MatDynamic = MeshComp->CreateAndSetMaterialInstanceDynamic(0);
 MatDynamic->SetScalarParameterValue(ParameterFName, ParameterValue);

这样我们就set了一个 ScalarValue 类型的参数给了 MaterialInstance,具体是那个参数取决于 ParameterFName中 你传入的FName内容,比如 MyRoughness 等等。

我们可以看一个例子,一个手电筒的Material内部使用了 EmissiveColor 输出,代表这个 Material 是会发光的。这个输出连接了一个简单的 float 参数,代表光强。然后他创建了这个手电筒的 MaterialInstance,其中就会有一个 ScalarParameterValue 是那个光强参数,然后我们在游戏代码里就可以get到这个参数,再进而对他进行修改,手电筒就会亮起来了。

( ScalarParameterValue 其实就是 float 型变量)

( VectorParameterValue 就是四个 float 变量)

其他资料: http://blog.csdn.net/sinat_27456831/article/details/50781397

Similar Posts:

  • UE4 服务器模式

    UE4 服务器模式 概述 UE4 架构在构建时就充分考虑了多人游戏因素.只要您遵守基本的架构原则,通常就无需太费事即可将单人游戏体验扩展为多人游戏. UE4 网络连接是基于服务器/客户端模式构建.也就是说,这个模式中有一个担当主控(authoritative)的服务器端(做出所有重要决定),用于确保所有连接的客户端可以持续更新,以便其持续获得服务器环境的最新近似复本. Actor 在单人游戏体验中,actor 被用于呈现游戏世界.而在多人游戏中,这一点丝毫没有变化,只不过客户端将获得每个 act

  • UE4官方Third Person框架初学者见解

    UE4官方Third Person框架初学者见解 以下是我作为一个UE4初学者在观看官方Third Person框架中对这个框架的理解和体会,如果有什么不正确的地方欢迎指正. 1.虚幻中的类前缀你会见到U,A,F,以下就是很好的罗列其中的意义 • U: UObject继承过来的,例如UTexture • A: AActor继承过来的,例如AGameMode • F: 其他的类和结构,例如FName, FVector • T:模板,例如TArray,TMap,TQueue • I: 接口类,ITr

  • 苹果再下一盘很大的棋?Metal优化作用及影响浅析

    苹果再下一盘很大的棋?Metal优化作用及影响浅析 来源:3vsheji.com作者:火石发布时间:06-24 WWDC大会上,大部分网友关注的多是iOS 8的新功能新界面,但这是苹果的开发者大会,苹果推出的Metal以及新的编程语言Swift其实更重要,普通用户暂时看不到这些技术的作用和意义,但是对开发者来说,他们才更重要,苹果掌控整个iOS软件及硬件平台的能力太强大了,也能更好地服务开发者,这显然是碎片化的安卓系统暂时比不了的. Metal是什么?开发者的救星吗? AMD当初推Mantle优

  • [置顶] UE4后处理简述

    虚幻4提供了后处理特效的功能,可以实现景深,光溢出,色调调整,饱和度等等.要使用虚幻4的后处理,就一定要用到PostProcessVolumn,这是一种特殊的体积,可以放置在场景中的任何位置. 每个 PostProcessVolume 实质上是一个类型的混合层.其他混合层可以来自游戏代码(比如命中特效),UI 代码(比如暂停菜单),摄像机(比如暗角效果),或者 Matinee(旧胶片效果).每个混合层都能有自己的权重值,这样混合效果能容易控制.混合的做法始终是 Lerp(线性插值),当前启用的体

  • UE4中资源加载资源的方式

    在UNITY中,我们加载资源一般是通过Resources.Load(path).即可完成.该方法返回的是Object类型.如果你想要的是材质或者贴图等等,只要价格类型转换的关键字就可以了例如 as Material,则可以返回一个材质的引用... 在UE4中,加载资源的方式区别较大.经过自己一个下午的摸索,目前发现了这4种资源的加载方式.在UE4中,它的蓝图就大致等于UNTIY中的prefab.所以我们将资源弄成了蓝图的方式来进行加载. 第一种: 如果该蓝图有C++类(或者说是从C++类创建的蓝

  • [UE4]AnimDynamics简介

    AnimDynamics简介 Author:Jia Zhipeng AnimDynamics是UE4.11 Preview 5测试版本发布的AnimationBlueprint中的新节点.功能是通过简单物理模拟计算,更新骨骼位置.优点是避免了使用纯物理模拟时计算量过大,并且能实现近似物理效果.尤其用于悬垂物(辫子,锁链等自由下垂物体)上可以获得非常好的结果. 原理:在AnimDynamics节点里,能够绑定RigidBody关联到指定Bone上,通过计算RigidBody的动量,在风,重力影响下

  • 深入分析面向对象中的封装作用

    之前我(梦在旅途)发表过一篇名为<深入分析面向对象中的对象概念>的文章,里面主要讲解了类与对象的关系以及对象的概念.状态.行为.角色几个知识点,让大家对对象有了一些深入的了解,而本文则再来谈谈面向对象的三大特性之一:封装,封装是实现面向对象的基础,深入的理解封装的特性,有利于我们能更好的领悟面向对象的思想以及实现面向对象编程.以下均为本人凭借多年开发经验总结的个人观点,大家若发现有误或不足的地方,欢迎指正和交流,谢谢! 一.什么是封装? 顾名思义,封:封闭,装:装起来,将具体的实现细节装到一个

  • js中constructor的作用

    在学习过程中对js的constructor的作用产生了疑问.下面是学习的资料进行梳理 function Person(area){ this.type = 'person'; this.area = area; } Person.prototype.sayArea = function(){ console.log(this.area); } var Father = function(age){ this.age = age; } Father.prototype = new Person('

  • SQLSERVER中NULL位图的作用

    SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Day6-有关NULL位图的三个误区 char nchar varchar nvarchar的区别 在SQLSERVER内部有很多地方都使用到了位图技术,包括执行计划,数据库系统页面,复制,还有这篇文章说到的数据行中的NULL位图 执行计划中有位图运算符 数据库系统页面有:DCM页面.BCM页面,详细请

  • UE4蓝图的基础概念

    UE4蓝图总结(入门) 使用引擎版本:4.10.2 这篇总结一下蓝图的基本使用,有的内容没有配图,所以需要自己去操作一下. 变量 和代码中的变量是一样的,蓝图也有变量,共有私有的区分,可编辑不可编辑(常量),变量类型,变量与变量之间的类型转换,引用类型,静态的变量,容器. 定义新变量 方法1:在左侧的变量列表上点击增加变量按钮 方法2:在蓝图操作界面中,在某个变量的引脚处右键,在弹出的菜单中点击提升为变量. 变量类型 可以选择的变量类型有: 常用类型 int float boolean stri

Tags: