【Unity】经验汇总

移动平台使用顶点动画或UV动画的问题 5.4.2

在开发中,游戏打包到移动平台常出现的两种问题:

1.顶点动画:卡顿,动画变得生硬。

2.UV动画:贴图马赛克,模糊。

在实际问题解决中发现,导致这种问题的一般都是精度问题,移动平台开发针对大量性能不一的GPU。各种无法预料的问题。

很多效果在PC上的模拟器正常,打包到安卓还有ios就会出现各种奇怪的问题。

个人的移动平台图形编程功夫还不到家,只能摸索着解决。

UV动画出现卡顿,解决方案,限制UV的范围。只能缓解。

涉及到_Time的使用时,很大几率会出现问题。不管是使用_Time进行UV顶点,还是顶点动画,在一些移动设备尤其是旧的移动设备上,shader mode 2.0,fragment shader精度低的情况下,基本上都会有问题。

 

Mipmap导致模型显示UV接缝问题。5.4.2

基本上是纹理采样精度的问题,尤其是在UV很紧张的情况下,使用双线性过滤这种不够精确的纹理采样技术以及Mipmap使用的图片像素较低的情况下,由于采样精度误差导致UV外的颜色被显示出来。解决的方案挺多,美术上是缩一下UV,留出一定的缝隙用来填充过渡色,减少这种黑线出现的概率。最好的办法是开启各向异性过滤,使得采样精度变高,精度误差的概率也会变的极低,但是各向异性过滤的主程序那边因为性能考虑并没有采用,所以使用美术修改UV的方式实现。

 

UGUI组件前渲染半透明物体问题

记录一下:

Unity 5.4.2

问题:在半透明UI上渲染半透明物体不显示。

游戏在一些情境下会有模型在UI组件前进行渲染展示的效果,一般来说是使用UGUI组件实现。

举例说明,Image组件覆盖整个屏幕,为半透明。Image组件前有一些不透明物体和一个半透明物体,半透明物体在不透明物体之前。我们在摄像机观察时,发现半透明物体只有在和不透明物体重合的部分出现,其余部分被挡住。

我们知道,半透明物体的渲染队列是在不透明物体之后的,这样可以防止出现透明物体后像素丢失的问题。但是在进行UI前渲染半透明物体时,UI组件比半透明物体渲染队列更靠后。

如果开启Zwrite,半透明物体显示,但发现半透明物体与UI后的场景进行了透明度混合。即显示在UI前的半透明物体,不与后面的UI组件进行透明度混合,反而和场景的物体进行了透明度混合。

即使将半透明物体的Queue设置为Overlay,依旧在UI组件的Canvas之前渲染。

现在的解决方案是:给半透明物体挂一个脚本,调整其sortoder值,使得半透明物体的sortorder大于UI组件的sortorder。

在渲染优先级中,相机的优先级最高,其次是sortlayer的优先级,再次是sortorder的优先级。然后根据这次尝试,shader中queue属性的优先级最低

 

使用Shader.Find打包问题

在代码中使用Shader.Find,结果打包到移动平台上报错空引用异常。原因是使用Shader.Find的着色器并没有被打包进包体中,需要手动always include中添加,或者采用设置引用的方式。

 

CommamdBuffer的深度问题

使用CommandBuffer,先cb.drawrenderer再拿rt和先拿rt后drawrenderer的结果竟然是不一样的?我的rt在不透明队列后面执行,结果第一种深度显示正常,第二个没有深度。第二种操作是不进行深度测试的。

posted @ 2017-08-17 11:41  JaffHan  阅读(851)  评论(0编辑  收藏  举报