라이트매핑

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

왼쪽: 라이트맵이 적용된 간단한 씬. 오른쪽: 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

 

광원 타입

이 페이지는 Type 프로퍼티가 Light 컴포넌트에 미치는 영향에 대해 설명합니다.

Type 프로퍼티를 사용하여 조명의 동작 방식을 선택할 수 있습니다. 사용할 수 있는 값은 다음과 같습니다.

  • 점 광원, 씬의 한 점에 위치하여 모든 방향으로 균등하게 빛을 발산하는 광원
  • 스폿 광원, 씬의 한 점에 위치하여 원뿔 모양으로 빛을 발산하는 광원
  • 방향 광원, 무한히 멀리 위치하여 한 방향으로만 빛을 발산하는 광원
  • 면 광원, 씬에서 사각형 또는 디스크로 정의하며 표면 영역 전체에 걸쳐 균등하게 모든 방향으로 빛을 방출하지만 사각형 또는 디스크의 한쪽 면에서만 빛을 방출하는 광원

점 광원

점 광원은 공간의 한 점에 있고, 광원을 모든 방향으로 균등하게 내보냅니다. 표면에 닿는 광원의 방향은 광원이 닿은 지점에서 라이트 오브젝트의 중심으로 다시 이어지는 선입니다. 광도는 광원에서 거리가 멀어질수록 약해지고, 지정된 거리에서 0이 됩니다. 이를 ‘역제곱 법칙’이라고 하며, 광원이 실제 세계에서 작용하는 방법과 유사합니다.

점 광원은 씬에 있는 램프와 기타 로컬 광원을 시뮬레이션하는 데 유용합니다. 스파크 또는 폭발에서 발생하는 광원이 주변을 실감나게 비추게 하는 데도 사용할 수 있습니다.

씬의 점 광원 효과

스폿 광원

스폿 광원은 점 광원과 마찬가지로 광원이 떨어지는 지정된 위치와 범위가 있습니다. 하지만 스폿 광원은 특정 각도로 제약되므로 조명이 비추는 원뿔 모양의 영역이 발생합니다. 원뿔의 중앙은 라이트 오브젝트의 전방(Z) 방향을 가리킵니다. 또한 광원은 스폿 광원 원뿔의 가장자리로 갈수록 약해집니다. 각도를 넓히면 원뿔의 너비가 증가하고 ‘페넘브라’라고 하는 이 페이드(광원이 약해지는 영역)의 크기도 함께 커집니다.

스폿 광원은 일반적으로 플래시라이트, 자동차 헤드라이트 및 서치라이트 같은 인공 광원으로 사용됩니다. 스크립트나 애니메이션에서 방향을 제어하는 움직이는 스폿 광원은 씬의 작은 영역에만 광원을 비추고 극적인 조명 효과를 만들어 냅니다.

씬의 스폿 광원 효과

방향 광원

방향 광원은 씬에서 햇빛 같은 효과를 만드는 데 유용합니다. 여러 면에서 태양처럼 동작하는 방향 광원은 무한한 거리에 멀리 떨어져 있는 광원이라고 생각할 수 있습니다. 방향 광원은 확인할 수 있는 광원 포지션이 없으므로, 라이트 오브젝트를 씬의 아무 위치에나 배치할 수 있습니다. 씬의 모든 오브젝트에는 광원이 항상 같은 방향에서 오는 것처럼 비춥니다. 광원과 타겟 오브젝트의 거리는 정의되어 있지 않으므로 광원이 약해지지 않습니다.

방향 광원은 게임 세계의 범위 밖에 있는 위치에서 오는 크고 먼 광원을 표현합니다. 사실적인 씬에서는 방향 광원을 사용하여 해나 달을 시뮬레이션할 수 있습니다. 추상적인 게임 세계에서는 빛이 정확하게 어디서 오는지 지정하지 않고 오브젝트에 사실적인 셰이딩을 추가하는 데 유용한 방법이 될 수 있습니다.

씬 내 방향 광원 효과

기본적으로 새 Unity 씬에는 모두 방향 광원이 있습니다. 여기에서 방향 광원은 조명 패널의 환경 조명 섹션(Lighting>Scene>Skybox)에서 정의되는 절차적 스카이 시스템에 연결됩니다. 기본 방향 광원을 삭제하고 새 광원을 만들거나 간단히 ‘Sun’ 파라미터(Lighting>Scene>Sun)에서 다른 게임 오브젝트를 지정하여 이 동작을 변경할 수 있습니다.

기본 방향 광원(즉 ‘Sun’)을 회전하면 ‘스카이박스’가 업데이트됩니다. 빛이 지면과 평행하게 측면에 비스듬하게 비치도록 하면 일몰 효과를 얻을 수 있습니다. 또한 빛이 위쪽을 향하게 하면 밤이 된 것처럼 하늘이 검게 변합니다. 빛을 위에서 비스듬하게 비추면 하늘이 주간과 유사해집니다.

스카이박스를 앰비언트 소스로 선택하면 이런 컬러에 따라 주변광이 변합니다.

면 광원

면 광원(Area lights)은 공간에 있는 사각형 또는 디스크 중 한 가지 모양으로 정의할 수 있습니다. 면 광원은 해당 모양의 한 쪽 면에서 빛을 방출합니다. 자체 광원은 해당 모양의 표면적 전체에 걸쳐 모든 방향으로 균일하게 퍼집니다. Range 프로퍼티는 해당 모양의 크기를 결정합니다. 면 광원이 제공하는 조명의 강도는 광원으로부터 거리의 역제곱에 의해 결정되는 비율로 감소합니다(역제곱 법칙 참조). 이 조명 연산에는 프로세서 성능이 꽤 많이 사용되기 때문에 면 광원은 런타임 시점에 사용할 수 없고 라이트맵으로만 베이크할 수 있습니다.

