라이트매핑

라이트매핑은 씬의 표면 밝기를 미리 계산하고 계산 결과를 나중에 사용하기 위해 라이트맵이라고 불리는 텍스처에 저장하는 프로세스입니다.

왼쪽: 라이트맵이 적용된 간단한 씬. 오른쪽: Unity가 생성한 라이트맵 텍스처. 그림자 및 광원 정보가 모두 캡처됩니다.

라이트맵에는 직접광과 간접광이 모두 포함될 수 있습니다. 이 조명 텍스처는 오브젝트의 머티리얼과 연결된 셰이더에서 컬러(알베도) 및 릴리프(노멀) 같은 표면 정보와 함께 사용될 수 있습니다.

라이트맵에 베이크된 데이터는 런타임 시 변경할 수 없습니다. 실시간 광원은 라이트맵이 적용된 씬 위에 오버레이시켜 추가적으로 사용할 수 있지만, 라이트맵 자체를 대화식으로 변경할 수 없습니다.

이 방식을 사용할 경우 게임플레이 시에 광원을 실시간으로 움직일 수 있는 유용성을 잠재적인 성능 향상과 맞바꾸는 것이므로, 모바일 플랫폼처럼 성능이 낮은 하드웨어에 적합합니다.

Unity는 라이트맵 생성을 위해 다음의 라이트매퍼를 제공합니다.

 

인라이튼 베이크된 전역 조명을 사용한 라이트매핑 - Unity 매뉴얼

인라이튼 베이크된 전역 조명은 사전 계산된 실시간 전역 조명 데이터에 기반하여 간접 조명을 생성합니다. 이렇게 하면 씬의 조명을 변경한 후 새로운 라이트맵을 매우 빠르게 생성하는 장점

docs.unity3d.com

인라이튼 베이크된 전역 조명을 사용한 라이트매핑

인라이튼 베이크된 전역 조명은 사전 계산된 실시간 전역 조명 데이터에 기반하여 간접 조명을 생성합니다. 이렇게 하면 씬의 조명을 변경한 후 새로운 라이트맵을 매우 빠르게 생성하는 장점이 있습니다. 그러나 인라이튼 베이크된 전역 조명은 프로그레시브 라이트매퍼보다 UV 레이아웃 제한이 더 많습니다.

인라이튼 베이크된 전역 조명은 지원 중단 예정입니다.(인라이튼 실시간 전역 조명은 계속 지원합니다.)

렌더 파이프라인 지원

렌더 파이프라인의 인라이튼 베이크된 전역 조명 지원에 대한 자세한 내용은 렌더 파이프라인 기능 비교를 참조하십시오.

인라이튼 라이트매퍼 사용

인라이튼 베이크된 전역 조명을 사용하려면 Window > Rendering > Lighting에서 Lightmapping Settings로 이동한 후 Lightmapper Enlighten으로 설정합니다.

LightingSettings API를 사용하여 스크립트를 통해 이 창에서 사용할 수 있는 많은 기능을 수행할 수 있습니다.

다음 프로퍼티는 인라이튼에만 해당됩니다. 이것을 노출시키려면 Lightmapper control에서 Enlighten을 선택합니다.

프로퍼티:기능:

Final Gather 베이크된 라이트맵과 동일한 해상도로 전역 조명 최종 광원 바운스를 계산합니다. 이렇게 하면 화질이 향상되지만 조명 베이크 시간이 늘어납니다. Final Gather가 활성화되면 Ray Count 및 Denoising 설정이 노출됩니다.
Indirect Resolution 이 설정을 사용하면 라이트매퍼가 간접 조명 계산에 사용하는 샘플 수를 지정할 수 있습니다. 값이 높을수록 라이트맵 품질이 향상되지만, 그만큼 베이크하는 데 걸리는 시간이 증가합니다.
  Ray Count 최종 수집 포인트마다 라이트매퍼가 방출하는 광선의 수를 지정합니다.
  Denoising 최종 수집 출력에 노이즈 제거 필터를 적용합니다.

