Camera's Depth Texture
Desktop!
In Unity에서 카메라는 깊이 또는 깊이+normals 텍스쳐를 생성할 수 있습니다. 이것은 포스트 프로세싱 효과를 위해서나 또는 사용자 정의 조명 모델 (예. 조명 pre-pass)을 구현하기 위해서 사용될 수 있는 최소한의 G-buffer 텍스쳐 입니다. 카메라는 실제로 Shader Replacement 속성을 사용해서 깊이 텍스쳐를 만듭니다. 따라서 사용자가 다른 G-buffer 셋업을 필요로 하는 경우에 그것을 사용자 스스로 하는 것이 가능합니다.
카메라의 깊이 텍스쳐는 스크립트로 부터 Camera.depthTextureMode변수를 사용해서 작동될 수 있습니다.
두 가지의 가능한 깊이 텍스쳐 모드가 있습니다:
- DepthTextureMode.Depth: depth texture.
- DepthTextureMode.DepthNormals:하나의 텍스쳐로 묶여지는 깊이와 뷰의 공간normals.
DepthTextureMode.Depth texture
이것은 스크린 사이즈의 depth texture를 구축합니다.
DepthTextureMode.DepthNormals texture
이것은 스크린 사이즈의 32 bit (8bit/channel) 텍스쳐를 구축하고 거기서 뷰 공간 normals는 R&G 채널들로 인코딩되어 지고 깊이는 B&A 채널로 인코딩 되어 집니다. Normals는Stereographic 프로젝션을 사용해서 인코딩 되고 깊이는 16 bit 값으로 8 bit 채널로 묶여집니다.
UnityCG.cginc
Cg는 인코딩되어 있는 픽셀 값으로부터 깊이와 normal을 풀기위해 하나의 도움 함수인 DecodeDepthNormal
을 가지는 파일을 포함합니다.
예를 들어 깊이와 normals 텍스쳐를 어떻게 사용하는지에 대해서Shader Replacement 예제 프로젝트나 또는 SSAO Image Effect에 있는EdgeDetection 이미지 효과를 참고하시기 바랍니다.
Tips & Tricks
복잡한 쉐이더나 이미지 효과를 구현할 때 Rendering Differences Between Platforms을 명심하시기 바랍니다. 특히 이미지 효과에서 깊이 텍스쳐를 사용하는 것은 종종Direct3D + Anti-Aliasing에 대한 특별한 조치를 필요로 합니다.
몇몇 경우에 깊이 텍스쳐는 본래의 Z 버퍼로부터 직접적으로 올지도 모릅니다. 사용자가 사용자의 깊이 텍스쳐에서 아티팩트를 본다면 그것을 사용하는 쉐이더가 Z 버퍼로 쓰지 않는지를 확실히 하기 바랍니다 (ZWrite Off을 사용하세요).
iOS!
iOS 타겟들을 위해서 이 속성은 지원되지 않습니다.
Android!
< Android 타겟들을 위해서 이 속성을 지원되지 않습니다.
- 출처: 유니티코리아위키 (CC BY-NC-SA 2.0)