렌더러 및 머티리얼 우선 순위
렌더 파이프라인은 오브젝트를 렌더링하기 전에 오브젝트를 정렬하여 화면에 올바른 순서로 나타나도록 해야 합니다. 렌더 파이프라인은 카메라에서 멀리 떨어진 오브젝트를 먼저 그려야 합니다. 그래야만 나중에 그 위에 가까운 오브젝트를 그릴 수 있습니다. 순서가 정확하지 않으면 카메라에서 멀리 떨어진 오브젝트가 가까운 오브젝트 앞에 나타날 수 있습니다.
빌트인 Unity 렌더 파이프라인은 렌더링 모드와 renderQueue에 따라 게임 오브젝트를 정렬합니다. HDRP는 다른 방식으로 렌더 대기열을 사용합니다. 즉 HDRP 머티리얼이 렌더 대기열을 직접 노출하지 않습니다. 대신에 HDRP는 두 개의 제어 방식, 즉 머티리얼 기준 정렬과 렌더러 기준 정렬을 도입합니다.
HDRP는 두 개의 정렬 방식을 함께 사용하여 렌더 대기열을 제어합니다. 렌더 대기열의 순서를 계산하기 위해 HDRP는 다음 단계를 수행합니다.
- 메시를 머티리얼을 공유하는 그룹으로 정렬합니다.
- 각 머티리얼의 Priority를 사용하여 이러한 머티리얼 그룹의 렌더링 순서를 계산합니다.
- 각 메시 렌더러의 Priority 프로퍼티를 사용하여 머티리얼 그룹을 정렬합니다.
결과 대기열은 머티리얼의 Priority를 기준으로 먼저 정렬된 후 개별 메시 렌더러의 Priority를 기준으로 정렬된 게임 오브젝트 리스트입니다.
머티리얼 기준 정렬
Transparent Surface Type의 머티리얼에는 다른 머티리얼을 사용하는 메시 그룹 정렬에 사용할 수 있는 Sorting Priority 프로퍼티가 있습니다. 이 프로퍼티는 -100과 100 사이에 고정된 정수 값입니다.
HDRP는 음수 값을 지원하므로 새로운 머티리얼을 가장 낮은 우선 순위에 간편하게 할당할 수 있습니다. 이는 가장 낮은 우선 순위가 다른 머티리얼에 이미 사용되고 있을 때 새로운 머티리얼을 가장 낮은 우선 순위에 할당할 때 유용합니다. 이 경우 새로운 머티리얼을 수용하기 위해 다른 모든 머티리얼의 정렬 우선 순위를 1씩 증가시키는 대신, 새로운 머티리얼의 우선 순위를 음수 값으로 할당할 수 있습니다.
HDRP는 Sorting Priority를 사용하여 씬의 다른 머티리얼을 사용하는 게임 오브젝트를 정렬합니다. HDRP는 Sorting Priority 값이 낮은 머티리얼을 먼저 렌더링합니다. 즉 첫 번째 머티리얼을 사용하는 메시가 카메라에서 더 멀리 떨어져 있더라도 Sorting Priority 값이 높은 머티리얼을 사용하는 메시가 낮은 값의 머티리얼을 사용하는 메시보다 앞에 나타납니다.
예를 들어 다음 씬에는 두 개의 다른 머티리얼을 사용하는 두 개의 구체(Sphere 1, Sphere 2)가 포함되어 있습니다. 보시는 것처럼 Sphere 1이 Sphere 2보다 Camera에 더 가깝습니다.
각 머티리얼의 Sort Priority가 동일하면 HDRP는 해당 머티리얼을 똑같이 중요하게 취급하고, 카메라와 머티리얼 간의 거리를 기준으로 렌더링 순서를 결정합니다. 이 예제에서 두 머티리얼의 Sort Priority는 0으로 설정되었으므로 HDRP는 카메라와 떨어진 거리에 의해 정의된 순서로 머티리얼을 렌더링합니다. 즉 Sphere 1이 Sphere 2 앞에 나타납니다.
다른 머티리얼의 Sort Priority 프로퍼티가 동일하지 않으면 HDRP 머티리얼은 우선 순위가 낮은 머티리얼보다 우선 순위가 높은 머티리얼을 사용하는 메시를 먼저 표시합니다. 이를 위해 HDRP는 우선 순위가 낮은 머티리얼을 사용하는 메시를 먼저 그린 후 우선 순위가 높은 머티리얼을 사용하는 메시를 이미 그려진 메시 위에 그립니다. 예제에서 Sphere 2의 Sort Priority를 1로 설정하면 HDRP는 Sphere 1을 먼저 렌더링한 후 Sphere 2를 렌더링합니다(Sphere 1 위에 그림). 이렇게 하면 Sphere 1이 Camera와 더 가까이 있어도 Sphere 2가 Sphere 1 앞에 나타납니다.
⚠ 머티리얼에서 Depth Write가 활성화되면 Sort Priority가 무시됩니다. 셰이더에서 수행한 Depth Test가 머티리얼의 Sort Priority를 덮어쓰기 때문입니다.
렌더러 기준 정렬
메시 렌더러에는 씬에서 동일한 머티리얼을 사용하는 렌더러를 정렬하기 위한 Priority 프로퍼티가 있습니다.
동일한 머티리얼을 사용하는 게임 오브젝트의 렌더링 순서를 수정하려면 메시 렌더러의 인스펙터에서 Priority 프로퍼티를 사용하십시오. Priority는 씬에서 렌더러의 렌더링 순서에 영향을 줄 수 있는 렌더러별 프로퍼티입니다.
HDRP는 Priority 값이 높은 렌더러를 Priority 값이 낮은 렌더러 앞에 표시합니다.
rendererPriority 값을 설정하여 스크립트의 메시 렌더러에 대해 렌더러 Priority 값을 편집할 수도 있습니다.
사용 예제
다음 씬에는 동일한 머티리얼을 사용하는 두 개의 구체(Sphere 1, Sphere 2)가 포함되어 있습니다. 보시는 것처럼 Sphere 1이 Sphere 2보다 Camera에 더 가깝습니다.
각 메시 렌더러의 렌더러 Priority가 동일하면 HDRP는 해당 메시 렌더러를 똑같이 중요하게 취급하고, 카메라와 각 메시 렌더러 간의 거리를 기준으로 렌더링 순서를 결정합니다. 이 예제에서 두 메시 렌더러의 렌더러 Priority는 0으로 설정되었으므로 HDRP는 카메라와 떨어진 거리에 의해 정의된 순서로 머티리얼을 렌더링합니다. 즉 Sphere 1이 Sphere 2 앞에 나타납니다.
다른 메시 렌더러의 Renderer Priority 프로퍼티가 동일하지 않으면 HDRP는 우선 순위가 낮은 메시 렌더러보다 우선 순위가 높은 메시 렌더러를 먼저 표시합니다. 이를 위해 HDRP는 우선 순위가 낮은 메시를 먼저 그린 후 우선 순위가 높은 메시를 이미 그려진 메시 위에 그립니다. 예제에서 Sphere 2의 Renderer Priority를 1로 설정하면 HDRP는 Sphere 1을 먼저 렌더링한 후 Sphere 2를 렌더링합니다(Sphere 1 위에 그림). 이렇게 하면 Sphere 1이 Camera와 더 가까이 있어도 Sphere 2가 Sphere 1 앞에 나타납니다.