MaterialInstance 的作用 【UE4】
来源:互联网 发布:java计算运费代码 编辑:程序博客网 时间:2024/05/18 03:02
转载自: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
- UE4的MaterialInstance作用
- UE4的MaterialInstance作用
- MaterialInstance 的作用 【UE4】
- UE4 C++的 GENERATED_BODY()作用
- UE4的C++代码中的class关键字起什么作用?
- UE4的delegate
- UE4的射线拾取
- UE4的类前缀
- ue4数据表的使用
- UE4的碰撞笔记
- UE4的旋转笔记
- UE4的NetWork原理
- UE4的精品教程
- UE4的C++笔记
- UE4的前世今生
- UE4的联网笔记
- ue4的BlueprintNativeEvent
- UE4的延迟光照
- Greenplum 4.3.x 安装postgis
- HTTPS学习笔记
- ES6——Day2(const命令+const对象)
- VS Code
- 【上机笔试之七】Hash应用(2)-从大到小顺序输出其中前m大的数
- MaterialInstance 的作用 【UE4】
- 华师大 OJ 2876
- ECPC16-A.The game of Osho(博弈)
- CSDN一直都很不错,加油了4
- Android获取data文件夹权限
- NOIP 2009 解题报告(潜伏者,hankson的趣味题,最有贸易,靶形数独)
- ln: failed to create symbolic link 'libavutil.so': Operation not supported
- 不使用PHP内置排序函数对二维数组实现快速排序的面试题
- Lucky String