Unity의 조명 설정은 게임의 분위기와 시각적 품질을 결정짓는 핵심 요소입니다.
오늘은 이러한 시각적 품질의 역할을 맡고 있는 Unity의 조명 설정에 대해 자세히 알아보겠습니다.
Unity에서는 환경 조명, 방향성 조명, 포인트 조명 등 다양한 조명 설정이 있는데 각 조명별로 특정한 역할을 수행하고 있습니다.
그럼 우선 Unity의 라이팅 맵을 열어 어떤 기능과 역할들이 있는 지 정리를 해보겠습니다
* Lighting 세팅을 위한 탭은 Window > Rendering > Lighting을 통해 열 수 있다
1. Lighting Settings
- 역할 : Lighting Settings Asset을 사용하여 씬의 라이팅 세팅을 저장하고 관리하는 탭으로 다른 씬에도 동일한 설정을 할 수 있다.
- 사용 방법 : New 버튼을 눌러 새로운 Lighting Settings Asset을 생성하거나 기존의 에셋을 할당하여 사용
- 사용 시점 : 여러 씬에서 동일한 라이팅 설정을 공유하고 싶을 때 사용
- 예시 : 프로젝트의 모든 씬에서 동일한 조명 분위기와 효과를 유지하고 싶다면 Lighting Setting Asset을 생성하여 각 씬에 할당
2. Realtime Lighting
- 역할 : 실시간으로 조명 계산을 처리하여 동적인 조명 효과를 제공합니다. 캐릭터가 움직이거나 오브젝트가 이동할 때에도 조명 효과가 실시간으로 반영
- 사용 방법 : Realtime Global Illumination(GI)을 체크하면 실시간으로 글로벌 일루네이션이 계산된다.
- 사용 시점 : 실시간으로 조명 변화가 필요한 씬에서 사용
- 예시 : 실내에서 손전등을 켜서 방 안의 조명이 실시간으로 변화하는 씬을 구현할 때.
** Realtime Environment Lighting과 Indirect Resolution은 무엇일까?
Realtime Environment Lighting : 실시간 GI를 계산할 때, 씬의 환경 조명이 실시간으로 반영되도록 설정하는 옵션
주로 환경에서 들어오는 빛을 씬 전체에 걸쳐 반사시키고 간접 조명으로 활용
예시 :
(1) 낮과 밤의 변화 : 낮에는 하늘에서 오는 환경광이 더 강하게 반사, 밤에는 주변 조명이 주요한 간접광 역할
(2) 동적인 환경 변화 : 환경 오브젝트(예: 색상이 변하는 하늘 스카이박스)가 변하면, 씬 내 오브젝트에 반사되는 광원도 실시간으로 업데이트
Indirect Resolution : 실시간 GI에서 간접광의 해상도를 결정하는 설정
값은 오브젝트 표면에서 간접 조명을 샘플링할 해상도를 결정하는데 값이 높을수록 더 정밀한 간접광의 디테일을 얻을 수 잇다.
예시 :
(1) 실내 씬 : 빛의 창문이나 문을 통해 들어오고, 벽과 천장에 간접광이 여러번 반사되어 복잡한 조명 효과를 만들어야 할 때
(2) 정밀한 그림자 표현 : 간접광이 캐릭터나 오브젝트의 섬세한 그림자나 컬러 블리딩을 더 정확하게 표현해야 할 때
3. Mixed Lighting
- 역할 : 실시간 조명과 베이킹된 조명을 혼합하여 사용합니다. Lighting Mode 옵션을 통해 Shadowmask, Distance Shadowmask, Subtractive 모드 중 선택할 수 잇다
- 사용 방법 : Baked Global Illumination 체크 후 Lighting Mode를 설정하여 혼합 조명 모드를 선택.
- 사용 시점 : 베이킹된 조명과 실시간 조명을 함께 사용하고, 특히 그림자 처리에 대해 더 세밀한 제어가 필요할 때 사용
- 예시 : 실내에서 정적 조명과 창문을 통해 들어오는 실시간 그림자가 필요한 경우 (캐릭터가 창문 근처로 가면 실시간 그림자가 생기고 그렇지 않을 때에는 베이킹된 조명이 적용되는 효과!)
4. Lightmapping Settings
- 역할 : Lightmap을 생성할 때 사용할 샘플링 수, 필터링, 해상도 등의 다양한 옵션을 제공하여 최종 조명 결과를 제어
- 사용 방법 (옵션 설명) :
- Lightmapper: Progressive CPU 또는 GPU를 선택하여 라이팅을 베이킹할 때 사용할 계산 방식을 설정
- Progressive Updates: 베이킹 도중 실시간으로 결과를 확인할 수 있도록 업데이트
- Importance Sampling: 더 많은 계산 자원을 중요한 영역에 사용하여 더 높은 품질의 결과를 얻을 수 있다.
- Direct Samples: 직사광선 샘플 수를 설정합니다. 값이 높을수록 더 부드럽고 정밀한 그림자가 생성
- Indirect Samples: 간접광 샘플 수를 설정합니다. 값이 높을수록 더 정밀한 간접 조명이 계산
- Environment Samples: 환경광 샘플 수를 설정합니다. 값이 높을수록 주변 환경에서 반사되는 광원이 더 정확하게 표현
- Max Bounces: 빛이 반사되는 최대 횟수를 설정합니다. 값이 높을수록 더 많은 반사광을 계산하지만 성능이 저하될 수 있다.
- Filtering: 라이팅 맵의 필터링 방식을 설정
- Lightmap Resolution: Lightmap의 해상도를 설정, 단위는 texels per unit으로 설정되고 값이 높을수록 더 세밀한 조명이 표현되지만 메모리 사용량이 증가
- Lightmap Padding: Lightmap 텍스처에서 각 오브젝트 간의 패딩(간격)을 설정, 값이 낮으면 경계선에서 아티팩트가 생길 수 있다.
- Max Lightmap Size: 씬에서 사용하는 라이트맵 텍스쳐의 최대 크기를 설정
- Lightmap Compression: 라이트맵 텍스쳐 압축 방식을 설정, 압축을 통해 메모리 사용량을 줄이고 성능을 향상시킬 수 있다. (None : 압축 X, 메모리 사용량이 많고, 품질이 가장 좋다, Low Quality: 성능이 우선, High Quality: 메모리 절약과 품질을 균형 있게 유지)
- Ambient Occlusion: 오브젝트의 홈이나 접촉 면과 같이 환경광이 적게 도달하는 부분을 어둡게 표현
- Directional Mode: 라이트맵의 방향성을 설정 (Directional : 방향성 정보를 포함하여 라이트 맵 생성, 실시간 조명와의 상호작용이 좀 더 자연스러움, Non- Directional : 간단한 라이트맵, 성능에 유리)
- Indirect Intensity: 간접광의 강도를 조절하는 설정, 씬 내에서 간접적으로 반사되는 빛의 세기를 조정하여 씬의 밝기와 분위기를 조절 (값이 높아지면 간접광의 강도 증가, 전체적으로 씬의 밝기를 조절하고 싶을 때)
- 사용 시점 : 정적 오브젝트와 환경에서 조명 품질을 최적화하고자 할 때 사용
- 예시 : 복잡한 건물의 내부를 묘사하는 씬에서 간접 조명과 반사광을 정밀하게 표현하고 싶을 때
** 다음 포스팅에서는 이 설정으로 얼마나 차이를 보이는 지 적용하여 비교해보자