이 페이지에서는 Unity 빌트인 렌더 파이프라인의 포워드 렌더링 경로에 대해 설명합니다.
포워드 렌더링은 오브젝트에 영향을 미치는 광원에 따라 각 오브젝트를 한 번 이상의 패스에 렌더링합니다. 광원 자체도 설정 및 강도에 따라 포워드 렌더링에서 다르게 처리됩니다.
포워드 렌더링에서 각 오브젝트에 영향을 미치는 가장 밝은 광원이 픽셀당 릿 모드에서 완전히 렌더링됩니다. 그런 다음 점 광원이 버텍스당 4개까지 계산됩니다. 나머지 광원은 훨씬 빠르지만 근사치만 계산하는 스피리컬 하모닉스(SH)로 계산됩니다. 광원이 픽셀당 광원이 될지 여부를 결정하는 요인은 다음과 같습니다.
각 오브젝트는 다음과 같이 렌더링됩니다.
예를 들어 여러 광원에 영향을 받는 오브젝트(아래 그림에서 광원 A-H에 영향을 받는 원)가 있는 경우를 가정해 보겠습니다.
광원 A-H가 모두 컬러와 강도가 동일하고 자동 렌더링 모드라고 가정합니다. 따라서 이 오브젝트에 대해 광원은 정확히 알파벳 순서대로 정렬됩니다. 가장 밝은 광원(A-D)은 픽셀당 릿 모드로 렌더링되고 다음 광원이 최대 4개까지(D-G)가 버텍스당 릿 모드로 렌러딩되고 마지막으로 나머지 광원(G-H)이 SH로 렌더링됩니다.
광원 그룹은 오버랩됩니다. 예를 들어 마지막 픽셀당 광원은 버텍스당 릿 모드에 블렌드되므로 오브젝트와 광원이 움직일 때 빛이 갑자기 나타나는 “광원 팝” 현상이 감소합니다.
베이스 패스는 픽셀당 방향 광원 하나와 모든 SH/버텍스 광원으로 오브젝트를 렌더링합니다. 셰이더의 모든 라이트맵과 앰비언트 및 이미시브 조명도 추가합니다. 이 패스에서 렌더링되는 방향 광원에는 섀도우가 있을 수 있습니다. 라이트매핑된 오브젝트는 SH 광원에 조명을 받지 않습니다.
셰이더에서 “OnlyDirectional” 패스 플래그를 사용하는 경우 포워드 베이스 패스는 주 방향 광원, 앰비언트/광원 프로브 및 라이트맵만 렌더링합니다. SH 및 버텍스 광원은 패스 데이터에 포함되지 않습니다.
이 오브젝트에 영향을 미치는 각각의 추가 픽셀당 광원에 대해 추가 패스가 렌더링됩니다. 이 패스의 광원은 기본적으로 섀도우가 없습니다. 따라서 포워드 렌더링에서는 multi_compile_fwdadd_fullshadows 배리언트 단축키를 사용하지 않는 한 섀도우가 있는 방향 광원 1개가 지원됩니다.
픽셀당 동적 조명은 영향을 받는 모든 픽셀마다 렌더링 작업을 크게 증가시켜 오브젝트가 멀티패스로 렌더링되게 합니다. 모바일이나 저가형 PC의 GPU 등 그다지 강력하지 않은 장치에서는 하나의 오브젝트를 비추는 Pixel Light 를 하나 이상 두지 않습니다. 또한 프레임마다 라이팅을 계산하는 대신 라이트맵으로 정적 오브젝트를 비추게 합니다. 버텍스별 동적 조명은 버텍스 변환에 막대한 작업을 추가시킬 수 있으니 여러 광원이 하나의 오브젝트를 비추지 않도록 해야 합니다.
다른 픽셀 광원의 영향을 받는 원거리의 메시 결합을 피해야 합니다. 픽셀 조명을 사용하는 경우 각 메시는 조명하는 픽셀 광원 수만큼 여러번 렌더링이 필요합니다. 아주 멀리 떨어져 있는 메시 둘을 결합하면 결합된 오브젝트의 효과적인 크기를 증가시킵니다. 결합된 오브젝트의 일부분이라도 비추는 모든 픽셀 조명은 렌더링할 때 고려 대상이므로 필요한 렌더링 패스(pass)의 수가 증가합니다. 일반적으로 결합된 오브젝트의 렌더링에 필요한 패스의 수는 각각의 오브젝트의 패스 수를 더합니다. 그러므로 결합으로 얻는 것이 없습니다.
Unity는 렌더링 중에 메시 주위의 모든 광원을 찾고 어떤 광원이 가장 큰 영향을 미치는지 계산합니다. Quality 창의 설정으로 몇 개의 광원이 각각 픽셀 광원과 버텍스 광원이 되는지를 조정합니다. 각 광원은 메시에서 떨어진 거리와 조명의 강도를 근거로 각자의 중요성을 계산합니다. 그런데 일부 광원은 게임 컨텍스트에 따라 다른 광원보다 더 중요할 수 있습니다. 따라서 각각의 광원에는 Render Mode 설정이 있어 Important 또는 Not Important 로 설정할 수 있습니다. Not Important 로 체크된 광원은 일반적으로 렌더링 오버헤드가 더 낮습니다.
예제: 자동차 경주 게임에서 플레이어의 차량이 헤드라이트를 켜고 어둠 속을 달리는 경우를 보겠습니다. 헤드라이트는 게임에서 가장 중요한 광원이므로 Render Mode 는 Important 로 설정되어야 합니다. 반면 게임에는 다른 차량의 백라이트 또는 먼 거리의 가로등과 같은, 다소 중요성이 떨어지고 픽셀 광원에 의해 시각적 효과가 개선되지 않는 기타 광원도 있습니다. 그런 광원의 Render Mode 는 Not Important 로 설정돼 효과가 약한 곳에서 렌더링 용량의 낭비를 피합니다.
픽셀별 조명의 최적화는 CPU와 GPU의 작업을 모두 절약합니다. CPU는 처리할 드로우콜이 줄어들고 GPU도 처리할 버텍스가 줄고 추가 오브젝트 렌더를 래스터라이즈할 픽셀 수가 감소합니다.
스피리컬 하모닉스 광원은 매우 빨리 렌더링됩니다. 광원 적용에는 CPU 리소스가 아주 조금 사용되고 GPU 리소스는 사용되지 않습니다. 즉, 베이스 패스는 항상 SH 라이팅을 계산하지만 SH 광원의 작동 방식으로 인해 SH 광원 수에 관계 없이 사용되는 리소스의 양은 항상 동일합니다.
SH 광원의 단점은 다음과 같습니다.
요약하면, SH 광원은 작은 동적 오브젝트에 유용한 경우가 많습니다.