Unity에서 조명에 대해 고려할 때는 조명을 받고 렌더링되는 아이템을 일컫는 콘텐츠와 조명을 받는 오브젝트에 영향을 미치는 씬에 있는 조명을 일컫는 컨텍스트로 나눠서 생각하면 편리합니다.
오브젝트에 조명을 비출 때는 어떤 광원이 오브젝트에 영향을 미치는지를 이해하는 것이 중요합니다. 씬에는 일반적으로 직접광, 즉 씬 주위에 배치했을 수 있는 게임 오브젝트 광원이 있습니다. 반사와 반사광 등의 간접광도 있습니다. 이러한 광원이 모두 오브젝트의 머티리얼에 영향을 미쳐 카메라로 오브젝트 표면 전체에 보이는 최종 결과가 완성됩니다.
콘텐츠와 컨텍스트를 명확하게 빨리 구분할 수 있는 것은 아닙니다. 종종 “콘텐츠”로 간주되는 것이 다른 오브젝트에는 조명 컨텍스트의 일부일 수도 있습니다.
좋은 예로, 사막 지형에 있는 건물을 들 수 있습니다. 이 건물은 스카이박스의 광원 정보를 사용합니다. 이 광원은 주위의 지면에서 반사광일 수 있습니다.
하지만 건물 외벽에 가까이 서 있는 캐릭터가 있을 수 있습니다. 이 캐릭터에게 건물은 조명 컨텍스트의 일부로, 섀도우를 캐스트하거나 벽에서 반사광을 캐릭터에게 비출 수 있습니다. 캐릭터에 반사되는 부분이 있어 건물 자체에 직접 빛을 반사할 수도 있습니다.
Unity는 시작할 때 비어 있는 씬을 표시합니다. 이 씬에는 이미 주변광, 스카이돔 기반 반사 및 방향 광원이 포함된 사용 가능한 디폴트 조명 컨텍스트가 있습니다. 이 씬에 배치되는 오브젝트는 기본적으로 씬을 제대로 표시하는 데 필요한 모든 조명이 있어야 합니다.
디폴트 조명 컨텍스트의 효과를 보기 위해 씬에 구체를 추가해 보겠습니다.
추가된 구체는 기본적으로 스탠다드 셰이더를 사용합니다. 카메라 초점을 구체에 맞추면 다음과 같은 결과가 나타납니다.
구체의 가장자리를 따라 일어나는 반사뿐만 아니라 갈색(아래)에서 하늘색(위)에 이르는 미세한 앰비언트에 주의를 기울여야 합니다. 빈 씬에서는 기본적으로 모든 조명 컨텍스트가 스카이박스와 (기본으로 씬에 추가되는)직접광에서 파생됩니다.
물론 이 구성은 디폴트이며, 경우에 따라 조명 하나와 스카이 반사만으로는 충분하지 않을 수 있습니다. 이 경우 조명과 반사 프로브를 쉽게 추가할 수 있습니다.
반사 및 라이트 프로브의 작동 방식에 대해 자세히 알아보려면 라이트 프로브 및 반사 프로브 문서를 참조하십시오.
베이크되거나 절차적인 스카이박스는 조명 구성의 중요한 일부가 될 수 있습니다. 스카이박스를 사용하여 오브젝트의 주변광과 반사를 제어하고 스카이를 렌더링할 수도 있습니다. 절차적 스카이박스를 사용하여 컬러를 직접 설정하고 비트맵을 사용하는 대신 태양면을 생성할 수 있습니다. 자세한 내용은 스카이박스 문서를 참조하십시오.
스카이박스 반사는 씬, 특히 야외 씬에 있는 여러 오브젝트에 유용할 수 있지만, 야외 씬에 골목길이나 울창한 숲처럼 어두운 영역이 있거나 실내에서 반사를 각 방에 맞춰야 하는 실내 영역이 있는 등 오브젝트가 사용하는 반사를 다양하게 바꿔야 하는 경우가 많습니다.
이처럼 다양한 반사에 요구되는 사항을 충족하기 위해, Unity에는 반사 프로브가 있습니다. 이 프로브를 통해 공간의 특정 지점에서 씬의 환경을 샘플링하여 디폴트 스카이박스 대신 해당 지점에 가까이 있는 오브젝트의 주변광과 반사 소스를 찾을 수 있습니다. 반사 프로브는 씬에서 스카이박스가 충분하거나 적절하지 않은 위치에 배치할 수 있습니다.
전역 조명은 Unity에서 필수적인 개념입니다. 스탠다드 셰이더와 Unity의 전역 조명 시스템은 모두 서로 함께 잘 작동하도록 설계되었습니다. 전역 조명 시스템은 반사광, 발광 머티리얼에서 나온 광원, 그리고 환경에서 발생한 광원의 생성 및 추적을 처리합니다. 자세한 내용은 여기를 참조하십시오.
컨텍스트는 이미지의 전체적인 모습을 결정하는 중요한 요소입니다. 이 예에서는 콘텐츠와 카메라가 그대로 있는 상태에서 씬이 컨텍스트 변화를 나타내는 방법을 볼 수 있습니다.
콘텐츠는 씬에서 렌더링되는 오브젝트를 일컫는 용어입니다. 콘텐츠의 형상은 조명 컨텍스트가 오브젝트에 적용된 머티리얼에 작용한 결과입니다.
스탠다드 셰이더를 사용하는 머티리얼을 인스펙터에서 볼 때 에디터에는 텍스처, 블렌딩 모드, 마스킹, 보조 맵 등 머티리얼에 대한 모든 파라미터가 표시됩니다. 따라서 사용된 기능을 한눈에 확인하고 머티리얼을 미리 볼 수도 있습니다. 스탠다드 셰이더는 데이터 기반입니다. Unity는 사용자가 머티리얼에 대해 설정한 설정에 필요한 셰이더 코드만 사용합니다. 즉, 머티리얼의 특징 또는 텍스처 슬롯이 사용되지 않는 경우 리소스가 소모되지 않고, 셰이더 조합이 백그라운드에서 최적화됩니다.
스탠다드 셰이더를 사용하면 여러 설정을 통해 매우 다양한 머티리얼 타입을 나타낼 수 있습니다. 텍스처 맵 또는 컬러 피커 및 슬라이더로 값을 설정할 수 있습니다. 일반적으로 메시의 어느 부분이 텍스처 맵의 어느 부분을 가리키는지 나타내려면 텍스처와 함께 V 매핑이 필요합니다. 따라서 스탠다드 셰이더 머티리얼을 스페큘러 및 평활도 맵 또는 메탈릭 맵과 함께 사용할 경우 동일 메시에 다른 머티리얼 프로퍼티를 적용할 수 있습니다. 즉, 텍스처의 해상도가 폴리곤 토폴로지를 초과할 수 있는 하나의 메시에 고무, 금속 및 목재를 생성하여 머티리얼 타입 간 경계와 전환이 부드럽게 표시되도록 할 수 있습니다. 물론 이렇게 하면 워크플로가 더 복잡해질 수 있지만, 복잡한 정도는 텍스처 생성 메서드에 따라 달라집니다.
머티리얼의 텍스처는 주로 Photoshop 같은 2D 이미지 에디터에서 페인트하고 합성하거나 3D 패키지에서 렌더링/베이크하는 두 가지 방법 중 하나로 생성됩니다. 후자의 방법에서는 알베도, 스페큘러 및 기타 맵 이외에 노멀 맵과 오클루전 맵을 생성하는 데 고해상도 모델을 이용할 수 있습니다. 이 워크플로는 사용하는 외부 패키지에 따라 다릅니다.
일반적으로 텍스처 맵에는 고유 조명(섀도우, 하이라이트 등)이 포함되면 안 됩니다. 물리 베이스 셰이딩(PBS)의 장점 중 하나는 오브젝트가 기대한 대로 광원에 반응한다는 것인데, 맵에 이미 조명 정보가 포함된 경우 불가능합니다.