기본 환경 기여 비활성화

Unity는 자동으로 앰비언트 프로브 기본 반사 프로브를 생성하여 환경 조명이 기본적으로 씬과 씬의 게임 오브젝트에 영향을 주도록 합니다.

라이트맵과 라이트 프로브를 수동으로 생성하지 않은 게임 오브젝트 또는 씬의 조명 결과에서 환경 기여를 비활성화하려면 기본 반사 프로브와 앰비언트 프로브를 비활성화합니다. 자세한 내용은 [SkyManager 비활성화]를 참조하십시오.

라이트매핑: 시작하기

씬 준비 및 라이트맵 베이킹

Unity 에디터 메뉴에서 Window > Rendering > Lighting 을 선택하여 Lighting 창을 엽니다. 라이트맵을 적용할 메시를 검토하여 라이트맵에 적합한 UV가 있는지 확인합니다. 메시 임포트 설정을 열고 Generate Lightmap UVs 설정을 활성화하면 가장 쉽게 확인할 수 있습니다.

다음, 라이트맵 해상도를 설정하기 위해 라이트맵 설정(Lightmapping Settings) 섹션으로 이동하여 라이트맵 해상도(Lightmap Resolution) 값을 조정합니다.

라이트맵에 포함되려면 렌더러가 다음 조건을 충족해야 합니다.

  • Mesh Renderer 또는 Terrain 컴포넌트가 있습니다.
  • Contribute GI로 표시되어 있습니다.
  • 빌트인 Unity 머티리얼, 스탠다드 셰이더 또는 메타 패스가 포함된 셰이더를 사용합니다.

광원 탐색기에서 광원에 대한 설정을 조정할 수 있습니다. 광원 탐색기를 열려면 Window > Rendering > Light Explorer로 이동합니다.

씬의 라이트맵을 생성하는 방법:

  1. Lighting 창(메뉴: Window > Rendering > Lighting)을 엽니다.
  2. Lighting 창의 Scene 탭 하단에서 Generate Lighting 을 선택합니다(또는 Auto Generate 가 활성화되어 있는지 확인합니다).
  3. Unity 에디터 상태 표시줄의 오른쪽 하단에 진행 표시줄이 나타납니다.

라이트매핑이 완료되면 Unity의 씬 뷰와 게임 뷰가 자동으로 업데이트되며 Lighting 창의 Baked Lightmaps 탭으로 이동하여 결과가 적용된 라이트맵을 볼 수 있습니다.

조명을 수동으로 생성하면 조명 데이터 에셋, 베이크된 라이트맵, 반사 프로브 Assets 폴더에 추가됩니다.

 

라이트맵 파라미터 에셋

라이트맵 파라미터 에셋에는 Unity의 조명 기능을 제어하는 파라미터 값 세트가 들어 있습니다. 이러한 에셋을 사용하면 다양한 조명 값 세트를 정의하고 저장하여 다양한 상황에서 사용할 수 있습니다.

라이트맵 파라미터 에셋을 사용하면 다양한 게임 오브젝트 타입이나 여러 플랫폼과 여러 씬 타입(예: 실내 또는 야외 씬)에 최적화된 프리셋을 빨리 만들 수 있습니다.

라이트맵 파라미터 에셋 생성

새 라이트맵 파라미터 에셋을 생성하려면 프로젝트 창에서 마우스 오른쪽 버튼을 클릭하고 생성(Create) > 새 파라미터 에셋(New Parameters Asset) 으로 이동합니다. Unity는 프로젝트 폴더에 생성된 에셋을 저장합니다.

프로퍼티

프로젝트 창에서 라이트맵 파라미터 에셋을 클릭하면 해당 에셋에 정의된 값이 인스펙터 창에 표시됩니다. 아래 표에는 각 파라미터와 해당 설명이 나열되어 있습니다.

실시간 GI

이 파라미터는 인라이튼 실시간 전역 조명을 설정합니다.

