혼합 광원을 사용하려면 광원(Light) 컴포넌트에서 모드(Mode) 프로퍼티를 혼합(Mixed) 으로 설정해야 합니다.
혼합 광원은 런타임 시점에 트랜스폼 및 비주얼 프로퍼티(예: 컬러 또는 강도)를 변경할 수 있지만, 엄격한 제한이 따릅니다. 혼합 광원은 정적 게임 오브젝트와 동적 게임 오브젝트 모두에 조명을 비추고, 직접 조명은 항상 제공하고, 간접 조명은 필요에 따라 제공합니다. 혼합 광원에서 빛을 받는 동적 게임 오브젝트는 항상 다른 동적 게임 오브젝트에 실시간 그림자를 드리웁니다.
씬의 모든 혼합 광원은 같은 혼합 조명 모드 를 사용합니다. 조명 모드 를 설정하려면 Lighting 창(메뉴: Window > Rendering > Lighting Settings)을 열고 Scene 탭을 클릭한 다음 Mixed Lighting 섹션으로 이동합니다.
사용할 수 있는 모드 다음과 같습니다.
혼합 조명은 게임플레이의 일부가 되는 광원에는 적합하지 않고 정적 환경을 밝혀주는 광원(예를 들어 하늘에서 움직이지 않는 태양)에 유용합니다. 혼합 광원에서 전달되는 직접 조명은 여전히 런타임 시점에 연산되므로 정적 메시의 머티리얼은 완전한 물리적 기반 셰이딩(PBS)을 지원하는 것은 물론 시각적 정확성을 유지합니다.
Shadowmask 모드의 디스턴스 섀도우 마스크는 가장 많은 자원이 요구되는 옵션이지만 가장 좋은 결과를 만들어 낼 수 있습니다. Shadow Distance(Edit > Project Settings 로 이동한 다음 Quality 카테고리를 선택하고 Shadows 섹션으로 이동) 이내와 베이크된 고품질 그림자 이상에서 고품질 그림자를 생성할 수 있습니다. 예를 들어, 사용자는 태양이 하늘에서 움직이지 않는 한, 수평선 바로 앞까지 사실적인 그림자로 대규모 랜드스케이프를 생성할 수 있습니다.
감산 모드는 가장 낮은 품질의 결과를 가져옵니다. 이 모드에서는 단 하나의 광원에 대한 그림자만 실시간으로 렌더링하며, 그림자를 베이크된 직접 조명 및 간접 조명과 함께 합성합니다. 이 모드는 원하는 플랫폼에서 다른 모드를 사용하지 못할 때(예를 들어 애플리케이션을 저사양 모바일 기기에서 구동해야 하지만 메모리 제한 때문에 섀도우 마스크 또는 디스턴스 섀도우 마스크 를 사용하지 못할 때)에만 최후의 대안으로 사용해야 합니다.
Unity 조명 모드 레퍼런스 카드에서 여러 모드의 요약 비교표를 살펴볼 수 있습니다.
모든 혼합 조명 모드는 모든 플랫폼에서 지원합니다. 하지만 다음과 같은 렌더링 제한이 있습니다.
감산 모드는 포워드 렌더링(디퍼드 또는 광원 프리패스 지원되지 없음)으로 돌아갑니다.
섀도우 마스크 모드는 많은 모바일 GPU와 같이 렌더링 타겟을 4개만 지원하는 플랫폼에서 포워드 렌더링(디퍼드 또는 광원 프리패스 지원되지 않음)으로 돌아갑니다.
포워드 렌더링과 디퍼드 렌더링에 대해 자세하게 알아보려면 렌더링 경로 문서를 참조하십시오.
혼합 광원은 런타임 시점에 트랜스폼 및 비주얼 프로퍼티(예: 컬러 또는 강도)를 변경할 수 있지만, 엄격한 제한이 따릅니다. 실제로 일부 조명은 베이크되어 있고 따라서 미리 계산되기 때문에, 파라미터를 런타임 시점에 변경하면 실시간 조명과 미리 계산된 조명을 합성할 때 일관성이 없는 결과가 나옵니다.
베이크된 간접 및 섀도우 마스크 모드의 경우 직접 조명의 영향이 실시간 광원과 똑같기 때문에 광원의 컬러, 강도, 심지어는 트랜스폼과 같은 파라미터까지 변경할 수 있습니다. 하지만 베이크된 값은 미리 계산되기 때문에 런타임 시점에 변경할 수 없습니다.
예를 들어 빨간색 혼합 광원을 라이트맵에 베이크하고 런타임 시점에 빨간색에서 녹색으로 컬러를 바꾸면 모든 직접 조명이 녹색으로 바뀝니다. 하지만 모든 간접 조명은 라이트맵에 베이크되어 있으므로 빨간색으로 유지됩니다. 혼합 광원을 런타임 시점에 이동하는 경우에도 마찬가지입니다. 직접 조명은 광원을 따라가지만, 간접 조명은 광원이 베이크된 위치에 그대로 남습니다.
광원의 색조나 강도를 살짝 수정하는 것과 같이 직접 조명에 아주 작은 변화만 준다면 실시간 광원을 처리하는 데 필요한 추가 시간을 들이지 않고 간접 조명의 장점을 살리면서 광원이 어느 정도 동적으로 보이게 할 수 있습니다. 간접 조명은 여전히 부정확하게 표현되겠지만, 오차가 작아 크게 문제가 되지 않을 수 있습니다. 특히 미리 계산된 그림자 정보가 없는 광원에 효과적입니다. 광원의 그림자를 비활성화하였거나 그림자가 실시간인 경우에 베이크된 간접 모드를 사용하여 이렇게 할 수 있습니다. 섀도우 마스크는 직접 조명 연산의 일부이므로 이런 광원을 이동하면 그림자가 올바로 정렬되지 않아 시각적인 불일치가 발생합니다.
다음 비디오에서는 혼합 광원이 베이크된 지점에서 너무 멀리 이동할 때 어떠한 일이 벌어지는지 예를 통해 설명합니다. 오브젝트가 멀어짐에도 불구하고 벽 위의 빨간색 간접광이 그대로 남아 있습니다. https://youtu.be/o6pVBqrj8-s
다음 비디오에서는 눈에 띄는 불일치를 초래하지 않으면서 간접 조명으로 혼합 광원을 살짝 수정하는 방법을 설명합니다. https://youtu.be/XN6ya31gm1I
혼합 광원에서 광원 경로의 마지막 세그먼트(광원에서 표면까지의 경로)는 사전 계산에 포함됩니다. 하지만 Unity 에디터는 여전히 직접 조명과 간접 조명을 따로 처리합니다. 간접 조명은 라이트맵과 라이트 프로브에 베이크된 후 런타임 시점에 샘플링됩니다. 간접 조명은 보통 주파수가 낮으므로 부드러워 보이고 상세한 그림자나 광원 전환을 포함하지 않습니다. 그러므로 그림자가 시각적으로 크게 영향을 미칠 때에는 직접 조명으로 처리됩니다.
그림자가 미리 계산되고 저장되는 방식의 차이는 혼합 광원의 다양한 하위 모드에 반영됩니다.
그림자 정보를 미리 계산하여 섀도우 마스크에 저장할 수 있습니다. 섀도우 마스크는 UV 레이아웃과 해상도가 해당 라이트맵과 동일한 텍스처입니다. 텍셀당 4개 이하의 광원(최신 GPU에서 텍스처가 4채널 이하로 제한되므로)에 대한 오클루전 정보가 저장됩니다. 값 범위는 0부터 1까지이며, 0과 1 사이의 값은 부드러운 그림자 영역을 나타냅니다.
섀도우 마스크를 활성화하면 라이트 프로브도 4개 이하의 광원에 대한 오클루전 정보를 저장합니다. 교차하는 광원이 4개보다 많으면 남는 광원은 베이크된 광원으로 돌아갑니다. 섀도우 마스크 오버랩 시각화 모드로 이 동작을 검사할 수 있습니다. 이 정보는 미리 계산되므로, Unity 에디터는 정적 게임 오브젝트가 다른 정적 게임 오브젝트에 드리우는 그림자만 섀도우 마스크에 저장합니다. 이 그림자는 가장자리가 더 매끄러워서 라이트맵 해상도에 따라 실시간 섀도우맵보다 품질이 더 나을 수 있습니다. 각각의 광원 조명이 섀도우 마스크 채널 매핑을 런타임 시점에 유지하기 때문에 동적 게임 오브젝트가 섀도우맵을 통해 드리우는 그림자를 정적 게임 오브젝트로부터 미리 계산된 그림자와 올바르게 합성하여 이중 그림자와 같은 불일치를 방지할 수 있습니다.
정적 게임 오브젝트의 그림자와 동적 게임 오브젝트의 그림자 사이에 인지할 수 있는 차이점은 미리 계산된 섀도우 마스크와 런타임 섀도우맵의 해상도와 필터링 차이, 그리고 미리 계산된 그림자가 다양한 형태의 면 광원을 지원하므로 부드러운 그림자에 더 사실적인 반그림자가 포함될 수 있다는 것밖에 없습니다.
Baked Indirect 와 Shadowmask 의 공통점은 광원 방향을 요구하는 모든 머티리얼 효과가 계속해서 적용되도록, 직접 조명이 항상 실시간으로 계산되며 라이트맵에 저장된 간접 조명에 더해진다는 것입니다. 동적 게임 오브젝트는 광원에 대한 그림자가 활성화된 경우에는 항상 다른 동적 게임 오브젝트에 Shadow Distance(Edit > Project Settings 로 이동한 다음 Quality 카테고리를 선택하고 Shadows 섹션으로 이동)의 그림자 맵을 통해 그림자를 캐스트합니다.
2017–09–18 일부 편집 리뷰를 거쳐 페이지 수정됨
Unity 5.6에 추가된 광원 모드