실시간 조명(Real-time lighting)
베이크된 간접 모드( Baked Indirect mode)

혼합 조명

Mixed 광원은 Mode 프로퍼티가 Mixed 로 설정된 Light 컴포넌트입니다.

Mixed 광원은 트랜스폼 및 비주얼 프로퍼티(예: 컬러 또는 강도)를 변경할 수 있지만, 엄격한 제약이 따릅니다. 정적 및 동적 게임 오브젝트 모두에 조명 효과를 주며 선택적으로 간접 조명을 제공할 수 있습니다. Mixed 광원으로 불이 켜진 동적 게임 오브젝트는 항상 다른 동적 게임 오브젝트에 실시간 섀도우를 캐스트합니다.

씬의 모든 Mixed 광원은 동일한 Mixed Lighting Mode 를 사용합니다. Lighting Mode 를 설정하려면, 라이팅 창(메뉴: Window > Lighting)을 연 후에, Scene 탭을 열고, Mixed Lighting 섹션으로 이동합니다.

라이팅 창의 Mixed Lighting 섹션
라이팅 창의 Mixed Lighting 섹션

사용 가능한 모드는 다음과 같습니다.

혼합 광원 사용

혼합 조명은 게임플레이의 일부가 되는 광원에는 적합하지 않고 정적 환경을 밝혀주는 광원(예를 들어 하늘에서 움직이지 않는 태양)에 유용합니다. 혼합 광원에서 전달되는 직접 조명은 여전히 런타임 시점에 연산되므로 정적 메시의 머티리얼은 완전한 물리적 기반 셰이딩(PBS)을 지원하는 것은 물론 시각적 정확성을 유지합니다.

혼합 광원 예
혼합 광원 예

섀도우 마스크 모드의 디스턴스 섀도우 마스크는 가장 많은 리소스를 사용하는 옵션이지만 결과가 가장 좋습니다. 그림자 거리(Shadow Distance)(편집(Edit) > 프로젝트 설정(Project Settings) > 품질(Quality) > 그림자(Shadows)) 안에서는 고품질의 그림자가 생성되고 더 먼 거리에서는 베이크된 고품질의 그림자가 생성됩니다. 예를 들어 태양이 하늘에서 움직이지 않는다면 수평선 바로 앞까지 사실적인 그림자가 드리워진 커다란 풍경을 생성할 수 있습니다.

감산 모드는 가장 낮은 품질의 결과를 가져옵니다. 이 모드에서는 단 하나의 광원에 대한 그림자만 실시간으로 렌더링하며, 그림자를 베이크된 직접 조명 및 간접 조명과 함께 합성합니다. 이 모드는 원하는 플랫폼에서 다른 모드를 사용하지 못할 때(예를 들어 애플리케이션을 저사양 모바일 기기에서 구동해야 하지만 메모리 제한 때문에 섀도우 마스크 또는 디스턴스 섀도우 마스크 를 사용하지 못할 때)에만 최후의 대안으로 사용해야 합니다.

Unity 조명 모드 레퍼런스 카드에서 여러 모드의 요약 비교표를 살펴볼 수 있습니다.

모든 혼합 조명 모드는 모든 플랫폼에서 지원합니다. 하지만 다음과 같은 렌더링 제한이 있습니다.

  • 감산 모드는 포워드 렌더링(디퍼드 또는 광원 프리패스 지원되지 없음)으로 돌아갑니다.

  • 섀도우 마스크 모드는 많은 모바일 GPU와 같이 렌더링 타겟을 4개만 지원하는 플랫폼에서 포워드 렌더링(디퍼드 또는 광원 프리패스 지원되지 않음)으로 돌아갑니다.

포워드 렌더링과 디퍼드 렌더링에 대해 자세하게 알아보려면 렌더링 경로 문서를 참조하십시오.

고급 사용

혼합 광원은 런타임 시점에 트랜스폼 및 비주얼 프로퍼티(예: 컬러 또는 강도)를 변경할 수 있지만, 엄격한 제한이 따릅니다. 실제로 일부 조명은 베이크되어 있고 따라서 미리 계산되기 때문에, 파라미터를 런타임 시점에 변경하면 실시간 조명과 미리 계산된 조명을 합성할 때 일관성이 없는 결과가 나옵니다.

베이크된 간접섀도우 마스크 모드의 경우 직접 조명의 영향이 실시간 광원과 똑같기 때문에 광원의 컬러, 강도, 심지어는 트랜스폼과 같은 파라미터까지 변경할 수 있습니다. 하지만 베이크된 값은 미리 계산되기 때문에 런타임 시점에 변경할 수 없습니다.

예를 들어 빨간색 혼합 광원을 라이트맵에 베이크하고 런타임 시점에 빨간색에서 녹색으로 컬러를 바꾸면 모든 직접 조명이 녹색으로 바뀝니다. 하지만 모든 간접 조명은 라이트맵에 베이크되어 있으므로 빨간색으로 유지됩니다. 혼합 광원을 런타임 시점에 이동하는 경우에도 마찬가지입니다. 직접 조명은 광원을 따라가지만, 간접 조명은 광원이 베이크된 위치에 그대로 남습니다.

직접 조명에 아주 작은 변화(예를 들어, 광원의 색조 강도에 경미한 수정)만 주는 경우, Realtime 광원을 처리하는 데 필요한 추가 시간 없이 간접 조명의 이점을 살리고 광원이 다소 동적으로 보이게 할 수 있습니다. 간접 조명은 여전히 정확하진 않지만, 오차가 문제가 되지 않을 만큼 작을 수도 있습니다. 이것은 특히 미리 계산된 섀도우 정보가 없는 광원에 유용합니다. 광원의 섀도우를 없애거나 섀도우가 실시간인 경우에 베이크된 간접 모드를 사용하여 이렇게 할 수 있습니다. 섀도우 마스크가 직접 조명 계산의 일부이기 때문에, 그러한 광원을 움직이면 섀도우가 올바로 정렬되지 않는 시각적 불일치가 발생합니다.

