Search Unity

Spotlight Team 베스트 프랙티스: Unity에서 생생한 비주얼 구현하기

, 3월 9, 2018

저는 Spotlight Team의 구성원으로서 운 좋게도 매우 흥미로운 여러 프로젝트에 참여할 수 있었습니다. 유니티의 Spotlight Team은 고객과 협력하여 게임 프로젝트를 진행하며, 팀에서 제가 맡은 주요 역할 중 하나는 개발자가 자신의 프로젝트에서 원하는 비주얼과 품질을 달성하도록 지원하는 것입니다. 덕분에 게임 업계 곳곳에서 많은 이야기를 듣고, 콘텐츠 제작자가 직면하게 되는 공통적인 문제를 파악할 수 있었습니다. 제가 담당한 몇몇 프로젝트는 매우 사실적인 비주얼을 구현하는 것을 목표로 삼기도 했습니다. 프로젝트의 아트 콘텐츠를 고려할 때, 과연 어떻게 하면 Unity에서 실제처럼 생생한 씬을 구현해낼 수 있을까요?

이를 위해 다루어야 하는 주제는 아주 많지만, 이 포스트에서는 특별히 조명과 렌더 설정에 관해 이야기하고자 합니다. 포스트 후반부에서는 Spotlight 터널 샘플 씬을 공유하여, 어떻게 이 샘플 씬을 활용할 수 있는지 설명하겠습니다.

Unity 렌더 설정 준비

현실 세계를 사실적으로 옮기는 데 Unity의 렌더링 기능을 어떻게 활용할 수 있는지 이해하면, 프로젝트의 비주얼 구현 목표를 달성하는 데 도움이 될 것입니다.

리니어 렌더링(Linear Rendering) 모드
간단하게 말하면 이 모드에서는 최종 결과물을 모니터에 가장 적합한 포맷으로 변환하기 전에, Unity가 물리적으로 정확한 수학 연산을 사용하여 조명 및 셰이딩 계산을 수행하도록 설정합니다.

감마 또는 리니어 워크플로를 지정하려면,
편집(Edit) > 프로젝트 설정(Project Settings) > 플레이어(Player)에서 플레이어 설정(Player Settings) 창을 엽니다.
그런 다음 기타 설정(Other Settings) > 렌더링(Rendering)에서 색 공간(Color Space)리니어(Linear)로 변경합니다.

일반적으로, 하드웨어 제한이 없다면 감마 색 공간은 피하는 것이 좋습니다. 감마 색 공간은 추후 유니티에서 제외될 예정입니다. 색 공간 지정은 셰이딩과 조명의 최종 결과물에 아주 큰 영향을 주기 때문에 프로젝트에서 가장 먼저 결정해야 할 사항 중 하나입니다.

렌더링(Rendering) 모드
Spotlight 터널 샘플 씬에서는 디퍼드 렌더링 경로가 사용됩니다. 콘텐츠 제작자는 이 렌더링 경로를 통해 Unity 2017 이상 버전에서 다중 반사 큐브맵으로 결합된 여러 개의 동적 광원을 효과적으로 활용할 수 있으며, 기존의 스크린 공간 반사(Screen Space Reflection) 기능을 사용할 수 있습니다.

그래픽 설정(Graphic Settings) > 렌더링 경로(Rendering Path) 또는 카메라(Camera) > 렌더링 경로(Rendering Path)에서 디퍼드 렌더링 경로를 설정하세요.

렌더 모드에 대한 자세한 내용은 Unity 문서고에서 해당 문서를 참조하세요.

HDR 카메라(High Dynamic Range Camera)
콘텐츠 제작자는 현실처럼 생생하게 보이는 조명을 렌더링할 때 밝기가 1보다 큰(HDR) 이미시브 표면과 조명값을 다루게 됩니다. 이러한 값은 적절한 스크린 범위로 리매핑할 필요가 있습니다(이 작업을 “톤 매핑”이라고 부름). 이 설정은 Unity 카메라가 이와 같이 높은 값을 처리하고 클립하지 않도록 하는 데 매우 중요합니다.

위와 같이 설정하려면 씬에서 메인 카메라를 선택하고, 선택한 카메라에 대해 인스펙터(Inspector) 탭에서 HDR을 체크했는지 확인합니다.

