GI 캐시
관련 항목

광원 문제 해결 및 성능

광원은 다음 두 가지 방법 중 하나로 렌더링할 수 있습니다.

  • 버텍스 조명(Vertex lighting)은 메시의 버텍스에서만 조명을 계산하고 버텍스 값을 나머지 표면에 보간합니다. 일부 조명 효과는 버텍스 조명으로 지원되지 않지만, 두 방법 중 프로세싱 오버헤드 측면에서는 더 저렴합니다. 또한 이 방법은 구형 그래픽 카드에서 이용할 수 있는 유일한 방법일 수도 있습니다.

  • 픽셀 조명(Pixel lighting)은 모든 화면 픽셀에서 별도로 계산됩니다. 렌더링 속도는 더 느리지만, 픽셀 조명을 사용하면 버텍스 조명을 통해 만들 수 없는 몇 가지 효과를 낼 수 있습니다. 노멀 매핑, 광원 쿠키 및 실시간 그림자는 픽셀 조명에서만 렌더링됩니다. 또한 스폿 광원의 모양 및 점 광원 하이라이트도 픽셀 모드로 렌더링하면 훨씬 더 좋게 보입니다.

픽셀 및 버텍스 모드로 렌더링한 스폿 광원 비교
픽셀 및 버텍스 모드로 렌더링한 스폿 광원 비교

광원은 렌더링 속도에 크게 영향을 미치므로 조명 품질과 프레임 속도 사이에서 균형을 찾아야 합니다. 픽셀 라이트는 버텍스 라이트보다 렌더링하는 데 훨씬 더 많은 리소스가 사용되므로 Unity에서는 가장 밝은 광원만 픽셀당 품질로 렌더링하고 나머지는 버텍스 라이트로 렌더링합니다. 스탠드얼론 빌드 타겟에 대한 최대 픽셀 라이트의 수는 Quality 창에서 설정할 수 있습니다.

광원이 렌더 모드(Render Mode) 프로퍼티를 사용하여 픽셀 광원으로 렌더링되게 하고 싶을 수 있습니다. 픽셀 광원으로 렌더링할지 결정할 때는 모드가 중요(Important)로 설정된 광원에 더 높은 우선 순위가 부여됩니다. 모드가 자동(Auto)(기본값)으로 설정된 경우 Unity는 오브젝트가 광원에 얼마나 영향을 받느냐에 따라 광원을 자동으로 분류합니다. 픽셀 광원으로 렌더링되는 광원은 오브젝트별로 결정됩니다.

자세한 내용은 그래픽스 성능 최적화 페이지를 참조하십시오.

조명 창 통계

조명 창 하단에 런타임 성능에 관한 중요한 지표를 보여주는 통계가 표시됩니다. 자세한 내용은 조명 창 문서를 참조하십시오.

그림자 성능

실시간 그림자는 렌더링하는 데 꽤 많은 리소스가 사용되므로 신중하게 사용해야 합니다. 그림자를 캐스트할 수 있는 오브젝트는 먼저 섀도우 맵 안에 렌더링되어야 하고, 그런 다음 해당 맵이 그림자를 받을 수 있는 오브젝트를 렌더링하는 데 사용됩니다. 그림자를 활성화하면 위에서 언급한 픽셀/버텍스 기반 조명간 균형보다 성능에 더욱 많은 영향을 미칩니다.

소프트 섀도우는 하드 섀도우보다 렌더링하는 데 리소스가 더 많이 사용되지만, GPU에만 영향을 미치고 추가 CPU 작업은 많이 유발하지 않습니다.

Quality 창에는 Shadow Distance 값이 있습니다. 카메라에서 이 거리보다 멀리 떨어져 있는 오브젝트는 그림자가 전혀 없이 렌더링됩니다. 멀리 있는 오브젝트의 그림자는 일반적으로 눈에 띄지 않으므로 이 설정값을 사용하면 렌더링해야 하는 그림자 수를 줄일 수 있어 유용합니다.

방향 광원의 중요한 문제 중 하나는 광원 하나가 씬 전체에 조명을 비출 수 있다는 점입니다. 따라서 섀도우 맵이 종종 씬의 커다란 부분을 한꺼번에 덮고 이로 인해 그림자가 “원근 앨리어싱(Perspective aliasing)”이라는 문제에 취약해집니다. 원근 앨리어싱은 간단히 말해 카메라 가까이에 보이는 섀도우 맵 픽셀이 멀리 있는 것에 비해 더 크고 덩어리져 보임을 의미합니다. 이 효과를 줄이기 위해 간단히 섀도우 맵 해상도를 높일 수 있지만, 그러면 섀도우 맵이 더 낮은 해상도에서 문제 없이 표시되었던 멀리 있는 영역의 렌더링 리소스가 낭비됩니다.

따라서 카메라에서 거리가 멀어질수록 해상도가 낮아지는 별도의 그림자 맵을 사용하면 이 문제를 해결하는 좋은 방법이 될 수 있습니다. 이런 별도의 맵을 cascades 라고 합니다. Quality 창에서 캐스케이드를 0개, 2개 또는 4개 선택할 수 있습니다. Unity는 카메라 절두체 안의 캐스케이드 포지셔닝을 계산합니다. 캐스케이드는 방향 광원에만 활성화됩니다. 자세한 내용은 방향 광원 그림자 페이지를 참조하십시오.