면 광원은 오브젝트를 여러 다양한 방향에서 동시에 비추기 때문에 다른 광원 타입에 비해 셰이딩이 더 부드럽고 섬세합니다. 면 광원을 사용하여 사실적인 가로등이나 플레이어 가까이에 길게 늘어선 불빛을 만들 수 있습니다. 작은 면 광원을 사용하면 실내 조명처럼 더 작은 광원을 점 광원보다 더 사실적으로 시뮬레이션할 수 있습니다.

면 광원의 전체 표면에서 발산되어 부드러운 그림자를 생성하는 산란광을 만듭니다.

'유니티게임강좌 > 라이트매핑' 카테고리의 다른 글

[라이트매핑] 라이트 프로브  (2) 2023.03.20
[라이트매핑] 라이트매핑  (0) 2023.03.20

조명 소개

이 페이지에서는 Unity에서 조명이 작동하는 방식을 설명합니다.

Unity의 조명은 현실 세계에서 빛이 동작하는 방식을 근사화합니다. Unity는 광원의 동작에 대한 세밀한 모델을 사용하여 더욱 사실적인 결과를 구현하거나, 단순화된 모델을 사용하여 더욱 세련된 결과를 구현합니다.

직접 조명과 간접 조명

직접광은 방출되어 표면에 한 번 닿은 후 센서(예: 눈의 망막 또는 카메라)에 직접 반사되는 광원입니다. 간접광은 표면에 여러 번 닿는 광원, 스카이 라이트 등을 포함하여 궁극적으로 센서에 반사되는 다른 모든 광원입니다. 사실적인 조명 결과를 얻으려면 직접광과 간접광을 모두 시뮬레이션해야 합니다.

Unity는 직접 조명, 간접 조명 또는 둘 다를 계산할 수 있습니다. Unity가 사용하는 조명 기술은 프로젝트의 설정 방식에 따라 다릅니다.

실시간 조명과 베이크된 조명

실시간 조명은 Unity가 런타임 시점에 계산하는 조명입니다. 베이크된 조명은 Unity가 조명 계산을 미리 수행하고 결과를 조명 데이터로 저장한 후 런타임 시점에 적용되는 조명입니다. Unity에서 프로젝트는 실시간 조명, 베이크된 조명, 또는 이 두 가지의 조합(혼합 조명)을 사용할 수 있습니다.

실시간 조명, 베이크된 조명, 혼합 조명을 제공하기 위한 Light 컴포넌트의 설정 방법은 광원 모드를 참조하십시오.

전역 조명

전역 조명은 직접 조명과 간접 조명을 모두 모델링하여 사실적인 조명 결과를 제공하는 기술 그룹입니다. Unity에는 직접 조명과 간접 조명을 결합하는 두 가지 전역 조명 시스템이 있습니다.

베이크된 전역 조명 시스템은 라이트매핑, 라이트 프로브, 반사 프로브로 이루어져 있습니다. 모든 렌더 파이프라인은 베이크된 전역 조명 시스템을 지원합니다. 베이크된 전역 조명 시스템의 각 기능에 대한 렌더 파이프라인 지원은 해당 기능에 대한 문서에 나와 있습니다.

실시간 전역 조명 시스템은 인라이튼을 사용하는 실시간 전역 조명으로 이루어져 있으며 라이트 프로브에 기능을 추가합니다. 빌트인 렌더 파이프라인은 실시간 전역 조명을 지원합니다. 고해상도 렌더 파이프라인(HDRP)과 유니버설 렌더 파이프라인(URP)은 실시간 전역 조명 시스템을 지원하지 않습니다. 인라이튼은 지원이 중단되었으며, 실시간 전역 조명 시스템은 Unity에서 곧 제거될 예정입니다. 자세한 내용은 Unity 블로그를 참조하십시오.

 

씬을 새로만들면 Directional Light가 기본으로 생성되지만,  필요에 따라 Point, Spot, Area Light를 추가할수 있다.

GameObject>Light로 조명을 생성할수 있다.

Light가 추가하면 그만큼 렌더링 계산이 늘어나기때문에 부하가 늘어날 수밖에 없다. 따라서 시각적인효과와 게임수행속도 사이의 균형을 맞추는데 신경써야한다.

유니티는 게임 속도를 저하하지 않고 실시간 조명의 효과를 낼 수 있는 라이트매핑및 라이트 프로브 기능을 제공한다.

 

실시간 라이트매핑 기능

유니티는 백그라운드로 라이트맵을 베이킹할 수 있는 기능이 있다. 개발중에 조명의 효과를 볼 수 있어 반복적인 작업에 매우 편리하다. 메뉴에서 Window>Rendering>Lighting 을 선택하면 라이팅뷰가 열린다.

 

Lighting Setting 에셋

라이팅뷰 New Lighting Settings버튼을 클릭해 에셋을 생성한다. 이름은 Play로 한다. Secenes폴더로 이동시킨다.

 

Auto Generate옵션

라이팅뷰 아래에 있는 오토제너레이션 옵션을 체크하면 실시간 라이트맵을 베이크한다. 아직은 라이트매핑을 위해 설정한 것이 없기때문에 문제가 되자 않지만 복잡해지면 에디터의 속도를 떨어트리는 원인이 된다. 

 

+ Recent posts