렌더 파이프라인의 인라이튼 실시간 전역 조명 지원에 대한 자세한 내용은 렌더 파이프라인 기능 비교를 참조하십시오.

프로퍼티기능

Resolution 이 값은 라이팅 창의 Scene 탭(메뉴: Window > Rendering > Lighting > Scene)에 있는 Realtime Resolution 값을 조정하여 라이트맵의 최종 해상도를 단위 거리당 텍셀 수로 표시합니다.
Cluster Resolution 클러스터 해상도(광원 바운스가 내부적으로 계산되는 해상도) 대 최종 라이트맵 해상도의 비율입니다. 자세한 내용은 씬 뷰에서 GI 시각화 문서를 참조하십시오.
Irradiance Budget 값은 라이트맵의 각 텍셀에 광원을 비추는 데 사용되는 유입 광원 데이터의 정밀도를 결정합니다. 각 텍셀의 조명은 텍셀 포지션에서 씬의 “뷰”를 샘플링하여 얻습니다. 복사 조도의 계산 정밀도 값이 낮을수록 샘플이 더 흐릿합니다. 값이 높을수록 샘플의 선명도가 높아집니다. 복사도 값이 높을수록 조명이 개선되지만, 런타임 메모리 사용량이 증가하고 CPU 사용량도 증가할 수 있습니다.
Irradiance Quality 슬라이더를 사용해 캐스트되고 주어진 출력 라이트맵 텍셀에 영향을 미치는 클러스터를 계산하는 데 사용되는 레이의 수를 정의합니다. 값이 높을수록 라이트맵이 시각적으로 개선되지만, Unity 에디터에서 미리 계산하는 시간이 늘어납니다. 이 값은 런타임 성능에 영향을 미치지 않습니다.
Modelling Tolerance 값은 광원이 메시 지오메트리를 통과할 수 있는 틈새의 최소 크기를 설정합니다. 환경에서 광원이 더 작은 틈새를 통과할 수 있게 하려면 이 값을 더 낮게 설정해야 합니다.
Edge Stitching 활성화할 경우, 프로퍼티는 불필요한 시각적 결함을 방지하기 위해 라이트맵의 UV 차트를 완벽하게 결합해야 함을 나타냅니다.
Is Transparent 활성화하면 오브젝트가 전역 조명 계산 중에 투명하게 표시됩니다. 후면은 계산에 포함되지 않고, 광원이 표면을 통해 지나갑니다. 보이지 않는 이미시브 표면에 유용합니다.
System Tag 라이트맵 텍스처가 “시스템”이라는 동일한 라이트맵 아틀라스에 결합된 오브젝트 그룹입니다. Unity 에디터는 모든 라이트맵이 아틀라스 하나에 들어가지 않는 경우 추가 시스템과 각각의 아틀라스를 함께 정의합니다. 하지만 때로는 (예를 들어 서로 다른 룸 안에 있는 오브젝트가 룸당 시스템 하나로 그룹화되게 하기 위해) 별도의 시스템을 직접 정의하면 유용합니다. System Tag 번호를 변경하여 새로운 시스템과 라이트맵을 강제로 만들 수 있습니다. 태그의 정확한 숫자 시퀀스 값은 중요하지 않습니다.

베이크된 GI

이 파라미터는 라이트매핑을 설정합니다.

렌더 파이프라인의 라이트매핑 지원에 대한 자세한 내용은 렌더 파이프라인 기능 비교를 참조하십시오.

프로퍼티기능

  인라이튼 베이크된 전역 조명 프로그레시브 라이트매퍼(Progressive Lightmapper)
