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 타겟들을 위해서 이 속성을 지원되지 않습니다.

역링크