unity 5.3.5镂空shader的一个bug

现象

在某些android手机上,比如OPPO r7s(adreno 405 GPU),镂空效果错误。该透的地方没透。主要用于草和树的渲染。

定位

弄了一个简单的sample(不用unity),discard指令是可以正确执行的,怀疑可能跟unity的环境有关。
用Intel® Graphics Performance Analyzers debug了一下,shader中的clip函数被翻译成了一个比较奇怪的样子。具体来说
clip(col.a - _Cutoff);
会被翻译成
    u_xlat10_1.x = u_xlat10_0.w + (-_Cutoff);
#ifdef UNITY_ADRENO_ES3
    u_xlatb2 = !!(u_xlat10_1.x<0.0);
#else
    u_xlatb2 = u_xlat10_1.x<0.0;
#endif
    if((int(u_xlatb2) * int(0xffffffffu))!=0){discard;}
在出问题的手机上UNITY_ADRENO_ES3是被定义了的。在unity编辑器中选中shader也可以直接查看翻译后的代码。
提一句,unity对于shader的跨平台方案是开发统一使用HLSL语法,针对不同
平台使用不同的工具进行翻译[1]。其中gles 2.0,和gles 3.0使用的工具就不一样。生成的GLSL代码也有挺大不同。
既然discard没有问题,那么就可能是这个条件分支的问题了。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值