A Camera can generate a depth or depth+normals texture. This is a minimalistic G-buffer texture that can be used for post-processing effects or to implement custom lighting models (e.g. light pre-pass). It is also possible to build similar textures yourself, using Shader Replacement feature.
Camera’s depth texture can be turned on using Camera.depthTextureMode variable from script.
There are two possible depth texture modes:
화면 크기의 뎁스 텍스처를 빌드합니다.
뎁스 텍스처는 셰이더 캐스터 렌더링에 사용되는 것과 동일한 셰이더 패스(ShadowCaster
패스 타입)를 사용하여 렌더링됩니다. 따라서 셰이더가 섀도우 캐스팅을 지원하지 않는 경우(즉 셰이더나 폴백에 섀도우 캐스터 패스가 없는 경우), 해당 셰이더를 사용하는 오브젝트는 뎁스 텍스처에 표시되지 않습니다.
머티리얼과 셰이더가 렌더 대기열 <= 2500을 사용하도록 설정된 “불투명” 오브젝트만 뎁스 텍스처로 렌더할 수 있습니다.
뷰 공간 노멀이 R&G 채널로 인코딩되고 뎁스가 B&A 채널로 인코딩되는 스크린 크기 32비트(8 비트/채널) 텍스처를 빌드합니다. 노멀은 스테레오그래픽 투사를 사용하여 인코딩되고 뎁스는 8비트 채널로 패킹된 16비트 값입니다.
UnityCG.cginc
포함 파일에는 인코딩된 픽셀 값에서 뎁스와 노멀을 디코딩하는 DecodeDepthNormal
헬퍼 함수가 있습니다. 반환되는 뎁스의 범위는 01입니다.
뎁스 및 노멀 텍스처 사용 방법의 예제는 셰이더 대체 예제 프로젝트에서 EdgeDetection 이미지 이펙트나 스크린 공간 앰비언트 오클루전 이미지 이펙트를 참조하십시오.
카메라 인스펙터는 카메라가 뎁스 또는 뎁스+노멀 텍스처를 렌더링할 때 표시합니다.
The way that depth textures are requested from the camera (Camera.depthTextureMode) might mean that after you disable some effect that needed them, the camera might still continue rendering them. Particularly with multiple effects present on a camera, where each of them needs a depth texture, there’s no good way to automatically “disable” depth texture rendering if you disable the individual effects.
When implementing complex shaders or Image Effects, keep Rendering Differences Between Platforms in mind. In particular, using depth texture in an Image Effect often needs special handling on Direct3D + Anti-Aliasing.
경우에 따라서는 뎁스 텍스처가 네이티브 Z 버퍼에서 직접 비롯됩니다. 뎁스 텍스처에 결함이 보이는 경우 이 텍스처를 사용하는 셰이더가 Z 버퍼에 쓰지 않도록 해야 합니다(ZWrite Off 사용).
뎁스 텍스처는 셰이더에서 전역 셰이더 프로퍼티로 샘플링하는 데 사용 가능합니다. _CameraDepthTexture
라는 샘플러를 선언하여 카메라의 메인 뎁스 텍스처를 샘플링할 수 있습니다.
_CameraDepthTexture
는 항상 카메라의 기본 뎁스 텍스처를
참조합니다. 반대로, _LastCameraDepthTexture
를 사용해 카메라로 렌더링된 마지막 뎁스 텍스처를 참조할 수 있습니다. 예를 들어, 보조 카메라를 사용하여 스크립트에 절반 해상도 뎁스 텍스처를 렌더링하고 후처리 셰이더에서 사용할 수 있게 하려는 경우 유용할 수 있습니다.
뎁스 텍스처는 사용되는 렌더링 경로와 하드웨어에 따라 실제 뎁스 버퍼에서 직접 비롯되거나 개별 패스로 렌더될 수 있습니다. 일반적으로 디퍼드 셰이딩 또는 레거시 디퍼드 라이팅 렌더링 경로를 사용하는 경우 뎁스 텍스처는 G버퍼 렌더링의 산물이므로 “무료”로 얻을 수 있습니다.
DepthNormals 텍스처를 개별 패스에 렌더링하는 경우 셰이더 대체를 통해 렌더링됩니다. 따라서 셰이더에 정확한 “RenderType” 태그가 있는 것이 중요합니다.