포워드 렌더링 패스 상세사항

이 페이지는 Forward rendering path에 대한 자세한 서술합니다.

하나 혹은 여러 개의 패스의 각 포워드 렌더링 패스는 오브젝트에 영향을 주는 라이트에 달려 있습니다. 라이트들은 또한 포워드 렌더링에 의해 그들의 설정과 강도에 따라 다르게 다루어지고, 좌우되지요.

구현 상세사항

포워드 렌더링에서, 각 오브젝트에 적용되는 가장 밝은 라이트들은 퍼 픽셀 라이트 모드로 온전하게 렌더링 됩니다. 그리고, 4개까지의 라이트들은 버텍스 당 라이트로 계산됩니다. 다른 라이트들은 Spherical Harmonics (SH) 로 계산됩니다. 이것은 많이 빠르지만 근사값에 불과합니다. 라이트가 픽셀당 라이트인지 아닌지는 다음 사항들에 의합니다:

  • Render Mode가 Not Important로 설정된 라이트는 항상 버텍스당(per-vertex)이거나 SH 입니다.
  • 가장 밝은 방향성 라이트는 언제나 픽셀 당 라이트 입니다.
  • Render Mode가 Important로 설정된 라이트는 언제나 픽셀 당 (per-pixel) 입니다.
  • 만일 위 결과가 현재 Pixel Light Count Quality Setting보다 덜한 라이트라면, 밝기를 감소하기 위해서 더 많은 라이트가 픽셀 당으로 랜더링 됩니다.

각 오브젝트의 랜더링은 다음과 같이 발생합니다:

  • 기본패스는 한 개의 픽셀 당 방향성 라이트와 모든 버텍스당/SH 라이트에 적용합니다.
  • 다른 픽셀 당 라이트는 추가적인 패스에, 각 라이트 당 한 패스로 랜더링 됩니다.

예를 들어, 만약 어떤 오브젝트가 여러 개의 라이트에 영향을 받는다면 (아래 그림의 공이 A에서 H 까지의 라이트 영향을 받으면):

A 부터 H 까지의 각 라이트는 같은 색과 강도를 가지고 있다고 합시다. 이들 모두는 자동 렌더링 모드라고 한다면, 그래서 이들은 이 오브젝트를 위해 정확하게 이 순서로 정렬 될 것입니다. 가장 밝은 라이트들은 픽셀당 라이트 모드로 렌더링 됩니다. (A에서 D) 그리고 최대 4개까지 버텍스당 라이트 모드로 (D에서 G) , 그리고 최종적으로 나머지 라이트는 SH가 됩니다. (G에서 H 까지):

라이트 그룹은 겹쳐집니다; 예를 들어 마지막 픽셀 당 라이트는 버텍스 당 라이트 모드와 섞이고 그래서 오브젝트와 라이트가 움직임에 따라 더 적은 "light popping"이 생깁니다.

기본 패스

기본 패스는 하나의 픽셀 당 방향성 라이트와 모든 SH 라이트와 함께 오브젝트를 랜더링 합니다. 이 패스는 또한 쉐이더에서 모든 라이트 맵, 은은하고 방사적 라이팅을 추가합니다. 이 패스에서 랜더링 된 방향성 라이팅은 Shadows을 가질 수 있습니다.

추가 패스들

추가 패스들은 해당 오브젝트에 추가되는 각 픽셀당 라이트를 위해 랜더링 됩니다. 이러한 패스들의 라이트들은 쉐도우를 가질 수 없습니다 (그래서 결과적으로, Forward Rendering은 쉐도우를 가진 하나의 방향성 라이트를 지원합니다).

성능 고려사항

SH (Spherical Harmonics, 구면 조화 함수)라이트는 매우 빨리 랜더링 될 수 있습니다. 그들은 CPU에 아주 작은 비용만 부과하며 GPU에 적용은 actually free입니다(그것은, 기본 패스는 항상 SH 라이팅을 연산합니다; 그러나 SH 라이트는 작동하는 방식 때문에 그 비용은 얼마나 많은 SH 라이트가 있느냐에 상관없이 항성 정확하게 동일합니다).

SH 라이트의 단점은:

  • 그들이 오브젝트의 픽셀이 아닌 버텍스에서 연산됩니다. 그것은 라이트 쿠키나 노멀 맵을 지원하지 않는 다는 것을 의미합니다.
  • SH라이팅은 매우 낮은 주파수를 가지고 있습니다. SH 라이트를 가지고는 선명한 라이트 전환을 할 수 없습니다. 그들은 또한 분산 라이팅 (반사성 하이라이트에는 너무 낮은 주파수)에만 영향을 미칩니다.
  • SH 라이팅은 지역적이지 않습니다; 점이건 집중조명이건 일부 표면에 근접한 SH 라이트는 "look wrong" 것 입니다.

요약하면, SH 라이팅은 대부분 작은 동적 오브젝트에 사용하기에 충분합니다.

역링크