Epoch Dev Blog 8 - Depth Texture Precision on iOS

 • 

这篇 Update 会很短,因为这个问题的解决只有一句话。
Unity 很多海水 Shader 在 iOS 上都有一个类似的问题:A7 及以前的设备(iPhone 5S / iPad mini 2)上一切正常,但是在 之后的所有设备上都会出现 banding 的效果:


(typo in pic : bonding --> banding)


这个问题是相机的 Depth Buffer 精度不足导致的。当然前提是相机打开了 depthTextureMode:

GetComponent<Camera>().depthTextureMode |= DepthTextureMode.Depth;

解决这个问题需要修改 Shader 中的 sampler2D 精度。这个非常奇怪,因为理论上 sampler2D 的精度就应该和 sampler2D_float 一样 而不是 sampler2d_half,但改了后在 A9 设备上就正常了,谁知道呢。

uniform sampler2D _CameraDepthTexture;

改为

uniform sampler2D_float _CameraDepthTexture;