Lightmapping In-Depth

유니티에서 첫 번째 장면을 라이트맵 하려면 Quickstart Guide를 참조 하십시오.

라이트매핑은 유니티에 완전히 통합되어 있습니다. 그러므로, 에디터 안에서 전체의 레벨을 빌드하고, 모든 재료들이 라이트맵 들을 자동으로 고르게 하여 걱정할 필요가 없습니다. 유니티에서 라이트매핑은 모든 빛들의 속성들이 직접 비스트(Beast) 라이트매퍼로 매핑이 됨을 의미하며, 좋은 성능으로 베이크(bake) 됨을 의미합니다. 유니티 프로(Unity Pro)는 이 기능을 글로벌 조명(Global Illumination)까지 확장하여, (이 기능을 쓰지 않으면 실시간으로는 불가능한) 현실적이고 아름다운 라이팅으로 베이크 되도록 합니다. 추가로, 유니티 프로는 더욱 흥미있는 장면 라이팅을 위해서 하늘의 빛들과 빛을 방출하는 물질들을 가지고 옵니다.

이 페이지는 라이트매핑 창에서 구할 수 있는 모든 속성들의 심도 있는 기술을 찾게 될 것입니다. 라이트매핑 창을 열려면_Window – Lightmapping_를 선택하세요.

Object

현재의 선택에 기반하여, 오브젝트당 빛, 메쉬 렌더러, 지형을 위한 베이크 세팅들.

_ 메쉬 렌더러들과 지형들:_