Blur Radius 텍셀에서 사후 처리 중에 직접 조명에 적용되는 블러 필터의 반지름입니다. 반지름은 본질적으로 인접 텍셀 거리의 평균입니다. 반지름이 클수록 블러 효과가 더 많이 제공됩니다. 블러 레벨이 높을수록 시각적 결함이 감소하지만 섀도우의 가장자리가 부드러워지는 경향이 있습니다. 프로그레시브 라이트매퍼를 사용하는 경우 블러 반지름(Blur Radius) 은 이용할 수 없습니다.
안티앨리어싱 샘플(Anti-aliasing Samples) 적용되는 안티앨리어싱(“블록 모양”의 결함 감소) 정도입니다. 숫자가 높을수록 품질이 향상되고 베이크 시간이 늘어납니다. 앨리어싱을 줄이기 위해 텍셀을 슈퍼샘플링하는 횟수입니다. [1;3] 샘플은 슈퍼샘플링을 비활성화하고, [4;8] 샘플은 2x 슈퍼샘플링을 제공하고, [9;256] 샘플은 4x 슈퍼샘플링을 제공합니다. 주로 포지션과 노멀 버퍼에 사용되는 메모리 양에 영향을 미칩니다. (2x 시 메모리가 4배 더 많이 사용되고, 4x 시 메모리가 16배 더 많이 사용됩니다.)
Direct Light Quality 직접 조명을 측정하는 데 사용되는 레이의 수입니다. 레이 수가 많을수록 더 정확하고 부드러운 섀도우가 생성되지만 베이크 시간이 늘어납니다. 프로그레시브 라이트매퍼를 사용하는 경우 직접광 품질(Direct Light Quality) 은 이용할 수 없습니다.
Backface Tolerance 때로는 메시 구조로 인해 일부 텍셀에 후면 방향 지오메트리가 포함된 “뷰”가 있을 수 있습니다. 후면에서 유입되는 광원은 씬에서 무의미하므로, 프로퍼티를 통해 텍셀을 유효한 것으로 간주하기 위해서는 전체 광원 중 전면 지오메트리에서 나온 광원이 얼마나 되어야 하는지를 나타내는 백분율의 임계값을 선택할 수 있습니다. 유효하지 않은 텍셀은 인접 텍셀의 값으로부터 조명이 어림됩니다. 값을 낮추면 후면에서 유입되는 광원으로 인해 발생하는 조명 문제를 해결할 수 있습니다. 출력 텍셀에서 투사된 광선이 유효한 것으로 간주되기 위해 전면에 닿아야 하는 광선의 비율입니다. 텍셀에서 투사된 광선 중에 후면에 닿는 광선이 너무 많으면(텍셀이 어떤 지오메트리 안에 있음) 텍셀을 무효화할 수 있습니다. 이 경우 주위 텍셀에서 유효한 값을 복제하여 결함을 방지합니다. 예를 들어 후면 허용치를 0.0으로 설정하면, 텍셀에서 후면만 보일 때에만 텍셀이 거부됩니다. 후면 허용치를 1.0으로 설정하면, 후면에 닿는 광선이 하나만 있어도 광선 원점이 거부됩니다. 베이크된 텍셀 유효성(Baked Texel Validity) 씬 뷰 모드에서 유효한 텍셀은 녹색으로, 유효하지 않은 텍셀은 빨간색으로 나타납니다. 씬에 단면 메시가 있는 경우 이 기능을 영(0)으로 설정하여 비활성화하는 것이 좋습니다. 나중에 Unity 에디터에서 양면 플래그를 추가하여 이 문제를 해결할 수 있습니다.
Pushoff 모델링 유닛에서 레이 트레이스를 시작하기 전에 표면 지오메트리에서 밀어낼 거리입니다. 모든 베이크된 라이트맵에 적용되므로 직접광, 간접광 및 AO에 영향을 미칩니다. Pushoff는 원치 않는 AO나 섀도우를 없애는 데 유용합니다. 이 설정은 오브젝트 표면에 오브젝트 자체의 섀도우가 생겨 분명한 소스 없이 표면에 얼룩진 섀도우 패턴이 나타나는 문제를 해결하는 데 사용합니다. 이 설정을 사용하여 미세한 디테일을 정확하게 레이 트레이스할 수 있을 만큼 부동 소수점 정밀도가 충분히 높지 않은 경우에 큰 오브젝트에서 원치 않는 결함을 제거할 수도 있습니다. 레이트레이싱을 위해 노멀을 따라 레이 원점을 밀어서 지오메트리에서 멀리 떨어트릴 거리(모델링 단위)입니다. 모든 베이크된 라이트맵에 적용되므로 직접광, 간접광, 베이크된 앰비언트 오클루전에 영향을 미칩니다. 원치 않는 오클루전/그림자를 없애는 데 유용합니다.
Baked Tag 위의 시스템 태그(System Tag) 프로퍼티와 유사하며, 오브젝트 집합을 별도의 베이크된 라이트맵으로 그룹화하는 데 사용할 수 있습니다. 시스템 태그와 마찬가지로, 정확한 숫자 값은 중요하지 않습니다. 베이크된 태그 값이 서로 다른 오브젝트는 절대로 같은 아틀라스 안에 포함되지 않습니다. 하지만 태그가 같은 오브젝트가 라이트맵 하나에 들어가지 않을 수 있으므로 같은 아틀라스에 포함된다는 보장은 없습니다(예는 아래 이미지 A 참조). 멀티씬 베이크 API를 사용하는 경우 그룹화가 자동으로 수행되므로 이 프로퍼티를 설정하지 않아도 됩니다. 베이크된 태그(Baked Tag) 를 사용하여 아틀라스 잠금(Lock Atlas) 옵션의 일부 동작을 모사할 수 있습니다. 자세한 내용은 아래의 베이크된 태그: 세부 정보를 참조하십시오.
Limit Lightmap Count Limit Lightmap Count 는 인라이튼 베이크된 전역 조명을 사용할 때는 제공되지 않습니다. Limit Lightmap Count는 동일한 베이크된 전역 조명 설정을 가진 게임 오브젝트를 패킹할 때 Unity가 사용할 수 있는 최대 라이트 맵 수를 적용합니다. Limit Lightmap Count를 활성화하면 아래에 Max Lightmaps라는 이름의 설정이 나타납니다. 이 설정을 사용하여 Unity가 사용할 수 있는 최대 라이트 맵 수를 설정하십시오.

