-
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으로
-
간접 조명을 계산하면
-
더 복잡하고 사실적인 씬을 만들어낼 수 있습니다.