조명 개요
- 현실과 마찬가지로 씬을 밝게 하는데 조명(lighting)을 사용한다.
- Unity가 3D 오브젝트의 명암(shading)을 계산하기 위해서는 해당 오브젝트에 비추는 빛의 강도, 방향, 색의 정보가 필요하다.
- 이 프로퍼티들은 Scene 내에 있는 조명(light) 오브젝트에 의해 제공된다.
조명 방법 선택
- Unity에서 조명은 동적조명(realtime lighting)과 베이크드 라이트(precomputed lighting) 이라는 두 가지 종류가 있고, 이 두가지를 조합해서 사용함으로써 scene의 조명을 보다 인상적으로 만들 수 있다.
realtime lighting(동적 조명)
- 기본적으로, Unity의 각 동적 조명에는 directional, spot, point 라는 속성이 존재한다. 해당 속성들은 매 프레임마다 실시간으로 업데이트 된다. 조명과 오브젝트가 scene 내에서 이동하면, 조명은 즉시 갱신된다.
- 동적조명은 Scene 내에서 오브젝트를 비추는 가장 기본적인 방법으로, 캐릭터같은 움직이는 사물을 비추는데 적합하다.
- Unity에서 동적 조명이 방출한 빛은, 일단 방출되면 반사되지 않는다. 보다 사실적인 Scene을 만들기 위해서는, 사전계산에 의한 조명을 사용하여 global illumination(전역 조명) 등의 기법을 사용한다.
baked lightmaps(베이크드 라이트맵)
- lightmap(Texture) 이란
- 렌더링에서 가장 무거운 요소인 조명과 그림자 연산을 실시간으로 하지 않기 위해서 미리 조명과 그림자 연산을 특정한 텍스처로 만들어 입히는 작업. 즉, 빛을 받은 것처럼 보이게하는 텍스쳐를 미리 만들어 오브젝트에 맵핑한다. 덕분에 조명 없이도 조명을 받은 것처럼 보이게 하는 것이 가능하다.
- Unity에서는 정적이고 복잡한 조명 효과를 계산하는 것이 가능하다. (전역 조명이라 불리는 기법을 사용한다.) 계산결과는, lightmap이라고 불리는 참조용 텍스쳐맵에 보존된다. 이런 계산 프로세스를 베이크(인화) 라고 부른다.
- lightmap을 베이크하면, Scene내에 있는 정적인 오브젝트로의 광원의 영향이 계산되고, 그 결과는 Scene 내의 지오메트리 상에 텍스쳐로써 오버라이드 된다. 이 과정에 의해 조명효과가 발생한다.
- 이 lightmap에는 표면을 직접적으로 비추는 직접 광선과, Scene내에 있는 다른 오브젝트나 표면으로부터 반사되어 오는 간접광선, 그리고 이 두가지를 조합해서 포함하는 것이 가능하다.
- 조명을 베이크해서 생성된 lightmap은 게임 플레이중에 변경하는 것이 불가능하다. 그렇기 때문에 정적(static) 하다고 말한다.
사전계산된 동적 전역조명 (precomputed realtime global illumination)
- 정적인 lightmap으로는 Scene 내에서의 조명을 변화시키는 것은 불가능하지만,
- precomputed realtime GI는, Scene의 복잡한 조명을 상호작용적으로(interactive) 업데이트 하는 방법을 제공한다.
- precomputed realtime GI를 사용하면, Scene내의 스태틱 메쉬 주변에 반사되는 빚을 미리 계산하는 과정을 거친 다음, 런타임에 사용하기 위해서 이 데이터를 저장한다.
참조 사이트
- http://ronniej.sfuh.tk/introduction-precomputed-realtime-gi/
- https://docs.unity3d.com/ja/current/Manual/LightingInUnity.html