HDR 라이트맵 인코딩(HDR Lightmap encoding) (선택 사항)
Spotlight 터널 샘플 씬에서는 베이크된 조명을 사용하지 않았습니다. 하지만 만약 베이크된 HDR 조명을 사용할 계획이라면, 베이크된 조명이 일관성 있게 적용되도록 라이트맵 인코딩을 HDR 라이트맵으로 설정하는 것이 좋습니다.
이 옵션은 편집(Edit) > 프로젝트(Project) > 플레이어 설정(Player settings) > 기타 설정(Other settings) > 라이트맵 인코딩(Lightmap encoding)에서 설정할 수 있습니다(Unity 2017.3 이상 버전에서만 가능).
라이트맵 인코딩에 대한 자세한 내용은 매뉴얼에서 확인하실 수 있습니다.

톤 매퍼(Tonemapper)를 씬에 활용(포스트 프로세싱 스택(Post Processing Stack)의 일부)
HDR 조명을 제대로 표시하려면 프로젝트에서 톤 매퍼(Tonemapper)를 사용해야 합니다.
먼저 에셋 스토어에서 Unity 포스트 프로세싱 스택(버전 1)을 설치하세요.

프로젝트에서 포스트 프로세스 프로필 에셋(Post Process Profile Asset)을 생성하고 다음과 같이 설정합니다.

  • 컬러 보정(Color Grading) > 톤 매퍼(Tonemapper) > ACES(아카데미 컬러 인코딩 표준; Academy Color Encoding Standards)를 활성화합니다.
  • 디더링(Dithering)을 활성화합니다. 디더링을 사용하면 HDR 씬으로부터 채널당 8비트 출력으로 인해 나타나는 줄무늬를 씬에서 완화할 수 있습니다. 최신 엔진에서는 16M 컬러 출력 제한을 우회하기 위해 이 기법을 이용합니다. 톤 매퍼(Tonemapper)의 나머지 설정은 일단 그대로 유지합니다.
  • “메인 카메라(Main Camera)”를 선택하고 Post Processing Behaviour 컴포넌트를 추가합니다.
  • 이전에 생성한 포스트 프로세스 프로필을 프로필 슬롯에 할당합니다. 포스트 프로세싱 스택 버전 2(Post Processing Stack Version 2)를 사용하려면, 현재 베타 버전으로 제공되고 있으므로 패키지의 readme 파일을 참고하시기 바랍니다.
  • 뷰포트에 이미지 효과(Image effect)를 활성화합니다.
    이 설정을 사용하면 씬 뷰(Scene view)에서 작업하는 동안 항상 톤 매퍼(Tonemapper)를 확인할 수 있습니다.

톤 매핑을 사용한 씬에서 하이라이트 표시 및 어두운 터널 값 분리 개선 효과를 확인해보세요. 톤 매핑을 사용하지 않은 씬에서는 하이라이트가 통일된 컬러로 수렴되지 않았음을 확인할 수 있습니다(위 경우 노란색으로 타오르는 태양).

이 설정은 기본적으로 디지털 카메라가 고정 노출로 씬을 캡처하는 방식을 (노출 적응/시각 적응 기능을 사용하지 않고) 모사하려는 시도입니다.

여기까지 진행하면 콘텐츠 제작자는 다양한 콘텐츠에서 실제와 같은 결과를 얻을 수 있는 적절한 기본 씬 렌더링 설정을 마치게 됩니다.

조명 및 설정

유니티는 매우 다양한 조명 전략/시스템 및 프로젝트 시나리오의 요구를 충족할 수 있습니다. 각 옵션을 모두 이해하려면 조명 모드 및 설정에 관한 유니티의 광범위한 문서고를 확인하시기 바랍니다.

빠른 반복과 간편한 처리를 위해 시각적 결과물을 바로 확인할 필요가 있습니다.
이에 따라 Spotlight 터널 샘플 씬은 실시간 전역 조명(Realtime Global Illumination)과 함께 실시간 조명을 사용하고 있습니다. 이를 통해 넓은 범위의 스페큘러 반응과 우수한 바운스 조명을 활용할 수 있으며, 즉석에서 광원을 바꿀 수도 있습니다.

실시간 GI + 라이트 프로브를 활용한 실시간 조명


