unity 5.3.5镂空shader的一个bug
来源:互联网 发布:计算机冗余控制软件 编辑:程序博客网 时间:2024/05/13 14:29
现象
在某些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没有问题,那么就可能是这个条件分支的问题了。
用sample测试,条件判断是没问题的,
u_xlatb2 = !!(u_xlat10_1.x<0.0);这句不能得到正确的结果。
后来发现这是unity 5.3.5引入的问题[2],并且在5.3.5 p8中解决[3]。
升级版本之前暂时强制渲染API使用opengl es 2.0
ps. 这个问题跟镂空没啥关系,而是条件分支的问题,只不过clip会生成条件分支
[1] http://docs.unity3d.com/Manual/SL-ShadingLanguage.html
[2] http://answers.unity3d.com/questions/1227696/spotlight-not-working-on-unity-version-535-and-hig.html
[3] https://unity3d.com/cn/unity/qa/patch-releases/5.3.5p8
0 0
- unity 5.3.5镂空shader的一个bug
- 一个镂空的世界
- 一个示例性的Unity Shader例子
- 【Unity Shader】一个简单的着色器
- 推荐一个博客,说Unity Shader的
- Unity shader 写一个垃圾的 黄金shader
- 【Unity Shader】一个用于手游的次世代角色Shader
- Unity的shader
- 基本的unity shader
- unity shader的组织形式
- unity shader TRANSFER_VERTEX_TO_FRAGMENT 宏的一个小细节
- 【Unity Shader】一个简单的顶点/片元着色器
- 【Unity】【Shader】写一个初步的水波模拟Gerstner Waves
- Unity Shader学习6 —— Unity创建一个Shader
- Shader 学习二:Unity shader 的组织形式
- Unity Shader学习笔记:简单的shader
- Unity的Shader入门学习
- 关于unity shader的StencilBuffer
- UVA 455解题报告
- addroid M(6.0) 编译错误
- 重开一个技术博客,立Flag!
- Python黑帽编程3.0 第三章 网络接口层攻击基础知识
- 类中定义函方法 PyCharm 提示Method xxx may be 'static'
- unity 5.3.5镂空shader的一个bug
- cvc-complex-type.2.4.a: Invalid content was found starting with element
- Lib Vote 建哪个知识库,你说了算
- 权限控制案例
- monkey自动化随机测试
- 如何招聘研发人员
- 分类:category
- getView顺序加载显示图片
- UIImageView响应点击事件