shader变体是什么_Shader入门(二十一)多重变体(Multiple Variants)

本文介绍了Unity中的Shader变体,特别是multi_compile和shader_feature的使用,以及如何通过#pragma multi_compile_fwdadd等内建快捷方式创建不同变体。同时,讲解了如何通过#pragma hardware_tier_variantsrenderer指令针对不同硬件性能级别生成优化的shader变体,并提到了在编辑器中进行测试的方法。注意避免超过Unity的最大变体限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#pragma shader_feature __ TEST_STUFF

注:Unity中最多可以有128个关键字,但是Unity自己已经定义了一部分了,所以实际上会更少。所以使用multi_compile和shader_feature的时候,就需要特别注意不要超过这个限制。

Unity自身还内建一些multi_compile的快捷写法:

multi_compile_fwdbase:为基本前向渲染通道编译多个变体,不同的变体可能需要处理不同的光照贴图类型,或者一些使用了主平行光的阴影,而另一些禁用了。(参考Unity渲染管线)

multi_compile_fwdadd:为附加前向渲染通道编译多个变体,不同的变体可能需要处理不同类型的光源——平行光、聚光灯或者点光源,亦或者它们附带cookie纹理的版本。

multi_compile_fwdadd_fullshadows:同上,不过包含了可以让光源拥有实时阴影的功能。

multi_complie_fog:为处理不同的雾效类型(off/linear/exp/exp2)扩展了多个变体。

大部分内建快捷写法会导致许多shader变体,如果某些不需要使用,那么可以使用#pragma skip_variants来忽略它们。

#pragma multi_compile_fwdadd

// will make all variants containing

// "POINT" or "POINT_COOKIE" be skipped

#pragma skip_variants POINT POINT_COOKIE

使用multi_compile的目的一般是为了创建一些fallback或者简化shader,它们在同一个目标平台(例如OpenGL ES)的高端硬件和低端硬件上都可以高效地运行。这种时候,我们可以使用shader硬件变体来为不同性能等级的硬件创建一个特殊优化的变体集合。

为了生成shader硬件变体,需要添加#pragma hardware_tier_variantsrenderer,这里renderer表示某个可运行的渲染平台。使用这个指令,Unity会对每个shader生成3个shader变体(其他关键字会不起作用),而对应的关键字是:

UNITY_HARDWARE_TIER1

UNITY_HARDWARE_TIER2

UNITY_HARDWARE_TIER3

在编辑器里,可以通过Graphics Emulation菜单来测试他们。

注:这些shader并不受Quality Setting的影响,它们纯粹是通过检测GPU的相关性能来决定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值