조명 자체로 돌아가서, 실외 영역을 포함한 낮 시간의 일반적인 씬은 다음 3가지의 조명 컴포넌트로 세분화할 수 있습니다.

  1. 반구(하늘 빛이 미치는 영향)
  2. 직접광(태양 + 로컬 광원)
  3. 간접 조명(GI 조명)

이 단계에서 콘텐츠 제작자는 적절하게 텍스처 처리된 메시와 조합된 씬을 가질 것입니다.

실외 조명 및 설정

초기 반구 조명(Initial Hemisphere lighting)
실외 조명의 첫 번째 컴포넌트는 유니티에서 환경 조명(Environment Lighting)이라고 지칭하는 반구 조명입니다. 반구 조명은 스카이 라이트의 다른 표현이기도 합니다. 밤 하늘은 영향이 최소인 반면, 낮 시간의 하늘은 매우 밝으므로 영향을 크게 미칩니다. 반구 조명은 조명(Lighting) 탭(창(Window) > 조명(Lighting) > 설정(Settings) > 환경(Environment))에서 설정하실 수 있습니다.
먼저 HDRI 큐브맵 대신 절차적 스카이박스 머티리얼을 선택합니다. 프로젝트에서 새 머티리얼을 생성하고 SkyMaterial이라고 이름을 지정한 다음, 스카이박스(Skybox)/절차적(Procedural)으로 설정합니다.


조명(Lighting) 탭 > 씬(Scene)에서 해당 머티리얼을 환경 스카이박스 머티리얼(Environment Skybox Material)에 할당합니다.

이 시점에서 씬은 조금 환해진 상태입니다. 은은하지만, 완전히 명확하지는 않은 반구 조명이 있습니다. 지금은 일단 이 상태로 두겠습니다.

방향광(Directional Light)
일반적인 햇빛이나 달빛은 거리가 무한에 가깝고 병렬 광원 방향 및 그림자가 있는 광원입니다. 또한 햇빛이나 달빛은 보통 방향광으로 표시됩니다.

간접 조명(Indirect Illumination)/전역 조명(Global Illumination)
방향광과 주변광만으로는 실제와 같은 조명을 만들어낼 수 없습니다. 반구 조명을 제대로 표현하려면 스카이 라이트 조명의 오클루전이 필요합니다. 또한 씬의 물체에서 반사되는 태양광을 시뮬레이션할 필요도 있습니다. 하늘은 현재 단일 컬러 값을 씬에 렌더링하여 수평으로 만들고 있습니다. 바로 여기에서 오클루전과 간접 바운스 조명을 계산하기 위해 실시간 전역 조명 또는 베이크된 조명이 필요합니다. 다음 과정에 따라 이를 구현할 수 있습니다.

  • 실시간 GI 또는 베이크된 GI에 영향을 미쳐야 하는 모든 메시가 라이트맵 정적 활성화(Enable Lightmap Static) 및 반사 프로브 정적(Reflection Probe Static)으로 설정되도록 합니다. 일반적으로 이러한 메시는 크기가 큰 정적 메시일 수 있습니다.
  • 다음으로, 조명(Lighting) 탭 > 씬(Scene) > 실시간 조명(Realtime Lighting)에서 실시간 전역 조명(Realtime Global Illumination)을 활성화합니다(기본적으로 중간 설정 유지).
  • 조명 생성(Generate Lighting)을 누르거나 자동 생성(Auto Generate)에 체크합니다.

조명 생성을 마친 후 이제 씬은 어두워졌습니다. 설상가상으로 씬의 일부 요소가 자연스럽지 않습니다. 트램과 배경의 문을 보세요.
씬의 정적 오브젝트에는 현재 반구 및 방향광으로부터의 간접 바운스 리스폰스에 대해 적절한 오클루전이 있지만 나머지 오브젝트에는 적절한 조명 설정이 없습니다.

라이트 프로브(Light Probe) 및 반사 프로브(Reflection Probe)
동적 오브젝트 또는 라이트맵을 사용하지 않는 오브젝트가 실시간/베이크된 전역 조명을 받으려면 씬에 라이트 프로브가 배치되어 있어야 합니다. 씬에서 라이트 프로브 그룹이 동적으로 빛을 받는 오브젝트가 위치하거나 지나가는(예: 플레이어) 영역 가까이에 효율적으로 배치되도록 합니다. 자세한 내용은 매뉴얼의 라이트 프로브 그룹을 참조하세요.
조명 생성(Generate Lighting)을 다시 누르거나, 자동 생성(Auto Generate)이 체크된 경우 사전 계산이 완료될 때까지 기다립니다.