다음 비디오에서는 혼합 광원이 베이크된 지점에서 너무 멀리 이동할 때 어떠한 일이 벌어지는지 예를 통해 설명합니다. 오브젝트가 멀어짐에도 불구하고 벽 위의 빨간색 간접광이 그대로 남아 있습니다. https://youtu.be/o6pVBqrj8-s

다음 비디오에서는 눈에 띄는 불일치를 초래하지 않으면서 간접 조명으로 혼합 광원을 살짝 수정하는 방법을 설명합니다. https://youtu.be/XN6ya31gm1I

기술 세부 정보

혼합 광원의 경우, 광원 경로의 마지막 세그먼트(광원에서 표면으로의 경로)는 사전 계산의 일부가 됩니다. 하지만, Unity는 여전히 직접 조명과 간접 조명을 따로 처리합니다. 간접 조명은 라이트맵과 라이트 프로브로 베이크하고, 그런 후에 런타임 중에 샘플링합니다. 간접 조명은 보통 저주파이며, 이는 섀도우나 광원의 자세한 변화를 포함하지 않아 매끈함을 의미합니다. 그러므로 섀도우는 직접 조명으로 처리되며 큰 시각적 효과가 있습니다.

그림자가 미리 계산되고 저장되는 방식의 차이는 혼합 광원의 다양한 하위 모드에 반영됩니다.

그림자 정보를 미리 계산하여 섀도우 마스크에 저장할 수 있습니다. 섀도우 마스크는 UV 레이아웃과 해상도가 해당 라이트맵과 동일한 텍스처입니다. 텍셀당 4개 이하의 광원(최신 GPU에서 텍스처가 4채널 이하로 제한되므로)에 대한 오클루전 정보가 저장됩니다. 값 범위는 0부터 1까지이며, 0과 1 사이의 값은 부드러운 그림자 영역을 나타냅니다.

섀도우 마스크가 활성화되었다면 라이트 프로브 또한 오클루전 정보를 최대 4개의 광원까지 저장합니다. 4개 이상의 광원이 겹치면 초과 광원은 베이크된 광원으로 돌아갑니다. 이러한 동작은 섀도우 마스크 오버랩 시각화 모드로 검사할 수 있습니다. 이 정보는 미리 계산되므로, Unity가 섀도우 마스크에 저장하는 유일한 섀도우는 정적 게임 오브젝트에서 다른 정적 게임 오브젝트로 캐스트되는 섀도우뿐입니다. 이러한 섀도우는 라이트맵 해상도에 따라 실시간 섀도우 맵보다 더 나은 품질의 매끄러운 가장자리를 가지게 됩니다. 각각의 광원 조명이 섀도우 마스크 채널 맵핑을 런타임 중에 유지하기 때문에, 동적 게임 오브젝트에서 섀도우 맵으로 캐스트하는 섀도우는 정적 게임 오브젝트로부터 미리 계산된 섀도우와 올바르게 합성될 수 있으며 더블 섀도우와 같은 불일치를 피할 수 있습니다.

정적 게임 오브젝트의 그림자와 동적 게임 오브젝트의 그림자 사이에 인지할 수 있는 차이점은 미리 계산된 섀도우 마스크와 런타임 섀도우맵의 해상도와 필터링 차이, 그리고 미리 계산된 그림자가 다양한 형태의 면 광원을 지원하므로 부드러운 그림자에 더 사실적인 반그림자가 포함될 수 있다는 것밖에 없습니다.

이 그림에서 베이크된 섀도우 마스크 해상도는 실시간 그림자 해상도와 비슷합니다
이 그림에서 베이크된 섀도우 마스크 해상도는 실시간 그림자 해상도와 비슷합니다
이 그림에서 베이크된 섀도우 마스크 해상도는 실시간 그림자 해상도보다 훨씬 낮습니다
이 그림에서 베이크된 섀도우 마스크 해상도는 실시간 그림자 해상도보다 훨씬 낮습니다

베이크된 간접섀도우 마스크 모드는 직접 조명이 항상 실시간으로 계산되어 라이트맵에 저장된 간접 조명에 추가되므로 광원 방향이 필요한 모든 머티리얼 효과가 계속 작동한다는 공통점이 있습니다. 해당 광원에서 그림자가 활성화되어 있다면, 동적 게임 오브젝트는 항상 그림자 거리(Shadow Distance)(편집(Edit) > 프로젝트 설정(Project Settings) > 품질(Quality) > 그림자(Shadows)) 범위 내에서 섀도우맵을 통해 다른 동적 게임 오브젝트에 그림자를 드리웁니다.

베이크된 간접 모드: 간접 조명만 미리 계산됨
베이크된 간접 모드: 간접 조명만 미리 계산됨
섀도우 마스크 및 디스턴스 섀도우 마스크 모드: 간접 조명과 직접 오클루전이 미리 계산됨
섀도우 마스크디스턴스 섀도우 마스크 모드: 간접 조명과 직접 오클루전이 미리 계산됨
감산 모드: 모든 광원 경로가 미리 계산됨
감산 모드: 모든 광원 경로가 미리 계산됨

  • 2017–09–18 일부 편집 리뷰를 거쳐 페이지 수정됨

  • Unity 5.6에서 광원 모드 추가됨

실시간 조명(Real-time lighting)
베이크된 간접 모드( Baked Indirect mode)