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;