이제 트램 및 배경의 문이 조금 더 실제와 비슷하게 표현되었지만 반사가 어색하게 보입니다. 하늘에서 반사된 빛이 사방에 분포되어 있고 터널 내부에도 나타납니다. 바로 여기에서 반사 프로브를 활용하면 됩니다. 반사 프로브를 필요에 따라 적절하게 사용하여 효과적으로 씬에 배치하세요. 상기 씬에서는 메인 룸에 반사 프로브가 1개, 각 터널 내부에 2개만 있으면 됩니다.
박스 투영을 사용하는 128픽셀 큐브맵 해상도(Cubemap Resolution)는 일반적인 사례에서 좋은 베이스라인이 됩니다. 이제 메모리 및 반사 베이크 시간이 적절하게 유지될 것입니다.
반사 프로브에 대한 자세한 정보는 여기를 참조하세요.
씬은 이제 적절한 사실감과 일관성을 갖추게 되었으며 이는 실제와 같은 씬을 만드는 데 중요한 부분입니다. 그렇지만 전체적으로 이전보다 훨씬 더 어두워져서 실제와 비슷한 품질과는 차이가 커 보입니다.

HDR 조명값(HDR Lighting Value)
많은 콘텐츠 제작자들이 현실에서는 반구 조명 및 태양광이 매우 밝은 광원이라는 점을 깨닫지 못합니다. 반구 조명과 태양광은 밝기 값 1보다 훨씬 밝습니다. 이 부분에서 HDR 조명을 사용하면 됩니다.

우선 방향광을 끄고 스카이머티리얼 노출(SkyMaterial Exposure)을 16으로 설정합니다.
이렇게 하면 적절한 반구 조명이 씬에 어떤 영향을 주는지 이해할 수 있습니다.

점점 실제와 비슷하게 보이기 시작합니다. 이 상태를 하늘에서 햇빛이 완전히 산란되는 흐린 날이어서 방향광이 없는 때로 생각해보세요.

이 시점에서 이제 훨씬 더 큰 값으로 태양광을 씬에 다시 도입할 수 있습니다. 먼저 강도 5를 적용합니다. 태양이 거의 하얗게 보이기는 하지만, 강한 햇빛으로부터 발생하는 간접 컬러의 영향이 씬의 시각적 느낌을 크게 바꿀 수 있으므로 방향광 컬러의 적절한 선택이 중요합니다.

이제 처음에 원했던 대로 태양(방향광)이 고에너지 광원처럼 보입니다. 이 시점에서 씬은 실제와 꽤 비슷하게 보입니다.

스크린 공간 앰비언트 오클루전(Screen Space Ambient Occlusion, SSAO) 및 스크린 공간 반사(Screen Space Reflection, SSR)
이제 씬 조명 품질이 꽤 우수하다고 볼 수 있지만 몇 가지 세부사항을 씬에 추가해서 품질을 더 높일 수 있습니다. 일반적으로 실시간 GI에 설정된 해상도 제한이 있으므로, 합리적인 성능을 내기 위해서는 상세 오클루전을 베이킹할 수 없습니다. 바로 여기에서 스크린 공간 앰비언트 오클루전(Screen Space Ambient Occlusion)이 도움이 될 수 있습니다. 앰비언트 오클루전 아래 포스트 프로세스 프로필(Post Process Profile)에서 SSAO를 활성화합니다. 이 예시에서는 빛의 강도(Intensity)를 0.5, 반지름(Radius)을 1, 다운샘플링(Downsampling)을 적용한 중간(Medium) 샘플 수, 앰비언트 전용(Ambient Only)으로 체크하여 시작합니다.

SSAO가 추가 주변광 오클루전을 처리하게 되지만, 반사에 있어 기본적인 반사 프로브에 추가로 정확성이 더 개선된다면 좋을 것입니다.
이때 스크린 공간 레이트레이스 반사(Screen Space Raytraced Reflection)를 활용하면 됩니다. 포스트 프로세스 프로필(Post Process Profile)에서 스크린 공간 반사(Screen Space Reflection)를 활성화하세요.

