지우기, 렌더링 순서 및 오버드로우
지우기
유니버설 렌더 파이프라인(URP)에서 카메라 지우기 동작은 카메라의 렌더 타입에 따라 다릅니다.
베이스 카메라
컬러 버퍼
렌더 루프가 시작할 때 베이스 렌더 타입의 카메라는 스카이박스로 컬러 버퍼를 지우거나, 단색 컬러로 컬러 버퍼를 지우거나, 초기화되지 않은 컬러 버퍼를 사용할 수 있습니다. Render Type이 Base로 설정된 경우 카메라 인스펙터의 Background Type 프로퍼티를 사용하여 이러한 동작을 정의할 수 있습니다.
초기화되지 않은 컬러 버퍼의 콘텐츠는 플랫폼에 따라 다릅니다. 일부 플랫폼에서는 초기화되지 않은 컬러 버퍼에 이전 프레임의 데이터가 포함됩니다. 다른 플랫폼에서는 초기화되지 않은 컬러 버퍼에 초기화되지 않은 메모리가 포함됩니다. 카메라가 컬러 버퍼의 모든 픽셀에 그리는 경우 또는 불필요한 지우기 작업으로 성능을 소모하고 싶지 않은 경우에만 초기화되지 않은 컬러 버퍼를 사용해야 합니다.
뎁스 버퍼
각 렌더 루프가 시작할 때 베이스 카메라는 항상 해당 뎁스 버퍼를 지웁니다.
오버레이 카메라
컬러 버퍼
해당 렌더 루프가 시작할 때 오버레이 카메라는 카메라 스택에 있는 이전 카메라의 컬러 데이터가 포함된 컬러 버퍼를 받습니다. 컬러 버퍼의 콘텐츠는 지우지 않습니다.
뎁스 버퍼
해당 렌더 루프가 시작할 때 오버레이 카메라는 카메라 스택에 있는 이전 카메라의 뎁스 데이터가 포함된 뎁스 버퍼를 받습니다. Render Type이 Overlay로 설정된 경우 카메라 인스펙터의 Clear Depth 프로퍼티를 사용하여 이러한 동작을 정의할 수 있습니다.
Clear Depth 를 true로 설정하면 오버레이 카메라는 뎁스 버퍼를 지우고 기존 컬러 데이터 위의 컬러 버퍼에 해당 뷰를 그립니다. Clear Depth 를 false로 설정하면 오버레이 카메라가 뎁스 버퍼에 대해 테스트를 진행한 후 컬러 버퍼에 해당 뷰를 그립니다.
카메라 컬링 및 렌더링 순서
URP 씬에 여러 개의 카메라가 포함된 경우 Unity는 예측 가능한 순서로 컬링 및 렌더링 작업을 수행합니다.
프레임당 한 번씩 Unity는 다음 작업을 수행합니다.
- Unity는 씬에 있는 모든 활성 베이스 카메라 리스트를 가져옵니다.
- Unity는 활성 베이스 카메라를 2개의 그룹, 즉 렌더 텍스처에 해당 뷰를 렌더링하는 카메라 그룹과 화면에 해당 뷰를 렌더링하는 카메라 그룹으로 나눕니다.
- Unity는 렌더 텍스처에 렌더링하는 베이스 카메라를 Priority 순서로 정렬하여 Priority 값이 높은 카메라를 마지막에 그리도록 만듭니다.
- 렌더 텍스처에 렌더링하는 각 베이스 카메라에 대해 Unity는 다음 단계를 수행합니다.
- Unity는 화면에 렌더링하는 베이스 카메라를 Priority 순서로 정렬하여 Priority 값이 높은 카메라를 마지막에 그리도록 만듭니다.
- 화면에 렌더링하는 각 베이스 카메라에 대해 Unity는 다음 단계를 수행합니다.
- 베이스 카메라를 컬링합니다.
- 베이스 카메라를 화면에 렌더링합니다.
- 베이스 카메라의 카메라 스택에 포함된 각 오버레이 카메라에 대해 카메라 스택에 정의된 순서대로 다음을 수행합니다.
- 오버레이 카메라를 컬링합니다.
- 오버레이 카메라를 화면에 렌더링합니다.
Unity는 프레임 동안 오버레이 카메라의 뷰를 여러 번 렌더링할 수 있습니다. 이는 오버레이 카메라가 두 개 이상의 카메라 스택에 나타나거나, 오버레이 카메라가 동일한 카메라 스택에 두 번 이상 나타나기 때문입니다. 이 경우 Unity는 컬링 또는 렌더링 작업의 요소를 다시 사용하지 않습니다. 작업은 위에 설명된 순서대로 전부 반복됩니다.
중요한 참고 사항: 이 URP 버전에서 오버레이 카메라와 카메라 스태킹은 유니버설 렌더러를 사용할 때에만 지원됩니다. 2D 렌더러를 사용할 경우 오버레이 카메라는 렌더링 루프의 어느 부분도 수행하지 않습니다.
오버드로우
URP는 오버드로우를 줄이기 위해 렌더링 순서 최적화를 포함하여 카메라 내에서 여러 가지의 최적화를 수행합니다. 하지만 카메라 스택을 사용하면 해당 카메라가 렌더링되는 순서를 효과적으로 정의할 수 있습니다. 따라서 과도한 오버드로우를 유발하는 방식으로 카메라 순서를 지정하지 않도록 주의해야 합니다.
카메라 스택의 여러 카메라가 동일한 렌더 타겟에 렌더링하는 경우 Unity는 카메라 스택의 각 카메라에 대한 렌더 타겟의 각 픽셀을 그립니다. 또한 두 개 이상의 베이스 카메라 또는 카메라 스택이 동일한 렌더 타겟의 동일한 영역에 렌더링하는 경우 Unity는 각 베이스 카메라 또는 카메라 스택에 필요한 횟수만큼 겹치는 영역에 픽셀을 다시 그립니다.
Unity의 프레임 디버거 또는 플랫폼별 프레임 캡처 및 디버깅 툴을 사용하여 씬에서 과도한 오버드로우가 발생하는 위치를 파악할 수 있습니다. 그런 다음 그에 따라 카메라 스택을 최적화할 수 있습니다.