我是使用Unity Engine的移动游戏开发人员。
这是我的问题:
我尝试使用颜色缓冲区和深度缓冲区将静态场景填充渲染到渲染目标中,如果游戏主要玩家的视点保持不变,我会在渲染动态对象之前渲染到下面的帧。我的目标是减少一些绘制呼叫以及为移动设备节省一些电力。这款策略可以节省高达20%的Android设备FYI MMO手机游戏消费能力。
以下照片是我测试项目的屏幕截图。球体,立方体和地形是静态物体,红色圆柱体正在移动。
你可以在android上看到深度测试结果是错误的。
iOS设备工作正常,深度测试正确,渲染结果几乎与优化关闭相同。请注意,阴影不对,但我们现在忽略它。
然而Android上的结果并不好。移动的圆柱体被立方体部分遮挡,并且框架之间的遮挡不稳定。
结果似乎深度缓冲精度不够。关于这个问题的任何想法?
我用Google搜索了这个问题,但没有直接的答案。有人说我们无法在GLES上读取深度缓冲区。
https://forum.unity.com/threads/poor-performance-of-updatedepthtexture-why-is-it-even-needed.197455/ 然后有些情况下平台根本不支持从Z缓冲区读取(没有暴露GL_OES_depth_texture时为GLES;或者当驱动程序中没有INTZ黑客时为Direct3D9;或者Mac上带有一些有缺陷的Radeon驱动程序的桌面GL等) )。
这是真的吗?