Unity는 게임 오브젝트들이 동일한 Anti-aliasing Samples, Pushoff, Baked Tag  Backface Tolerance 값을 가진 경우 동일한 베이크된 전역 조명 설정을 사용한다고 간주합니다. 즉 Unity가 다른 라이트맵 파라미터 에셋과 연결된 게임 오브젝트들을 함께 패킹할 수 있습니다. 게임 오브젝트를 패킹하기 위해 Unity는 모든 게임 오브젝트가 지정된 라이트맵 수 안에 들어갈 때까지 UV 레이아웃을 점차적으로 스케일다운합니다. 라이트매퍼 설정은 이러한 라이트맵의 크기를 정의합니다. 이 프로세스는 게임 오브젝트의 라이트맵 해상도를 떨어뜨릴 수 있습니다.

 

베이크된 태그: 세부 정보

 

위 두 이미지에는 동일한 씬에 대한 두 가지 뷰가 나와 있습니다.

  1. 위: 모든 게임 오브젝트의 Baked Tag 가 같으므로 모두 하나의 아틀라스에 있습니다.
  2. 아래: 한 게임 오브젝트에 다른 Baked Tag 가 할당되어 있어 두 번째 라이트맵으로 들어갑니다.

베이크된 AO

이 파라미터는 베이크된 앰비언트 오클루전을 설정합니다.

프로퍼티기능

Quality 베이크된 앰비언트 오클루전(AO) 측정 시에 캐스트되는 레이의 수입니다. 레이 수가 많을수록 AO 품질이 향상되지만 베이크 시간도 늘어납니다.
안티앨리어싱 샘플(Anti-aliasing Samples) AO 안티앨리어싱을 수행할 때 사용할 샘플 수입니다. 샘플 수가 많을수록 AO 품질이 향상되지만 베이크 시간도 늘어납니다.

일반 GI

프로퍼티기능