SSR이 스크린상의 오브젝트에 대해 더 정확한 반사를 씬에 제공하므로 젖은 트랙의 좌측에서 더 이상 밝은 반사가 렌더링되지 않는 것을 보실 수 있습니다. 이 두 가지 포스트 프로세스 효과를 모두 사용하면 런타임에 성능 비용이 발생하므로, 현명하게 선택하여 활성화하고 런타임 성능 제약 내에서 품질 설정을 지정하시기 바랍니다.

포그(Fog)
이 단계에서 콘텐츠 제작자는 고정 노출에서 어느 정도 실제와 같은 실외 및 실내 값 분리에 성공한 상태입니다. 이제 어두운 실내 공간에서 반사를 어둑하고 흐린 값이 아니라 강한 하이라이트로 볼 수 있습니다.

그렇지만, 강한 원근 요소에도 불구하고 씬 전경 요소 및 배경 요소가 잘 드러나지 않습니다. 이때 미세한 포그를 사용하면 씬에 깊이를 더해 큰 차이를 만들어낼 수 있습니다.

포그가 없는 씬과 비교할 때 전경의 난간이 더 선명해진 것을 확인해보세요.
포그는 조명(Lighting) 탭 > 씬(Scene) > 기타 설정(Other Settings)에서 활성화할 수 있습니다. 여기에서는 포그 컬러 #6D6B4EFF로, 밀도 0.025의 지수(Exponential) 포그가 활성화되어 있습니다. Unity 2017에서 디퍼드 렌더링(Deferred Rendering)을 수행할 경우, 포그가 자동으로 활성화되어 있지 않으면 포스트 프로세스 프로필(Post Process Profile)에서 포그를 활성화해야 할 수도 있습니다.

실내 및 로컬 조명

스폿 광원(Spotlight)/점 광원(Pointlight)
실시간 로컬 조명의 기본은 스폿 광원과 점 광원입니다. 2018.1 베타 버전에서 도입된 HD 스크립터블 렌더 파이프라인(HD Scriptable Render Pipeline, HD SRP)을 사용하고 있지 않은 경우, 면 광원(Area Lighting)은 조명 베이킹 시에만 사용할 수 있습니다. 새로운 면 광원은 HD SRP 모드에서 실시간으로 렌더링할 수 있습니다.

기본적으로 이 두 가지 타입의 광원은 공간의 한 지점으로부터 빛을 발산하며 범위 제한이 있습니다(스폿 광원은 각도에 따라 추가 제한 있음). 조명에 대한 자세한 내용은 Unity 문서고의 관련 섹션을 참조하세요.

두 광원의 큰 차이점은 그림자를 드리우고 쿠키와 상호작용하는 방식과 관련되어 있습니다. 점 광원으로 그림자를 적용하려면 스폿 광원의 단일 섀도우 맵과 달리 6개의 섀도우 맵이 필요합니다. 따라서 그림자를 드리우는 점 광원은 훨씬 더 비용이 많이 들기 때문에 매우 드물게 사용해야 합니다.

참고: 베이크된 광원을 사용할 경우 이 문제를 걱정할 필요가 없습니다.
또 다른 차이점은 스폿 광원의 쿠키 텍스처는 기본적이고 간단한 2D 텍스처인 반면, 점 광원에는 보통 3D 소프트웨어에서 제작된 큐브맵이 필요하다는 점입니다.

광원의 컬러 및 강도
각 광원에 적절한 컬러와 강도를 선택할 때 만족스러운 결과를 얻기 위해서는 몇 가지 가이드라인을 따를 필요가 있습니다.

실내 광원에 대해 강도를 선택할 때는 어떤 실내 광원도 태양보다 강도가 더 커지지 않도록 합니다. 씬에 따라서 불균등한 비주얼이 연출될 수 있습니다.

이 샘플 씬 설정에서 보면 천장에서 비추는 고강도 광원이 낮 시간의 밝기를 초과할 가능성은 매우 낮습니다.

컬러를 선택할 때는 배제되는 컬러 채널이 없도록 합니다. 이 경우 하얀 점으로 모이는 문제가 있는 광원이 생성됩니다.

이는 기술적으로는 유효한 광원 컬러지만, 좌측 이미지의 광원 컬러는 최종 결과물에서 모든 파란색을 제거합니다. 특히 나중에 컬러 보정을 하려면 씬에 제한된 최종 컬러 팔레트를 베이스라인으로 보유하는 것은 별로 좋은 생각이 아닙니다.

