Unity에서 Lighting은 어느 때보다 완전한 기능을 갖추고 있습니다.
Lighting 파이프라인에는 Realtime Global Illumination이 포함되어 있으며,
전통적인 Baked 라이트 매핑 기술도 갖추고 있음은 물론입니다.
여기에 물리 기반 렌더링과
Standard Shader가 더해져서
더 복잡한 씬을 조명하는 더 강력한 기능과 다양성이 생깁니다.
Unity는 물리 기반 렌더링, 또는 PBR을 사용해
모든 조명 조건 아래에서 머티리얼이 일관되고
사실적으로 보이게 하는 친화적인 방식을 제공합니다.
이를 위해서 Unity는 실제로 빛이 행동하는 방식을 모델화하고
물리 법칙에 따라
빛이 머티리얼과 상호작용하게 됩니다.
머티리얼은 일반적으로 Standard Shader를 이용해 생성됩니다.
Standard Shader는
물리 기반 렌더링의 사용성과 접근성을 높여줍니다.
Unity 파이프라인에서 가장 강력한 도구 중에 하나로
Unity의 Realtime Global Illumination,
또는 줄여서 GI가 있습니다.
GI를 사용하면 씬에 있는 모든 조명은
범위 내의 오브젝트에 직접 및 간접 조명으로
둘 다 영향을 미칠 수 있습니다.
직접 조명은 씬에서 오브젝트를
직접 비추는 광원에서 나옵니다.
하지만 간접 조명은
반사된 빛, 또는
씬의 반사면에서 산란된 빛입니다.
이 반사된 간접 라이트는
빛이 현실 세계에서 행동하는 양상을 모방하여
근처의 오브젝트를 비춥니다.
간접 조명은
반사면의 색으로부터 영향을 받아
표면 색의 일부를 띠게 됩니다.
직접 및 간접 조명은
한데 섞여서 훨씬 더 사실적인 모습을 만들어냅니다.
기본 Main Camera 외에도
Unity의 새로 시작하는 씬에는
기본 Skybox 및
이 Skybox와 정렬된
기본 Directional Light가 따라옵니다.
또한 각 씬에는
Ambient 라이트를 위한 기본값이 포함되어 있습니다.
Ambient 라이트는 씬에 있는 모든 면을 비춥니다.
Ambient 라이트는
Lighting 패널의 Environment Lighting 탭에서 설정하여 제어합니다.
Ambient 라이트는
Skybox를 이용하거나,
사용자가 생성한 3색 Gradient
또는 단색 Color를 사용해 생성할 수 있습니다.
씬에 추가된 모든 오브젝트는
Ambient 라이트를 받습니다.
Ambient Intensity가 0으로 지정되거나,
Ambient 라이트의 Colors 값이 검정색으로 지정되지 않는다면 말이죠.
현실의 사물이
반사율이 0인 경우는
불가능하진 않지만 드문 경우입니다.
또한 기본 설정으로 씬의 모든 오브젝트는
반사 정보를 받습니다.
씬에 있는 Cube, Sphere, Plane 등이
조명을 받지 않고 Ambient 라이트가 없어도
여전히 반사라는 형태로
라이팅 정보를 받습니다.
기본 Reflection Source는 Skybox입니다.
이것은 Custom Cubemap으로 변경할 수 있습니다.
기본 반사를 받지 않으려면
Custom Cubemap을 None으로 지정하거나
Skybox를 제거하세요.
한 가지 짚고 넘어갈 것은, 기본 Skybox는
절차적으로 생성된다는 것과,
새로운 Procedural Skybox들을
생성해서 에셋으로 저장할 수 있다는 것입니다.
Unity에서 씬에 조명을 줄 때는
Realtime 라이트,
Baked 라이트,
또는 두 가지 모두를 혼합한 방식을 사용할 수 있습니다.
Realtime 라이트는 런타임에서 더 쉽게 수정할 수 있지만,
게임 성능에 부담을 줄 수 있습니다.
반면, Baked 라이트는 훨씬 상세한
라이팅 정보를 미리 계산해서
디스크의 라이트 맵 텍스처에 저장합니다.
그런 다음 이 라이트 맵 정보를
런타임에 텍스처에서 읽어들이므로,
프로젝트를 실행하는 동안
라이팅을 계산 할 필요가 없어집니다.
그러면 성능에는 유리하지만
씬의 다이내믹한 변화를 반영할 수 없습니다.
Baked 라이트 맵은 런타임에 업데이트되지 않습니다.
라이팅은 Realtime, Baked, Mixed 라이트 사이에서
광원별로 전환할 수 있습니다.
Baked 라이트를 전적으로 사용하는 것은
성능이 낮은 편인 모바일 기기 같은
대상의 플랫폼에 더 적절할 것입니다.
라이트 매핑 시스템은
연속적으로, 혹은 요구에 따라 작동할 수있습니다.
Continuous Baking이 선택되면
편집하는 동안에 라이팅의 변화가 배경에서 베이크됩니다.
이런 변화들은
Inspector에서 조정된 속성일 수도 있고
씬에서 변경된 오브젝트일 수도 있습니다.
Continuous Baking을 선택하지 않으면
요구가 있을 때만 변화에 대한 미리보기를 할 수 있습니다.
Lighting 패널에서 Build 버튼을 선택해야 하죠.
이 씬에는 천장의 채광창을 통해 들어오는
Directional 라이트가 있습니다.
이 빛은 전체 씬의 조명에 기여하면서,
직접 비추는 표면에
반사되거나,
간접적인 방식으로 근처의 다른 표면에 반사됩니다.
이 빛은 계속해서 근처의 다른 표면을
간접적으로 비추다가
빛의 세기가 줄어들어
더 이상 산란되지 않게 됩니다.
Light의 Intensity를 줄이면
씬의 조명도 따라서 감소합니다.
마찬가지로, Directional 라이트를
회전시켜
씬의 다른 부분을 직접 비추게 돌리면
이제 다른 방향에서
직접 조명과 간접 조명 둘 다를 이용해 씬을 비추게될 것입니다.
Standard Shader로 생성한 Materials는
광범위한 범주의 물리적 표면을 모방할 수 있고
Materials마다 반사도가
달라지기 때문에
이것은 씬의 조명에 영향을 줄 수 있습니다.
이것의 밸런스를 맞추기 위해 Bounce Intensity를
광원별로 조정하거나,
또는 라이팅 패널에서 설정을
변경하여 전체적으로 조정할 수 있습니다.
여기서 이루어지는 조정은
빛을 받은 표면의 빛의 잠재적 산란을 인위적으로 변경합니다.
씬에서 Indirect Intensity를
조정할 수도 있습니다.
광원 외에도 Emissive Surface를 이용해
씬 라이팅에 기여할 수도 있습니다.
이 씬에는 다양한 라이트와 라이트 유형이 있는데,
그 중에는 Emissive Surface가 포함되어 있습니다.
Emissive Surface는 광원이지만
마치 간접 산란 조명처럼 작용합니다.
씬에서 주요한 Emissive Surface는
주 통로 연결부에 있습니다.
하지만 씬 곳곳에 추가적인 패널들이 위치합니다.
이 모든 Emissive Surface는
Standard Shader의 Emission 속성에서
Emission 스케일을 조정해서 사용합니다.
Emission 속성 옆의 부동소수점형 값이죠.
그리고 색채를 추가해 주면
씬의 분위기가 달라집니다.
이 모든 조명들이 실시간 라이트 매핑에 참여할 수 있으므로
이들은 코드나 애니메이션을 이용해
런타임에서 제어할 수 있고
프로젝트가 실행되는 동안
복잡한 분위기 변화를 만들어냅니다.
Unity 씬의 조명에 기여하는 마지막 요소는
Probes입니다.
Unity에는 두 가지 타입의 프로브가 있습니다.
Light Probes와
Reflection Probes입니다.
Light Probes는 씬에서
월드 안의 여러 다른 위치에서 씬의 조명을 샘플링합니다.
이 Probes 안의 정보를 사용해
씬의 다이내믹 요소, 즉
캐릭터나 이동 오브젝트 같은 요소를 비추는 데
사용할 수 있으며 성능에 큰 부담을 주지 않습니다.
반면, Reflection Probes는
반사를 계산하는
단일 기준점으로 작용합니다.
각 Reflection Probes는
하나의 직육면체로,
무엇이 반사 안에 포함될 것인지 지정합니다.
프로브들은
Box Projection을 이용해 주변을 둘러싼 요소들을 샘플링하고
그 정보를 Cubemap에 보관합니다.
반사면을 가진 Materials
즉, Reflection Probes 부피 안에 있는 오브젝트의 Materials는
이 Cubemap을 기준으로
반사 표면을 생성할 수 있습니다.
기본적으로 각 씬에는 내장된
Reflection Probes가 하나씩 있습니다.
이 기본 Reflection Probes는
Skybox를 반사하여 기본적인 반사를 만들어냅니다.
더 자세한 반사를 위해서는
추가적인 Reflection Probes가
추가되어 반사 오브젝트에 맞게
적절하게 위치되어야 합니다.
하나 짚고 넘어갈 것은, 물리 기반 렌더링은
Linear Color Space에서 가장 잘 작동한다는 점입니다.
Linear Color Space는 더 사실적이고
수학적으로 올바른 결과를 제공합니다.
최상의 결과를 얻으려면
Project Settings의 Player 설정 창에서
Color Space가 Linear로
설정되었는지 확인하시기 바랍니다.
Linear Color Space는 기본 설정입니다.
하지만 모든 플랫폼이
Linear Color Space를 지원하는 것은 아닙니다.
그리고 Gamma는 현재 대부분의 모바일 플랫폼에서
요구하는 색상 공간이기도 합니다.
Unity에서 씬의 조명과 관련된
모든 측면을 살펴볼 때
다음을 주요한 기여 요소로
요약할 수 있을 것 같습니다.
Ambient 라이트,
반사
그리고 광원입니다.
Standard Shader로
생성한 Materials를
물리 기반 렌더링을 사용해 표현하고
Global Illumination으로
간접 조명을 계산하면
더 복잡하고 사실적인 씬을 만들어낼 수 있습니다.