이 페이지에서는 Unity 빌트인 렌더 파이프라인의 디퍼드 셰이딩 렌더링 경로에 대해 자세히 설명합니다. 디퍼드 셰이딩의 기술 개요는 Wikipedia: 디퍼드 셰이딩을 참조하십시오.
디퍼드 셰이딩을 사용할 때는 게임 오브젝트에 영향을 줄 수 있는 광원 수에 제한이 없습니다. 모든 광원은 픽셀 단위로 평가되므로 모든 광원이 노멀 맵과 올바르게 상호 작용합니다. 또한 모든 광원에는 쿠키와 그림자가 있을 수 있습니다.
디퍼드 셰이딩은 조명의 처리 오버헤드가 광원이 비추는 픽셀 수에 비례한다는 장점이 있습니다. 이 값은 씬에서 조명을 비추는 게임 오브젝트의 수와 관계없이 광원의 크기에 따라 결정됩니다. 따라서 광원을 작게 유지하면 성능을 개선할 수 있습니다. 디퍼드 셰이딩은 또한 동작이 매우 일관적이고 예측 가능합니다. 각 광원의 효과는 픽셀 단위로 계산되므로 큰 삼각형에서 조명 계산이 깨지는 현상이 나타나지 않습니다.
단점은 디퍼드 셰이딩이 안티앨리어싱을 실제로 지원하지 않으며 반투명 게임 오브젝트를 처리할 수 없다는 점입니다(이러한 오브젝트는 포워드 렌더링을 사용하여 렌더링됨). 또한 메시 렌더러의 Receive Shadows 플래그도 지원되지 않으며 컬링 마스크는 제한된 방식으로만 지원됩니다. 컬링 마스크는 최대 4개만 사용할 수 있습니다. 즉, 컬링 레이어 마스크는 최소한 모든 레이어에서 임의의 4개 레이어를 뺀 만큼 포함해야 하므로 32개의 레이어 중 28개를 설정해야 합니다. 그렇지 않으면 그래픽 결함이 발생합니다.
MRT(다중 렌더 타겟), 셰이더 모델 3.0 버전 이상, 뎁스 렌더 텍스처를 지원하는 그래픽 카드가 필요합니다. 2006년 이후에 제작된 대부분의 PC 그래픽 카드는 GeForce 8xxx, Radeon X2400, Intel G45부터 디퍼드 셰이딩을 지원합니다.
모바일 기기에서는 OpenGL ES 3.0 이상을 실행하는 모든 기기에서 지원됩니다.
참고: 직교 투사를 사용할 때는 디퍼드 렌더링이 지원되지 않습니다. 카메라의 투사 모드를 Orthographic으로 설정하면 카메라는 포워드 렌더링으로 폴백합니다.
참고: 디퍼드 렌더링은 빌트인 렌더 파이프라인에서 단일 패스 스테레오 인스턴싱을 지원하지 않습니다.
디퍼드 셰이딩에서 실시간 광원의 렌더링 오버헤드는 광원이 비추는 픽셀 수에 비례하며 씬의 복잡도에 따라 달라지지 않습니다. 따라서 작은 점 광원이나 스폿 광원은 렌더링하는 데 연산 비용이 매우 적고 씬 게임 오브젝트에 의해 완전히 또는 부분적으로 가려져 있으면 훨씬 더 적습니다.
물론 그림자가 있는 광원은 그림자가 없는 광원보다 연산 비용이 훨씬 더 많이 듭니다. 디퍼드 셰이딩에서 그림자를 드리우는 게임 오브젝트는 여전히 그림자를 드리우는 각 광원에 대해 한 번 이상 렌더링해야 합니다. 또한 그림자가 비활성화된 조명 셰이더보다 그림자를 적용하는 조명 셰이더를 사용할 때 더 많은 렌더링 오버헤드가 발생합니다.
디퍼드 셰이딩을 지원하지 않는 셰이더가 포함된 오브젝트는 디퍼드 셰이딩이 완료된 후에 포워드 렌더링 경로를 사용하여 렌더링됩니다.
아래에 G버퍼의 렌더 타겟(RT0-RT4)의 기본 레이아웃이 나와 있습니다. 데이터 유형은 각 렌더 타겟의 다양한 채널에 배치됩니다. 사용된 채널은 괄호로 표시됩니다.
따라서 기본 G버퍼 레이아웃은 160비트/픽셀(비HDR) 또는 192비트/픽셀(HDR)입니다.
섀도우 마스크 또는 디스턴스 섀도우 마스크 모드를 혼합 조명에 사용하는 경우 다음과 같은 다섯 번째 타겟이 사용됩니다.
따라서 G버퍼 레이아웃은 192비트/픽셀(비HDR) 또는 224비트/픽셀(HDR)입니다.
하드웨어가 5개의 동시 렌더 타겟을 지원하지 않는 경우 섀도우 마스크를 사용하는 오브젝트는 포워드 렌더링 경로로 폴백합니다. 이미션+라이팅 버퍼(RT3)는 로그로 인코딩되어 카메라가 HDR을 사용하지 않을 때 ARGB32 텍스처로 일반적으로 얻을 수 있는 것보다 더 높은 동적 범위를 제공합니다.
카메라에서__ HDR__하이 다이내믹 레인지
See in Glossary 렌더링을 사용하는 경우 이미션+라이팅 버퍼(RT3)에 대해 렌더 타겟이 별도로 생성되지 않고, 카메라가 렌더링되는 렌더 타겟(즉 이미지 효과에 전달되는 타겟)이 RT3으로 사용됩니다.
G버퍼 패스는 각 게임 오브젝트를 한 번만 렌더링합니다. 디퓨즈 및 스페큘러 컬러, 표면 평활도, 월드 공간 노멀, 이미션+앰비언트+반사+라이트맵은 G버퍼 텍스처로 렌더링됩니다. G버퍼 텍스처는 셰이더가 나중에 액세스할 수 있도록 전역 셰이더 프로퍼티로 설정됩니다(CameraGBufferTexture0 .. CameraGBufferTexture3 이름).
조명 패스는 G버퍼와 뎁스를 기반으로 조명을 계산합니다. 조명은 스크린 공간에서 계산되므로 처리하는 데 걸리는 시간은 씬의 복잡도와는 무관합니다. 이미션 버퍼에 조명이 추가됩니다.
카메라의 근평면을 지나가지 않는 점 광원과 스폿 광원은 3D 모양으로 렌더링되며, Z버퍼의 씬 테스트가 활성화되어 있습니다. 따라서 부분적으로 또는 완전히 가려진 점 광원과 스폿 광원을 렌더링하는 데는 연산 비용이 매우 적습니다. 근평면을 지나가는 방향 광원과 점 광원 또는 스폿 광원은 전체 화면 사각형으로 렌더링됩니다.
광원에 그림자가 활성화된 경우 그림자도 이 패스에서 렌더링되고 적용됩니다. 그림자는 ’무료’로 제공되지 않습니다. 그림자 캐스터는 렌더링되어야 하며, 더 복잡한 광원 셰이더를 적용해야 합니다.
사용 가능한 유일한 조명 모델은 스탠다드입니다. 다른 모델을 원한다면 빌트인 셰이더에 있는 변경된 버전의 Internal-DeferredShading.shader 파일을 ‘Assets’ 폴더의 ’Resources’라는 폴더에 배치하여 조명 패스 셰이더를 수정할 수 있습니다. 그런 다음 Graphics 설정(메뉴: Edit > Project Settings를 클릭한 다음 Graphics 카테고리를 클릭)을 엽니다. ‘Deferred’ 드롭다운을 ’Custom Shader’로 변경합니다. 그런 다음 사용 중인 셰이더에 표시되는 셰이더 옵션을 변경합니다.
2017–06–08
5.6에 광원 모드(섀도우 마스크 및 디스턴스 섀도우 마스크) 추가됨