이미시브 표면(Emissive Surfaces)
Unity에서 이미시브 표면은 실시간 GI 또는 베이크된 GI가 활성화된 경우 면 광원 효과를 제공하며 조명에 영향을 미칠 수 있습니다. 특히 실시간 GI가 활성화된 경우 유용합니다. 콘텐츠 제작자는 이미시브 표면의 강도와 컬러를 변경할 수 있으며, 사전 계산이 미리 완료되었다고 가정하면 즉시 확인할 수 있습니다.

상기 이미지는 천장의 메시로부터 은은하게 퍼지는 조명을 잘 보여 줍니다.

샘플 프로젝트 파일

유니티 샌프란시스코의 Spotlight Team은 콘텐츠 제작자가 직접 학습하고 실험해 볼 수 있도록 Spotlight 터널 샘플 씬을 제작했습니다.

여기에서 Spotlight 터널 샘플 프로젝트 파일을 다운로드할 수 있습니다.

폴더에 샘플 프로젝트의 압축을 푼 다음, Unity에서 열면 됩니다.

Spotlight 터널 프로젝트는 Unity 2017.1.0f3으로 제작되었습니다.

버전에 따라 호환되지 않는 조명 데이터 포맷이 있을 수 있으므로 이 프로젝트를 더 최신 버전의 Unity에서 열려면 조명을 다시 빌드해야 합니다.

이 프로젝트에 제공된 모든 에셋은 Unity Engine으로 개발된 프로젝트에서만 사용할 수 있습니다.

앞에서 언급했듯이 실제처럼 보이는 비주얼을 제작하기 위해 알아야 할 내용이 더 많이 있습니다. 이 튜토리얼에서 이 주제에 관해 더 자세히 학습하실 수 있습니다. Unity 문서고에 전체 베스트 프랙티스 가이드도 추가될 예정입니다. 다음 소식도 기대해 주세요!

이제 여러분이 한계에 도전해 보세요.

Unity에서 실제처럼 생생한 비주얼을 구현하려는 콘텐츠 제작자에게 이 블로그 포스트가 도움이 되었기를 바랍니다. Unity 콘텐츠 제작자 여러분의 멋진 작품을 기대하겠습니다.

24 코멘트

코멘트 구독

