只能让物体的某些部分按照Alpha的值“

  秒速赛车技巧我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。

  这个问题还是出在Static Batching上。经过测试我们发现如果去掉场景中物件的“Static Batching”标记,换成手动Batching,即采用bine的方式结果就正确了。

  该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

  Q2:我们场景中有两种Unlit物体,一种是在脚本中通过Mesh顶点色(ors)赋颜色值,一种是用Shader属性传递颜色值,在Gamma颜色空间时两种物体的渲染颜色是一致的:

  但是切换到Linear空间发现不一样了,如下图,左边是顶点色,右边是Shader属性颜色:

  我能想到的有两种可能性:1)顶点色的颜色值在Shader中没有被正确处理;2)右边使用贴图的导入设置中sRGB的选项有错误。

  看上去左边的在线性空间下变亮了,而右侧的方块颜色在两种Space下差别不大,因此推测第一种的可能性比较大,顶点色在很多情况下并不被当作颜色处理,而作为值来存储,所以有可能这里处理有问题。至于为什么变亮了,感觉是值经过了伽马校正变大了。

  Unity有接口在两种颜色空间下转换,建议题主可以查一下,在Shader中修改代码来排查下是哪里的问题。

  该问题来自UWA 社区,感谢贾伟昊提供了回答,如您对该问题仍有疑问,可以转至社区进行进一步交流。

  Q3:当使用Linear设置时,UI上图片透明度等也跟着变化,出来的效果与美术人员的需求不一样。请问有什么办法可以让UI不使用Linear或者让UI可以在Linear影响下也正常呢?

  该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

  Q4:我们项目在实现显示部分模型像素的时候用了Builtin的Cutout Shader,还有一种方式是用Blend,也就是把Alpha设成0。我想请教下这两种方式有什么区别?性能上哪个好?在什么情况下使用比较高效?

  答案一:功能上,Alpha Test无法实现半透的效果,只能让物体的某些部分按照Alpha的值“透”或者“不透”,Alpha Blend可以做到半透,但是在多个Alpha Blend的物体重叠的情况下,由于不写Z会导致先后顺序可能存在问题。

  由于Alpha Test的实现是基于discard的方式,即在PS里发现Alpha的阈值不符合要求,就将该像素丢弃掉不进行渲染。这种方式会导致使用了类似early-z技术的GPU优化失效,导致性能下降。 另外,知乎上有讨论“对于PowerVR系列而言会影响HSR(隐藏面消除),打断ISP处理覆盖同一像素的几何体(更具体一点,ISP要得到PS执行后的结果才能正确进行HSR,在这一过程中,所有覆盖了带有discard操作像素的几何体全部都要等待)”。参考:

  所以整体来说,在移动设备上,Blend具有更高的性能,但是有些效果未必能够达到,结果可能不是美术设计想要的效果,特效中用得较多。题主也可以参考乐乐的这篇:感谢贾伟昊提供了以上回答

  答案二:不考虑硬件去讨论这个问题有点形而上学,另外,实际使用中还要考虑Overdraw的影响,而不是单纯的一层像素,再有就是,网上很多资料其实已经落后了。所以在知乎上搜这个问题,会有大牛告诉你Blend更快,但是会马上有人把测试截图贴出来说看我们的实测数据“test明显更快”。

  建议题主分别用Mali,PowerVR,Adreno的移动设备来测一下就知道差异了。 另外,PowerVR的HSR,楼主可以试试看用PowerVR Tool,看看Blend和Tes。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.yingkedasmt.com/ganhuo/53.html