ShaderLab的Dependency关键字用途推测

在UWA的问答中找到了这样一条线索:

https://answer.uwa4d.com/question/5ab8b537d35eb22c10a0a426

所以,官方文档是不存在的。

答案中提供的博客地址也是无法访问的,无法连接至 alastaira.wordpress.com 的服务器,翻墙不翻墙都无法访问。

基于Qiang提供的线索,对Unity3d的Terrain进行注释Dependency的尝试。

 保留AddPassShader注释掉AddPassShader
使用4张地形贴图一切正常一切正常
使用9张(大于4)地形贴图一切正常显示错误紫

测试结果验证了Qiang的说法,Dependency "AddPassShader"这项依赖是在地形贴图大于4张时才被使用的,如果未提供该依赖项,Shader直接出错。这个名为Add的Shader主要通过定义TERRAIN_SPLAT_ADDPASS关键字来工作,从实现逻辑看,是针对第5~N套贴图,权重为0的被直接裁剪掉,否则就执行和前4套贴图一样的绘制逻辑。从实际的测试情况看,第1~4套贴图是使用地形Shader的默认着色Pass进行渲染,第5~9(N)套贴图是使用这个被指定的AddPassShader的默认着色Pass进行渲染。而Dependency "BaseMapShader"是用于低端设备的说法从源码实现中也得到了验证,当设备无法支持4套(8张)纹理贴图时,仅使用1套纹理贴图执行渲染。而从基础Shader没有提供Meta这个pass来看,想来在烘焙的时候也是Fallback到这个Shader来使用它的Meta Pass的。

所以,推断Dependency属性的用法是定义一个Shader名字,供逻辑层指定在不同情境下自动改用指定的Shader,而未被定义的Pass可能仍使用原Shader中的Pass。理论上也可用于自定义的Shader切换逻辑,比如白天、夜晚使用不同的Shader。具体指定的方法还需要找找引擎是否提供了相应的API。这种用法和直接使用Shader关键字定义产生不同变体的用法的区别不明。

以上均为推测,欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值