3D 공간 상에서 빛을 표현하는 그 자체에 대한 방법, 알고리즘을 나타내는 개념.
Direct / Indirect 는 이를 이루는 굉장히 기초적인 개념에 대한 설명.
실제로 Unity 안에서는 빛을 표현하는 방법이 다음과 같이 나누어짐.
Light Component in GameObject : Scene 상에 배치되며, 광원으로서의 역할을 수행. Component 내부 Property 를 바꿈에 따라, 광원의 Type 및 기타 설정을 바꿀 수 있음.
Realtime : 매 프레임마다 광원 계산하여 빛을 반영하는 방법. 매 프레임마다 물체의 밝기 및 그림자를 조정함.
Bake : 유니티가 Lighting Value를 고려하여 Rendering 한 결과를, 맵 위에 입힐 수 있는 큰 Texture로서 만든 다음에, 이를 오브젝트 위에 입히는 것으로서 빛을 반영하는 방법. 처음 한번만 렌더링하며, 렌더링한 결과는 더 이상의 연산을 필요로하지 않으므로, 높은 퀄리티를 얻을 수 있다.
이를 간단하게 정리하면 다음과 같다.
정말 간단해 보인다.
그런데, 이 각각의 요소 안에 내부적으로 들어있는 굉~장히 많은 Property 들과.
이를 활용하여 내가 원하는 Lighting 의 방향을 구현하는 것, 이끌어내는 것이 문제다.
이를 각각 살펴보자.
빛의 색을 결정
빛의 세기
간접광의 세기 // 간접 간접광에 영향을 미침.
그림자의 성격을 결정함.
빛을 방해할 녀석을 설정. 구름을 등의 Texture 를 입혀준다고 생각하면 됨.
후광 설정. 주변에 후광을 비칠지 말지를 설정 (Point 등에서 의미가 있음.)
카메라로 태양을 바라볼 때, 생기게 되는 Flare 현상을 넣을 수 있음.
Camera 로 태양을 보면, Lens Flare 처럼 빛을 발산하는 효과를 넣음.
(Texture 넣어서 모양 결정할 수 있음.)
Important 선택하면 조명 품질이 좋아짐.
Not Important 는 중요하지 않은 광원 대충 처리.
특정 Layer 를 비출지 안 비출지. (조명의 영향을 받을 Layer 를 고르는 것.)
Bake(Lightmap) 에 관한 설정을 담당.
Bake(Lightmap) 해주는 기술을 결정 : Enlighten / Progressive이 존재.
Progressive를 추천함. (실시간으로 Rendering 되는 걸 보여주고, 더 신기술.)
현재 보고 있는 부분을 우선적으로 Rendering 하는 것을 결정.
직접광과 반사광에서 작용하는 퀄리티를 결정.
반사광이 튕기는 개수, 노이즈에 관여.
단위당 Texture 개수. Bake 된 Texture의 실질적인 해상도를 결정
512 : Size 크기
인접한 두 오브젝트 사이에 있는 Shadow 다.
Lightmap Setting 에 있는 이 수치를 낮춤으로서 해당 내용 또한 조정할 수 있다.
Light Map 의 Texture 에 대한 압축을 지원한다. 이 경우, Light Map 의 품질은 조금 떨어질 수 있지만, 용량이 확 줄어들게 된다.
반사광의 세기이다.
반사광 / 간접광에 대해 세기와, 튀어나온 간접광의 개수.
3D Object 의 Import 창에 떠 있는 성질로, 우리가 해당 오브젝트가 LightMapUV 를 가지고 있음을 체크해줄 수 있다. 이를 체크해줄 경우, Unity 가 자동으로 해당 Object 의 Light Map UV 를 연산하고 설정할 수 있다.
물체의 UV 등으로 인해 Light 의 연산에서 다음과 같이 일자로 선이 가 있는 것을 없애줄 수 있는 방법.
해당 현상을 Bleeding 이라고 한다. 이를 해결하기 위해서는 LightMap pedding이나 Lightmap Resolution 을 조정하면 된다.
너가 지금 가지고있는 씬이 너무 어둡다면, Indirect Intensity를 늘리거나, Albedo Boost 를 높임으로서 조정할 수 있다.
이는 Post Processing 의 기술과 관련되어 있다. 우리의 LIght 에 Glow를 더할 수 있는 방법 또한 소개하는데, Glowing Helo System 을 사용하고자 한다.
Post Processing 을 더하고, Bloom 을 선택하여, Camera가 빛에 대해 가질 Effect를 조정하자.
Window > Lighting > Scene Section
Enable Auto Generate (to generate lighting data)
=> 이걸 하고 나면, Scene 은 Skybox의 ambient color 를 사용하며, black shadow 가 없어진다. (어둡던 게 엄청 밝아짐)
Project Setting > Player > Other Setting > Color Space - Linear
Color 가 좀 더 사실적으로 만들어진다.
Quality Setting 에서 Quality 를 ultra 로 설정한다.
Shadow 를 Hard and Soft Shadows 와 Shadow Resolution 을 Very High Resolution 으로 설정한다.
Light Probes provide a way to capture and use information about light that is passing through the empty space in your scene.
Light Probe 는 빛에 대한 정보 - 내 씬에서 통과하고 있는 빛 - 를 캡쳐하고 사용하는 방법을 제공한다.
라이트 프로브는 라이트맵과 마찬가지로 “베이크된” 조명 정보를 씬에 저장한다.
라이트맵은 씬의 표면에 닿는 광원에 대한 조명 정보를 저장하지만 라이트 프로브는 씬의 빈 공간을 지나가는 광원에 대한 정보를 저장한다는 점에서 차이가 있다.
Light Probes are positions in the scene where the light is measured (probed) during the bake.
Light Probe는 씬 안에 있는 위치들인데, bake 되는 동안 해당 위치에 어떤 빛이 지나가는지가 측정된 위치들이다. 런타임 시점에 동적 게임 오브젝트에 닿는 간접광은 해당 오브젝트와 가장 가까운 라이트 프로브의 값을 사용하여 근사화된다.
(해당 위치를 지나가는 베이크 된 빛 정보가 Light Probe 에 저장. 이는 Runtime 중 물체의 간접광을 표시할 때 사용.)
씬에 라이트 프로브를 배치하려면 Light Probe Group 컴포넌트가 연결된 게임 오브젝트를 사용해야 한다.
메뉴에서 Component > Rendering > Light Probe Group 으로 이동하여 Light Probe Group 컴포넌트를 추가할 수 있다.
Light Probe Group 을 활용한 Light Probe 배치 / Light Probe Group 내 컴포넌트 등과 관련해서는 링크 에 내용이 나와있으므로 참고할 것.
LightMapping 이 깨지는 문제가 발생함에 따라 해결 방향 모색.
라이트매핑 깨짐 문제 링크를 살펴보면, 보통 모델링이나 머테리얼에 문제가 있는 것이라고 함. 다음 방법을 시도해보려 함.
1. 모델링의 Generate Lightmap UVs옵션을 활성화 후 Lightmap UVs Setting에서 Pack Margin을 조절
2. Material의 Double Sided Global illumination을 활성화
1번 방법의 시도에서 잘 먹혔음. Generate Lightmap UVs를 활성화 하였고, Pack Margin의 경우, Margin Method에 따라 달라졌는데, 현재 버젼은 Calculate 가 기본인 것을 확인함.
잘 적용된 것을 확인할 수 있었음.
Q. Generate Lightmap UVs 의 Margin Method란 무엇인가?
A. Margin Method 란, UV island 사이의 빛 번짐(bleeding of light)을 줄이거나 없애기 위해서, UV island 주변의 패딩 또는 마진을 조정하기 위해 Unity에서 사용하는 기법이다.
(Light bleeding은 UV island의 빛이 인접한 UV island로 흘러넘쳐 최종 조명 결과에 이음새나 아티팩트를 유발할 때 발생한다)Margin Method는 두 가지 방법을 지니는데,
1) "Calculate" method는 Unity에서 라이트맵 UV를 자동으로 생성하는 방법이다. Unity는 메시의 모양과 크기, 사용자가 지정한 패딩 또는 마진 세팅을 기반으로 UV 좌표를 자동으로 계산한다.
2) "Manual (수동)" method는 라이트맵 UV를 생성하는 더 정밀하고 커스터마이징이 가능한 방법이다. Unity에 내장된 UV 에디터나 Maya 또는 Blender와 같은 외부 프로그램을 사용하여 메시의 각 버텍스에 대한 UV 좌표를 수동으로 생성하고 조정할 수 있으며, 복잡한 물체에 대해 더 높은 퀄리티를 보장할 수 있다.