코멘트를 달 수 없습니다.

  1. Ignis Incendio

    3월 20, 2018 7:06 오후

    Hey there! I’m trying to apply the concepts I’ve learned here to an outdoors scene, but the sun and ambient light always seems too bright, filling the screen with white, if a brightness value of more than 1 is used. The only way I’ve been able to get it back down to believable levels is to use Eye Adaptation + Tonemapping (ACES). Is that what I’m supposed to do, or am I doing something wrong? Thank you!

    1. You certainly need Tonemapping.
      What happened is that the lighting energy is correct, however the exposure in this scene is fixed and not set for outdoor open area.
      I’m guessing if you set your exposure in your exterior scene to be around -3 in Color Grading tab, the lighting would be more acceptable. Eye adaptation certainly can come in handy if you have to traverse for complete open and interior scene such as the SpotlightTunnel Scene.
      In the article, eye adaptation is purposely not explored because of the need to understand and tier the scene lightings in EV Zones.
      That would be another topic that I would like to write sometime in the future if time allowed.
      Hope this helps.

      1. Ignis Incendio

        3월 21, 2018 7:18 오전

        Thank you, that helps a lot!

    1. Thank you for reading the lighting strategy part of the tutorial.
      Lighting strategy often get overlooked and it can mean a difference in fitting your game performance in the target hardware with minimum visual quality compromise.
      There are more lighting strategy that can be done in Unity not mentioned in that tutorial, especially in baking setup to maximize performance with different quality trade off.

  2. This should be the default rendered set on every Unity project. As soon as you create a project as the user if he’s making HD/Console/Desktop project or Mobile project and tune all this settings on automatically. It will make Unity more “out of the box” and gave users better instant look and feeling.

    1. it is, if you open a new project with the ultra template.

    2. The template profile hippocoder mentioned is implemented in Unity 2018.1.

  3. Rinaldo, would you please do a follow up article using exactly the same scene but tuned for a VR experience?

    1. Great idea will certainly consider it for the future.
      The principal of the lighting will be the same and the scene is pretty simple and lightweight, so I don’t expect performance issue.
      However some changes in the post process settings might be needed to accommodate some VR expectation (motion blur, anti-aliasing).
      So give it a shot if you got VR system handy.

  4. One thing which is often missed even by experienced content creators, is that the blue sky itself can’t be used as a skylight. Why? Because the sky looks blue but it actually emits very little blue light. This is easy to test. Put a blank A4 paper under the real sky on a cloudless day. What color does the paper have? Blue-ish or completely white? Now do the same in unity and check the color of the digital piece of paper. It suddenly looks blue. Therefore you should use a white skylight and the blue part should just be used for the background, not for lighting.

    1. Unfortunately, your assumption is incorrect whether its for Unity or any high dynamic range image based lighting engine/renderer out there.
      Simple way of testing it, is to bring mirror ball out in the field on a clear day “with no cloud”.
      Did the ball reflect white sky or blue sky?
      There are many factors that can cause your Unity project or renderer to render blue sky environment lighting to be too blue.
      Typical scenario usually involves wrong tone mapper setup or working with Low dynamic range mode.

      Another issue with the white paper test, is the fact that human brain does advance processing that alter our color perception.
      There’s a good explanation with examples on this perception called “Color Constancy” in wikipedia.
      https://en.m.wikipedia.org/wiki/Color_constancy
      Hope this helps clarify the confusion.

    2. You’re making an incorrect conclusion from your observation: it doesn’t look blue because your mind auto white balances.
      Try this: look at a white screen in a room lit green, the screen will be magenta, also turn of white balance in your camera and take a snapshot.
      So the correct way to emulate this is to produce a realistic environment and color correct it with the post processing stack.

  5. Doug Richardson

    3월 9, 2018 10:58 오후

    I tried to create a Procedural Skybox material as described in both 2017.3 and 2018 beta 10 but noticed that the settings are different. In particular, HDR Exposure (which you set to 16) appears to have been replaced with Exposure, which only allows a range from 0-8. Am I missing something?

    1. Thanks for pointing this out.
      I can certainly replicate the discrepancies between the older version vs newer version of Unity.
      Bug is filed for this issue by the QA and we’ll keep you informed.
      In the mean time, if you’re stuck with Exposure 8, under lighting tab > Scene > Environment Lighting > Intensity Multiplier > Set it to 2. It’s not ideal, but will give you somewhat similar result.

      1. Upon further inspection. I have mistaken the use of Skybox-Procedural.shader from Unity Standard Assets vs the one that’s natively built in Unity Empty project (as you’ve spotted, they’re not identical).
        I’ve update The Spotlight Tunnel sample project to include the missing shader and update the material to match the documentation version.
        Please re-download the project from the same link above to get the latest one.
        Once again, thank you for pointing this issue.

  6. Great article, very useful, even for an old user of Unity. Thanks

  7. Thanks for the post, lighting is the most important and hardest aspect of content creation in many regards.

    1. I’m curious what your opinion will be regarding lighting after reading this post.
      It will certainly be a useful feedback for us to improve.

      1. Every time I see a post like this , I improve my understanding of lighting, things like that are very usefull for me, what I would like to see ( because there is a few information on the topic) is a good looking lighting project with a low cost price, for mobile projects

        1. Mobile can mean a lot these days. Some newer devices are very powerful and can actually run this sample project in its current state.
          However, in terms of optimization for mid-tier mobile hardware, there’s certainly a few things that can be done:
          – Converting the lights to be baked (disable Realtime GI since it’s no longer needed if lights are baked).
          – Switch the renderer to forward (be careful with reflection probe coverage since forward has limitation of reflection blending, you’ll also lose the ability to use Screen Space Raytrace Reflection).

          These two alone should be sufficient to make this scene performant on mid-tier mobile hardware.
          Additional optimization would be texture size reduction if memory is a concern.
          The rest of the lighting concept and fundamentals would be the same.

  8. Greate article! A lot can be learned from this.

  9. Thank you! That’s always great to read such best practices from Unity.

    1. Glad you enjoy the post. Don’t forget to check out the full coverage in the tutorial section: https://unity3d.com/learn/tutorials/s/creating-believable-visuals