MaterialInstance 的作用 【UE4】

举报
ShaderJoy 发表于 2021/12/30 00:42:36 2021/12/30
【摘要】 转载自:http://blog.csdn.net/pizi0475/article/details/50948904 原文格式有些问题,遂整理如下: 我们经常会在游戏中看到Materials,但是还有一种数据结构名字叫做MaterialInstance。其实不少游戏的Mesh指认的都是 MaterialInstance 而不是 Ma...


转载自: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


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





( VectorParameterValue 就是四个 float 变量)


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

文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/60963323

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。