오늘은 이전에 다루었던 Unity Lighting에 대해서 조금더 자세히 알아보고자 합니다.
Unity에는 별도의 Lighting 세팅이 가능하다. 설정 가능한 Lighting Setting은 아래와 같습니다.
- Scene
- Adaptive Probe Volume
- Environment
- Realtime Lightmaps
- Baked Lightmaps
오늘은 Environment, Baked Lightmaps에 대해 자세히 설명해보려고 합니다.
Environment
Scene의 환경값에 대한 설정을 할 수있는 창으로, Skybox, Sun Source, Shadow Color 등 게임 씬의 전반적인 환경값을 관리할 수 있다.
- SkyboxMaterial : Cube Map Material을 적용하여 유니티 씬 전체 Skybox를 설정할 수있다.
- SunSource : Skybox와 Scene에서 태양의 위치와 강도를 설정할 Light을 설정할 수있다.(default : 가장 밝은 방향성 조명)
- Realtime Shadow Color : Subtractive Lighting Mode에서 실시간 그림자를 렌더링하는 데사용할 색상
Environment Light
현재 Scene의 주변광에 영향을 미치는 설정을 포함합니다. Skybox, Color, Gradient
- Skybox : Skybox의 색상을 사용하여 다양한 각도에서 오는 주변광을 결정 현재 선택된 환경(Skybox)에 어울리는 주변광 효과
- Gradient : 하늘, 지평선, 땅의 주변광에 대한 별도의 색상을 사용하여 선택 하여 주변광을 결정하는 방식 입니다.
- Color : 주변광 색상을 단색으로 설정하는 방식입니다.
Environment Reflections
앞서 다루었던 Reflection Probe의 전역 설정을 할 수있는 곳으로, Reflections probe의 Source, 해상도, 반삭사 텍스쳐 압축 여부, 반사원이 보이는 정도, 등을 설정할 수있습니다.
- Source : Custom(CubeMap Texture), Skybox 두가지로 나뉘게 되고, Skybox를 주로 사용합니다.
- Resolution : 반사 프로브의 해상도를 결정하는 것으로, 이 해상도가 클수록 반사환경이미지가 선명하지만, Baked하거나 실시간 렌더링시 성능 저하가 발생할 수 있습니다.
- Compression : 큐브맵 텍스쳐 압축 여부 설정이 가능합니다.
Other Settings
- Fog : 활성화 , 비활성화 설정
- Color : 안개 색상 설정
- Mode : 안개가 거리에 따라 축적되는 방식을 정의 (Linear, Exponential Squared, Exponential)
- Linear : Fog의 Start, End 거리 설정 카메라 기준 시작 거리부터 선형적으로 Fog가 증가
- Exponential : 거리에 따라 기하급수적으로 증가(제곱) Density(밀도)로 설정
- Exponential Squared : 거리에 따라 Exponential옵션보다 더 많이 증가 합니다.
Baked LightMaps
LightMap 이란?
LightMap이란 전역 조명과, 그림자 등을 포함한 라이팅 정보를 미리 연산하여 텍스처로 저장하는 기능을 말합니다.
텍스쳐로 저장된 라이팅 정보를 유니티 씬에 배치된 오브젝트에 적용하여 라이팅 정보가 3D 오브젝트에 적용되는 것을 목표로 합니다.
Why?
- Unity에서 라이팅 정보를 실시간으로 적용하기 위해서는 하나의 Cube의 그림자를 렌더링 하기위해서는 Cube Mesh를 동일하게 하나더 생성하여 라이팅을 표현하기 때문입니다.
- Ex) 10개의 Cube의 그림자를 표현하면 20개의 Cube Mesh가 필요한것
Light Map을 Bake 하는 방법
먼저 라이팅 정보를 받을 오브젝트(그림자, 오브젝트), 전역 라이트 오브젝트, 총 3가지의 오브젝트를 준비합니다.
여기서는 Cube로 라이팅정보를 받아, Plane(ShadowReceive)에 그림자를 생성하는 방식에서 Light map을 적용해보도록 하겠습니다.
Baked Step
- Light, Cube, Plane 각 라이팅의 영향을 받는 오브젝들(여기서는 3가지의 Object)를 Static을 활성화 한다.
- Static 설정 이후 위 Lighting Settings를 확인하여 Lightmap의 해상도 사이즈, 환경 Envirnment를 체크 한다.
- 설정된 Lighting Setting을 최종 확인 후 Generate Lighting을 한다 이때GPU Baked Device를 지정, Baked Profile을 설정할 수있다.
- Baked Profile에는 Performence 우선, Memory 우선으로 나누어지며, Automatic 옵션이 별도로 존재한다.
적용 전 | 적용 후 | |
Light 이동에 따른 그림자 변화 | 실시간 변화 | Directional Light 회전 변경 시 그림자 변화 없음. |
Batches | 37 | 29 |
SetPass calls | 31 | 27 |
결론
Lightmap을 사용하게되면 현재는 적은 오브젝트에 대한 라이팅 정보를 생성하였으나, 대규모 프로젝트(정적인 오브젝트)들을 렌더링하게 될 때 오브젝트의 자연스러움을 위해 그림자가 필수적으로 렌더링되는 경우가 생기게 될것이다. 적게는 몇개, 수십개의 오브젝트의 그림자 처리를 하게되면 그 수의 Mesh만큼의 그림자를 렌더링해야되기 때문에 부하가 올수밖에없다. 정적인 오브젝트에 대해서 미리 Shadow를 렌더링하는 방식으로 그림자에대한 부하를 줄일 수있을 것으로 판단된다.
'Unity' 카테고리의 다른 글
Unity Addressable Asset (3) (3) | 2024.12.29 |
---|---|
Unity Addressable Asset (2) (0) | 2024.12.27 |
Unity Addressable Asset (1) (1) | 2024.12.15 |
Unity Lighting (2) | 2024.11.28 |
Unity_Localization (3) | 2024.08.26 |