| [本文大纲] 材质种类 材质与Shader的关系 材质与材质实例 会生成哪些材质变体 多个Shader变体的原因 Shader变体的优化 Shader编译的过程 材质包体和内存 |
材质种类
ue4中的材质主要有两个类型,一种是与mesh相关的,比如物体的表面材质;另一种是mesh无关的,比如后处理材质。
材质与Shader的关系
材质属于美术资产,ue4底层会将材质节点翻译成HLSL代码,并根据模板HLSL代码和相关宏编译成最终的Shader Code。
对于mesh无关的材质而言,通常只对应着一个Shader。
对于mesh相关的材质而言,则可能会生成非常多的Shader Code,我们称之为Shader变体。
Shader变体的膨胀会导致包体增加,内存占用增加。
材质与材质实例
对于场景中的物体,我们应该将材质设计为母材质和对应材质实例的形式。母材质描述的是一类材质,当前类材质仅在部分参数上有差异。
ue4中内置的PBR材质一方面的意义在于,它提供了基于物理的真实材质表现;另一方面,就在于它提供了一个通用接口,能够使用一个模型表达丰富多彩的材质。这意味着使用PBR材质我们能够描述场景中绝大多数物体,只有一些特殊材质,如角色材质/天空/水等需要特殊制作。
对于材质实例而言:
如果使用了Static Parameter Set,会生成新的Shader变体;
如果仅修改颜色、贴图等参数,则不会生成Shader变体;
会生成哪些Shader变体
对于场景中的一个普通小物件而言,它的材质可能达到几十或上百个。
一.从ShaderType考虑:
(1)Shadow Depth Pass Shader。如平行光阴影、点光源阴影、聚光灯阴影等。
(2)Depth Pass Shader。如果开启了prepass,可能包含写入颜色和仅写入深度的Shader。
(3)Base Pass Shader。前向光照下,可能包含LDR/HDR的,有动态Skylight/

本文探讨了Unreal Engine 4中的材质种类、材质与Shader的关系,特别是Shader变体的生成原因和优化技巧。重点讲解了如何控制变体数量以减少包体和内存消耗,以及Shader编译过程和内存管理策略。
最低0.47元/天 解锁文章
286

被折叠的 条评论
为什么被折叠?



