[ue4] 材质和Shader变体(Shader Permutation)

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

[本文大纲]

材质种类

材质与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/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值