섀도우 맵 크기 계산 방법

맵 크기 계산의 첫 단계로 씬 뷰에서 광원으로 조명을 비출 수 있는 영역을 결정합니다. 방향 광원의 경우 전체 화면에 조명을 비출 수 있지만, 스폿 광원 및 점 광원의 경우 영역은 광원 범위 모양(점 광원의 경우 구체, 스폿 광원의 원뿔)을 화면에 투사합니다. 투사된 모양은 화면에 특정 너비 및 높이(픽셀 단위)로 표시됩니다. 두 값 중 큰 값이 광원의 “픽셀 크기”로 사용됩니다.

Quality 창에서 그림자 맵 해상도가 __High__로 설정된 경우 그림자 맵의 크기는 다음과 같이 계산됩니다.

그래픽 카드의 비디오 메모리가 512MB 이상인 경우, 섀도우 맵 상한은 방향 광원의 경우 4096, 스폿 광원의 경우 2048, 점 광원의 경우 1024까지 증가합니다.

중간 해상도(Medium Resolution) 그림자 해상도에서 섀도우 맵 크기는 고해상도 값의 절반이며, 저해상도(Low Resolution) 의 1/4 크기입니다.

점 광원은 그림자에 큐브맵을 사용하기 때문에 다른 타입에 비해 크기 제한이 더 낮습니다. 따라서 이 해상도에서 큐브맵 여섯 면을 동시에 비디오 메모리에 유지해야 합니다. 잠재적인 섀도우 캐스터를 큐브맵의 여섯 면에 전부 렌더링해야 할 수 있으므로 렌더링하는 데 상당히 많은 리소스가 필요합니다.

그림자 문제 해결

하나 이상의 오브젝트가 그림자를 캐스트하지 않는다면 다음 사항을 확인해야 합니다.

  • 구형 그래픽스 하드웨어는 그림자를 지원하지 않을 수 있습니다. 아래에서 그림자를 처리할 수 있는 최소 하드웨어 사양 리스트를 확인해야 합니다.

  • Quality 창에서 그림자를 비활성화할 수 있습니다. 정확한 품질 레벨이 활성화되었고 해당 설정에서 그림자가 켜졌는지 확인해야 합니다.

  • 씬의 모든 메시 렌더러그림자 받기(Receive Shadows)그림자 드리우기(Cast Shadows) 를 올바르게 설정해야 합니다 둘 모두 기본적으로 활성화되어 있지만 의도치 않게 비활성화되지 않았는지 확인해야 합니다.

  • 불투명한 오브젝트만 그림자를 캐스트하고 받기 때문에 빌트인 투명 또는 파티클 셰이더를 사용하는 오브젝트는 그림자를 캐스트하거나 받지 않습니다. 일반적으로 펜스, 초목처럼 틈이 있는 오브젝트 대신 투명 컷아웃 셰이더를 사용할 수 있습니다. 커스텀 셰이더는 픽셀에서 조명을 받고 지오메트리 렌더 대기열을 사용해야 합니다.

  • 버텍스 릿(VertexLit) 셰이더를 사용하는 오브젝트는 그림자를 받을 수 없지만 캐스트할 수는 있습니다.

  • 포워드 렌더링 경로에서 일부 셰이더를 사용하는 경우(특히 4.x 버전 이후의 Unity 레거시 빌트인 셰이더를 사용하는 경우) 가장 밝은 방향 광원만 그림자를 캐스트할 수 있습니다. 그림자를 캐스트하는 광원을 하나 이상 원하는 경우, 디퍼드 셰이딩 렌더링 경로를 대신 사용해야 합니다. fullforwardshadows 표면 셰이더 명령을 사용하여 직접 작성한 셰이더가 “전체 그림자”를 지원하게 설정할 수 있습니다.

그림자에 대한 하드웨어 지원

빌트인 그림자는 Unity에서 지원되는 거의 모든 디바이스에 사용할 수 있습니다. 다음 카드는 각 플랫폼에서 지원됩니다.

PC(Windows/Mac/Linux)

  • 일반적으로 모든 GPU는 그림자를 지원합니다. 아주 오래 된 GPU(예: 2005년에 제조된 Intel GPU)는 예외일 수 있습니다.

모바일

  • iPhone 4는 그림자를 지원하지 않습니다. iPhone 4S 및 iPad 2 이후 모델은 모두 그림자를 지원합니다.
  • Android: Android 4.0 이상 및 GL_OES_depth_texture 지원이 필요합니다. 특히 이를 지원하지 않는 일부 Android Tegra 2/3 기반 Android 디바이스는 그림자를 지원하지 않습니다.
  • Windows Phone: DX11 클래스 GPU(Adreno 4xx/5xx)에서만 그림자가 지원됩니다.

콘솔

  • 모든 콘솔은 그림자를 지원합니다.

  • 2017–06–08 일부 편집 리뷰를 거쳐 페이지 게시됨

  • 5.6에 조명 창 통계 추가

GI 캐시
관련 항목