Backface Tolerance 출력 텍셀에서 투사된 광선이 조명 시스템에서 사용 가능한 것으로 간주되기 위해 전면에 닿아야 하는 광선의 비율입니다. 이를 통해 Unity는 후면에 닿는 광선이 너무 많은 경우(예: 텍셀이 일부 지오메트리 내에 있는 경우) 텍셀을 무효화할 수 있습니다. 조명 시스템은 주위 텍셀에서 유효한 값을 복제하여 의도치 않은 결함을 방지합니다.

후면 허용치(Backface Tolerance) 를 0.0으로 설정하면 조명 시스템은 후면만 보일 때만 텍셀을 리젝트합니다. 1.0으로 설정하면 조명 시스템은 후면에 닿는 광선이 하나만 있어도 광선 원점을 리젝트합니다.

라이트맵 파라미터 에셋 할당(Assigning Lightmap Parameters Assets)

씬(Scenes)

전체 씬에 라이트맵 파라미터 에셋을 할당하려면 다음 단계를 따르십시오.

  1. 조명 창(Window > Rendering > Lighting)을 엽니다.
  2. Scene 탭을 클릭합니다.
  3. Lightingmapping Settings 로 이동합니다.
  4. Lightmap Parameters 드롭다운을 사용하여 디폴트 라이트맵 파라미터 에셋을 할당합니다. 드롭다운 리스트에는 사용 가능한 라이트맵 파라미터 에셋이 모두 나열됩니다.

게임 오브젝트(GameObject)

라이트맵 파라미터 에셋을 단일 게임 오브젝트에 할당하려면 게임 오브젝트에 Mesh Renderer 또는 Terrain 컴포넌트가 연결되어 있어야 합니다.

라이트맵 파라미터 에셋을 Mesh Renderer 컴포넌트에 할당하려면 다음 단계를 따르십시오.

  1. 인스펙터에서 Mesh Renderer > Lighting으로 이동합니다.
  2. Contribute Global Illumination 을 활성화합니다.
  3. Mesh Renderer 컴포넌트에서 Lightmapping > Lightmap Parameters로 이동합니다.
  4. 메뉴에서 옵션을 선택합니다. Scene Default Parameter 를 선택하여 전체 씬에 할당된 동일한 라이트맵 파라미터 에셋을 사용합니다.

라이트맵 파라미터 에셋을 Terrain 컴포넌트에 할당하려면 다음 단계를 따르십시오.

  1. 인스펙터에서 Terrain > Terrain Settings > Lighting으로 이동합니다.
  2. Contribute Global Illumination 을 활성화합니다.
  3. Terrain Settings에서 Lightmapping > Lightmap Parameters로 이동합니다.
  4. 메뉴에서 옵션을 선택합니다. Scene Default Parameter 를 선택하여 전체 씬에 할당된 동일한 라이트맵 파라미터 에셋을 사용합니다.

라이트맵 UV

일반적으로 UV라고 불리는 텍스처 좌표는 지오메트리 주위에 텍스처를 “래핑”하는 방법을 말합니다. 라이트맵은 텍스처이므로 Unity에서 씬을 올바르게 사용하려면 UV가 필요합니다.

이 섹션에서는 다음의 정보를 제공합니다.

페이지설명

라이트맵 UV 소개 베이크된 전역 조명 시스템과 실시간 전역 조명 시스템의 라이트맵 UV에 대한 정보를 소개합니다.
라이트맵 UV 생성 직접 라이트맵 UV를 제공하거나 Unity에서 자동으로 생성하도록 하는 방법.
라이트맵 UV 시각화 Unity에서 사용 중인 라이트맵 UV를 보는 방법.
라이트맵 UV 오버랩 해결 라이트맵 UV의 일반적인 문제를 해결하는 방법.

https://docs.unity3d.com/kr/2021.3/Manual/LightingOverview.html

 

조명 - Unity 매뉴얼

Unity에서 다양한 아트 스타일에 적합한 사실적인 조명을 구현할 수 있습니다.

docs.unity3d.com

 

+ Recent posts