zoukankan      html  css  js  c++  java
  • 【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在不透明队列后面执行,结果第一种深度显示正常,第二个没有深度。第二种操作是不进行深度测试的。

  • 相关阅读:
    MySQL-第十四篇事务管理
    MySQL-第十三篇使用ResultSetMetaData分析结果集
    MySQL-第十二篇管理结果集
    MySQL-第十一篇JDBC典型用法
    MySQL-第十篇多表连接查询
    Java中List集合去除重复数据的方法1
    去除List集合中的重复值(四种好用的方法)(基本数据类型可用)
    去除list集合中重复项的几种方法
    Java中List集合去除重复数据的四种方法
    Java中List集合去除重复数据的方法
  • 原文地址:https://www.cnblogs.com/jaffhan/p/7380764.html
Copyright © 2011-2022 走看看