Static메쉬 렌더러 들과 지형들이 “정적(static)”으로 라이트맵 되도록 표시.
Scale In Lightmap메쉬 렌더러들을 위한 사항) 메쉬 렌더러에게 귀속되는 더 큰 값은 더 높은 해상도를 야기 할 것입니다. 마지막 해상도는 비율적일 것입니다 (라이트 맵에서의 스케일)*(Object's word-space 표면지역)*( 글로벌 베이크 설정 해상도 값). 0의 값은 오브젝트가 라이트맵 되지 않음을 야기 할 것입니다(그러나 다른 라이트맵 된 오브젝트들에게는 영향을 줄 것입니다).
Lightmap Size(지형만 해당) 지형 인스턴스를 위한 라이트맵 크기. 지형들은 다른 오브젝트들처럼 아틀라스(atlas) 되지 않습니다 – 그들은 개개의 라이트맵 들을 얻습니다.
AtlasLock Atlas가 “disable”이면, 아틀라싱 정보(Atlasing information)는 자동으로 업데이트 될 것입니다. Lock Atlas 가 “enable”이면, 변수들이 자동으로 수정되지 않을 것이며, 수동으로 편집이 가능할 것입니다.
»>Lightmap Index라이트맵 배열에서의 인덱스.
»>Tiling(메쉬 렌더러들만 해당) 오브젝트의 라이트맵 UV들의 타일링.
»>Offset(메쉬 렌더러들만 해당) 오브젝트의 라이트맵 UV들의 오프셋.

_Lights:_

Lightmapping라이트매핑 모드: 실시간만 해당, 자동 또는 baked. 아래의 이중 라이트맵들 Dual Lightmaps 기술 참조하십시오.
Color빛의 색상. 실시간 렌더링을 위해 사용되는 것과 같은 속성.
Intensity빛의 광도. 실시간 렌더링을 위해 사용되는 것과 같은 속성.
Bounce Intensity특정 광원으로부터 나오는 간접 빛의 광도 승수(multiplier).
Baked Shadows이 라이트에 의해 비춰진 오브젝트들의 드리워진 그림자를 컨트롤(“Auto” 라이트인 경우 실시간 그림자들 동시에 콘트롤).
»>Shadow Radius(점과 스포트 라이트만 해당) 소프트 직접 그림자들(soft direct shadows)을 위해 이 값 증가 – 그림자들(빛이 아닌) 연산을 위한 라이트의 크기를 증가.
»>Shadow Angle(방향성 라이트 들만 해당) 소프트 직접 그림자들을 위해 이 값 증가 – 그림자들(빛이 아닌) 연산을 위한 라이트의 각진 범위를 증가.
»>Shadow Samples그림자 반경이나 각도를 0이상으로 설정하였으면, 그림자 샘플들의 개수 또한 증가 시킵니다. 더 높은 샘플 수들은 반그림자(shadow penumbra) 로부터의 노이즈를 삭제 할 것입니다. 그러나 이는 렌더링 타임의 증가를 야기 시킬 수 있습니다.

Bake

글로벌 베이크 설정들.

Mode오프라인 라이트맵 베이킹(baking)과 실행 시 라이트맵의 렌더링 모드를 설정합니다. 이중 라이트맵 모드인 경우, 가까운 라이트맵과 먼 라이트 맵이 베이크 됩니다. 오직 늦춰진(deferred) 렌더링 경로만이 렌더링 듀얼 라이트맵을 지원합니다. 싱글 라이트맵 모드는 먼 라이트 맵이 베이크 되는 것을 야기 합니다. Deferred 랜더링 경로를 위해서 싱글 라이트맵 모드의 사용을 강제하기 위해 사용될 수 있습니다.
Quality높은 퀄리티(좋은 외관)와 낮은(빠른) 퀄리티의 베이크를 미리 조정합니다. 그들은 파이널 개더(final gather)의 광선들의 개수 및 명암 스레쉬홀드(contrast threshold), 그리고 몇몇 다른 파이널 개더와 anti-aliasing 설정에 영향을 줍니다.
BouncesGlobal Illumination 시뮬레이션에서의 라이트 바운스들의 개수입니다. 부드럽고 현실적인 간접 라이팅을 제공하기 위해서는 최소한 하나의 바운스는 필요합니다. 0은 오직 직접 라이트(direct light)만이 계산 될 것임을 의미합니다.
Sky Light Color스카이라이트(Sky light)는 모든 방향에서의 하늘에서 나오는 빛을 시뮬레이션 합니다. 바깥 장면을 위해서 좋습니다.
Sky Light Intensity스카이라이트의 광도(intensity) - 0값은 스카이라이트를 불가능(disable)으로 만듭니다.
Bounce Boost간접 라이팅을 부스트(Boost) 시킵니다. 렌더를 빨리 버닝아웃(burning out)시키지 않고, 장면 내에서 바운스된 라이트의 양을 증가시키기 위해 사용합니다.
Bounce Intensity간접 라이트의 광도의 승수(multiplier).
Final Gather Rays모든 파이널 개더점 들로부터 쏘여진 광선들의 개수-더 높은 값이 더 좋은 값을 줍니다.
Contrast Threshold색상 명암 스레쉬홀드(Color contrast threshold). 스레쉬홀드 위로는 새로운 파이널 개더 점들이 적응성의(adaptive) 샘플링 알고리즘에 의해 생성될 것입니다. 더 높은 값들은 비스트를 표면에서의 조명변화에 더 견딜 수 있게 만듭니다. 그러므로, 더 부드럽지만, 덜 자세한 라이트맵 들을 생성합니다. 더 낮은 개수의 파이널 개더 광선들은 추가의 파이널 개더점들의 생성을 강요하지 않게 하기 위해 더 높은 명암 스레쉬홀드 값들이 필요할지 모릅니다.
Interpolation파이널 개더점들의 보간 될 색상을 컨트롤 합니다. 0은 선형 보간(linear interpolation) 이고, 1은 고급 그레디언트 기반의 보간입니다. 몇몇 경우, 후자는 artifact가 나타날 수 있습니다.
Interpolation Points보간 될 파이널 개더점들의 개수입니다. 더 높은 값들은 더 부드러운 결과를 낳습니다. 그러나 라이팅의 세부를 부드럽게 처리해버릴 수도 있습니다.
Ambient Occlusion라이트맵으로 베이크될 잔잔한 폐색 (ambient occlusion)의 양입니다. Ambient occlusion은 Max Distance 크기의 로컬 반구 위에 통합된 가시함수(visibility function)입니다. 그러므로, 라이팅 정보를 고려 하지 않습니다.
»>Max Distance이 거리를 넘어가면, 광선은 폐색(unocclude)되지 않습니다. 0는 무한대로 긴 광선을 의미합니다.
»>Contrast완전 폐색에서 폐색되지 않음 사이의 전이를 컨트롤합니다.
Lock Atlas“아틀라스 잠금(Lock Atlas)”가 사용 가능이면, 자동 지도기능은 작동하지 않으며, 라이트맵 인덱스, 오브젝트들의 타일링과 오프셋은 변하지 않을 것입니다.
Resolution월드 유닛당 라이트맵의 해상도(texel 단위). 50의 값과 10유닛 X 10유닛 평면은 라이트맵에서 500x500픽셀을 차지하는 평면을 나오게 할 것입니다.

Maps

모든 라이트맵 들의 편집가능배열.

Compressed장면을 위해 모든 라이트맵 asset을 토글(Toggle) 압축합니다.
Array Size라이트맵 배열의 사이즈 (0 - 254).
Lightmaps Array현재 장면의 모든 라이트맵 들의 편집 가능한 배열. 비 할당 슬롯들은 검정 라이트맵들로 간주됩니다. 메쉬 렌더러들과 지형(Terrain)들에서의 라이트맵 인덱스값에 상응하는 색인들(Indices). “Lock Atlas” 가 가능으로 설정되어 있지 않으면, 이 배열은 자동으로 조절 될 것이며 라이트맵을 베이크할 때마다 populate 될 것입니다.

라이트맵 표시

라이트맵들이 어떤식으로 에디터에서 표시될지를 컨트롤하는 유틸리티들입니다. 라이트맵 디스플레이는 장면 보기의 서브창이며, 라이트매핑 창이 보이는 곳에서 보입니다.

Use Lightmaps렌더링 시 또는 렌더링 하지 않는 동안 라이트맵 들을 사용할지 설정합니다.
Shadow Distance자동 라이트(Auto light)와 희미해진 멀리 있는 라이트 맵들Close사이의 거리. 이 설정은QualitySettings.shadowDistance 를 해당 설정으로 적용시키지만 덮어쓰지는 않습니다.
Show Resolution장면 보기 라이트맵 해상도를 토글합니다. 이는 정적으로 표시된 오브젝트들의 라이트맵 텍셀들을 어떤식으로 소모되었는지 미리 보기 할 수 있습니다.

세부 사항들

이중 라이트 맵들

이중 라이트맵 들은 라이트매핑이 _반사(specular)_, _직각 매핑(normal mapping)_ 에서 작용하도록 하고 베이크와 실시간 그림자의 적절한 혼합을 작동하게 하는 유니티의 접근법입니다. 또, 라이트맵의 해상도가 낮아도, 라이트맵이 좋게 보이도록 하는 방법입니다.

이중 라이트 맵들은 기본적으로 늦춰진 라이팅 렌더링 경로 (Deferred Lighting rendering path)에 사용될 수 있습니다. 전면 렌더링 경로에는, 사용자 쉐이더를 작성해서 이중 라이트맵들을 가능하게 할 수 있습니다. (dualforward 표면 쉐이더 지시어).

이중 라이트맵들은 두 개의 라이트맵들 집합을 사용합니다:

  • _Far_: 전체 조명을 포함합니다
  • _Near_: _Auto_로 표시된 라이트들로 부터의 간접 조명을 포함합니다. _Bake Only_로 표시된 라이트들로 부터의 완전 조명(full illumination)을 포함합니다. 발광성 물질과 스카이 라이트들을 포함합니다.

_Realtime Only_라이트들은 베이크되지 않습니다. _Near_ lightmap 설정이 그림자 거리의 퀄리티 설정 보다 더 작은 카메라 거리 안에서 사용됩니다.
이 거리 안에서는 _Auto_ 라이트들이 반사 범프(bump)와 실시간 그림자들을 가진 빛들(이는 그림자들이 실시간에만 해당 하는 빛들로부터의 그림자들로 정확하게 섞이게 만듭니다)로 렌더되고, 간접 라이트는 라이트맵 으로부터 취합니다. 그림자 거리의 바깥쪽은 _Auto_ 라이트들은 더 이상 실시간으로 렌더하지 않고, 완전 조명은 _Far_라이트맵으로부터 취합니다(_Realtime Only_ 라이트만 해당. 라이트들은 disabled 그림자들과 여전히 그곳에 있음.

아래의 장면은 라이트매핑 모드가 기본인 “Auto”로 설정된 하나의 방향성 빛을 포함합니다. 그리고, 정적 라이트맵된 몇몇 오브젝트들(빌딩, 장애물, 움직이지 않는 세부요소들)과 몇 동적 움직이는 움직일 수 있는 오브젝트들(총들을 가진 모조품, 베럴들)을 포함합니다. 그 장면은 베이크 처리되었고, 이중 라이트맵 모드를 렌더합니다: 그림자 거리 뒤에는 빌딩들은 라이트맵들에 의해서만 빛이 비춰집니다. 반면에, 두 모조품들은 동적으로 비춰지며, 그림자를 뿌리지는 않습니다. 그림자 거리 앞에는, 모조품과 정적으로 라이트맵 처리된 빌딩이 있습니다. 땅은 실시간으로 비춰지며, 그림자도 실시간으로 뿌려집니다. 그러나, 소프트 간접 라이트는 라이트맵 주위로부터 나옵니다.

Single Lightmaps

싱글 라이트맵들은 훨씬 더 간단한 기술이지만, 어떤 rendering path에도 사용할 수 있습니다. 모든 정적 정보 (즉, 베이크해당, 자동 라이트, 스카이라이트, 발광성물질들)는 라이트맵들의 하나의 셋으로 베이크 처리됩니다. 이러한 라이트맵 들은 그림자 거리에 관계없이 모든 라이트맵 처리된 오브젝트들에게 사용됩니다.

동적 그림자의 강도를 베이크된 그림자에 매치(match)시키려면, 라이트의 Shadow Strength 속성을 수동으로 조정할 필요가 있습니다.


원래값인 1.0으로부터 라이트의 그림자 강도를 0.7로 조정.

라이트맵 처리된 재료들(Lightmapped Materials)

유니티는 라이트맵을 사용하기 위해서 특별한 재료를 선택하는 것을 요구하지 않습니다. 내부 탑재 쉐이더들(그리고 작성하는 표면 쉐이더(Surface Shader))로부터 어떤 쉐이더도 박스 바깥쪽의 라이트맵을 지원합니다. (특별히 신경을 쓰지 않아도 작동하게 됩니다.)

라이트맵 해상도(Lightmap Resolution)

Resolution 베이크 설정을 사용하여, 유닛당 얼마나 많은 texel이 화면을 좋게 보이는데 필요한지 컨트롤합니다. 화면에1x1 유닛 평면이 있고, 해상도는 유닛당10 texel들로 설정된다면, 평면은 라이트맵에서10x10 texels을 차지합니다. 해상도 베이크 설정은 글로벌 설정입니다. 이를 특별한 오브젝트를 위해서 변경하면(라이트맵에서 아주 작게 또는 아주 크게), 메쉬 렌더러의 Scale in Lightmap 속성을 사용할 수 있습니다. 라이트맵에서 “Scale”을 0으로 설정하면, 오브젝트는 라이트맵 처리 되지 않습니다. (다른 오브젝트들에게는 여전히 라이트맵의 영향을 끼칩니다.) 라이트맵 텍셀이 어떤식으로 처리되는지 미리 보기 하시려면 라이트맵 해상도 장면 보기 렌더 모드를 사용하십시오.


라이트맵 텍셀이 어떤식으로 처리되는지 보기위한 라이트맵 해상도 장면 보기 모드(각 정사각형은 하나의 텍셀입니다.)

UVs

라이트맵 처리하려는 메쉬는 라이트매핑에 적합한 UVs 를 가지는 것을 필요로 합니다. 이를 위한 가장 쉬운 방법은 주어진 메쉬의 “Mesh Import Setting” 에 있는 “Generate Lightmap UVs option”을 “enable”로 만드는 것입니다.

더 많은 정보를 위해서는 Lightmap UVs 페이지를 참조하세요.

재료 속성들

아래의 재료 속성들은 비스트의 내부 장면 표현에 매핑됩니다:

  • 색상(Color)
  • 메인 질감(Main Texture)
  • 반사색상(Specular Color)
  • 빛남(Shininess)
  • 투명도(Transparency)
    • Alpha-based: 투명 쉐이더를 사용할때, 메인 질감의 알파 채널은 투명도를 컨트롤 할 것입니다.
    • Color-based: 비스트의 RGB 투명도는 질감 속성_TransparencyLM 을 쉐이더에 추가하여 가능하게 할 것입니다. 이 투명도는 알파 기반의 투명도와 비교해서는 반대로 정의되어 있음을 명심해야 합니다: (1, 0, 0)을 가지는 픽셀은 빨강 라이트 컴포넌트에는 완전히 투명할 것이며, 초록과 파랑 컴포넌트에는 불투명할 것입니다. 이는 빨강 그림자를 야기 합니다. 같은 이유로, 하얀 질감은 완전히 투명할 것이며, 반면 검정 질감은 완전 불투명 할 것입니다.
  • 발광(Emission)
    • 자체 조명 재료들은 색상과 메인 질감, 그리고Illum질감에 매스크된 색조를 띈 빛을 내게 됩니다. 발광된 빛의 광도는 발광속성에 비례합니다 (0은 발광이 불가능합니다).
    • 일반적으로, 크고 흐린 광원들은 발광재료와의 오브젝트들로 모델링 됩니다. 작고, 광도가 센 빛들은 노멀(normal_ 라이트 타입이 사용되어야 합니다. 이는 발광 물질이 렌더링 하는 동안 노이즈(noise) 현상이 일어날 수 있어서 입니다.

주의: 재료들을 비스트로 매핑시에는, 유니티는 쉐이더의 속성들과 패스/이름 키워드들(Spectacular, Transparent, Self-Illumin, 등)에 의해서 쉐이더의 종류를 감지합니다.

고급

Automatic Atlasing

아틀라싱(Atlasing) (UV-패키징)은 베이크를 수행할 때마다 자동으로 수행됩니다. 그리고, 특별히 신경 쓰지 않아도 작동합니다.

오브젝트의 월드스페이스(world-space) 표면 지역은 라이트맵의 오브젝트당 스케일값과 전체 해상도를 곱한 값입니다. 결과는 라이트맵 에서의 오브젝트 UV 셋의 크기를 결정합니다. (더 정확히: [0,1]x[0,1] UV 사각형). 다음, 모든 오브젝트들은 가능한한 작은 라이트맵들로 싸여집니다. 반면, 각 오브젝트는 이전의 단계에서 계산된 공간을 차지합니다. 주어진 오브젝트의 UV 집합이[0,1]x[0,1] 부분만 차지하면, 많은 경우 아틀라싱 은 이웃 UV 집합들에 더 가까이 움직여 빈 공간을 활용합니다.

그 결과, 각 라이트맵 될 오브젝트는 라이트맵들중 하나의 위치를 가질것이며, 그 공간은 다른 오브젝트의 공간과 겹치지 않을 것입니다. 아틀라싱 정보는 세 개의 값으로 저장되며 (라이트맵 인덱스, Tiling(scale) 과 메쉬 렌더러의 오프셋입니다) 또한 지형(Terrains) 의 라이트맵 인덱스로 저장됩니다. 그리고, 라이트매핑 창의 오브젝트 pane을 통하여 볼 수 있으며 수정될 수 있습니다.


라이트맵을 오른쪽 클릭하는 것은 선택된 라이트맵을 사용하는 모든 게임 오브젝트들을 선택 가능하게 합니다. 현재의 선택의 활성화된 오브젝트의 라이트맵들은 노란색으로 하이라이트 처리 되었습니다.

아틀라싱(Atlasing)은 오브젝트당 데이터(라이트맵 인덱스, 타일링, 오프셋) 만 변경 가능 하고, 오브젝트의 UV 집합은 변경 불가능 합니다. 이는 UV집합이 공용 메쉬의 부분으로 저장되기 때문입니다. 메쉬를 위한 라이트맵 UV들은 유니티의 내장된 auto-unwrapper 또는 유니티를 부르기전의 외부 3D 패키지를 사용하여 가져오기 시간에 생성됩니다.

아틀라스 잠그기 (Lock Atlas)

아틀라스 잠그기(Lock Atlas) 가 사용이 가능하면, 자동 아틀라싱은 실행되지 않을 것이며 오브젝트들의 라이트맵 인덱스(Lightmap Index), Tiling 와 Offset 는 변경되지 않을 것입니다. 비스트는 현재의아틀라싱에 의존하고, 정확한 아틀라싱을 유지하는 것은 사용자의 책임입니다(예:라이트맵들 안에서는 겹치는 오브젝트가 없음, 라이트맵 슬롯을 참조하는 오브젝트는 라이트맵 배열 끝을 지나지 않음, 등등)

아틀라스 잠금(Lock Atlas)은 라이트매핑을 위한 오브젝트를 보낼 때 다른 워크플로우에 대한 가능성도 열고 있습니다. 그 다음은, 특별한 목적에 맞게, 스크립팅을 통해서나 수동으로 아틀라싱을 수행할 수 있습니다; 만약 현재의 아틀라싱에 만족하고 장면을 위한 라이트맵들의 셋을 더 많이 베이크하면, 자동으로 생성된 아틀라싱을 잠글 수 있습니다. 그리고, 하나 또는 추가의 오브젝트를 장면에 추가한 후, 아틀라싱이 다른 라이트맵 셋들과 호환되지 않는 변화를 만들지 않는 것을 확인하기 위해서 잠글 수도 있습니다.

아틀라스 잠금은 오직 아틀라싱을 잠그고, 메쉬 UV등을 잠그지 않습니다. 만약, 소스 메쉬를 바꾸고, 메쉬의 불러오기(importer)를 “generate lightmap UVs”로 설정했다면, UV들은 다르게 생성되었을 수도 있고, 현재의 라이트맵은 오브젝트에 정확하게 보이지 않을 것입니다. 이를 고치기 위해서는 라이트맵을 다시 베이크 하는 것이 필요합니다.

사용자 비스트베이크 설정들(Custom Beast bake settings)

베이크 프로세스에 더욱 컨트롤이 필요하면 custom Beast settings을 참조하세요.

역링크