선형 조명(Pro 전용)

개요

선형(Linear) 조명은 모든 입력자가 선형인 씬(scene)을 조명하는 과정을 가리킵니다. 정상적으로는 텍스처는 감마(gamma)가 미리 적용되어 존재합니다. 이는 텍스처가 재질(material) 내에서 생플링 될 때 선형이 아니라는 것을 의합니다. 만일 이 텍스처가 표준 조명 등식에서 사용된다면, 그 등식은 모든 입력자가 사용 전에 선형화 될 것을 전제함으로, 등식에서 부정확한 결과를 도출하게 될 것 입니다.

선형 조명(Linear lighting)이란 셰이더의 입력자와 출력자 모두가 올바른 색상공간에 있다는 것을 확인하는 과정을 가리키며, 이는 더 정확한 조명을 제공합니다.

기존의 (Gamma) 파이프라인

기존의 랜더링 파이프라인에서는 모든 색상과 텍스처는 감마(gamma) 공간에서 샘플링 되며, 즉 감마 보정은 그들이 셰이더에서 사용되기 전에는 이미지나 색상에서 제거되지 않습니다. 이 때문에 셰이더로의 입력자(input)가 감마 공간에 있는 상황이 발생하며, 조명 등식은 이들 입력자를 마치 이들이 선형 공간에 있는 것처럼 사용하고 결국은 최종 픽셀에 감마 보정이 적용되지 않게 됩니다. 대부분의 경우 이 두 잘못된 과정이 서로를 어떤 방식이든 상쇄하여 이것이 수용 가능해 보입니다. 하지만 이는 올바르지 않습니다.

선형 조명 파이프라인(Linear Lighting Pipeline)

만일 선형 조명이 활성화 되면, 셰이더 프로그램의 입력자는 감마 보정이 제거된 상태에서 제공됩니다. 색상에 대해서, 이러한 변환은 사용자가 선형 공간에 있을 경우 암시적으로 적용됩니다. 텍스처는 하드웨어 RGB읽기를 사용하여 샘플링 되고, 소스 텍스처는 감마 공간과 그리고 샘플링에 제공됩니다. 그래픽 하드웨어에서 그 결과는 자동으로 변환됩니다. 이 입력자는 그 다음 셰이더에게 제공되고 그리고 조명은 평소처럼 발생합니다. 그 결과 값은 framebuffer에 작성됩니다. 이 값은 감마 보정되거나 framebuffer에 저장되거나, 혹은 이 후의 감마 보정을 위해 선형공간에 남깁니다; 이는 현재의 랜더링 설정에 따라 달라집니다.

Differences Between Linear and Gamma Lighting 선형 및 감마 조명 사이의 차이점

선형 조명 입력 값을 조명 등식에 사용하는 것은 감마공간과는 차이가 있습니다. 이는 빛이 표면을 부딪힐 때 기존의 Unity 랜더링 파이프라인이 가지는 것과는 다른 반응 곡선을 가집니다.

라이트 저하(Light Falloff)

거리와 노멀(normal) 기반의 조명(lighting)으로부터 저하(falloff)는 두 가지 방식으로 변경됩니다. 우선, 선형 모드에서 랜더링 될 때 수행되는 추가적인 감마 보정은 빛의 반경을 더 크게 보이게 합니다. 둘째로 조명의 가장 자리는 더 강하게 될 것입니다. 이는 표면상에서의 조명의 강도 저하를 좀 더 정확하게 모델링 합니다.

선형 강도 반응(Linear Intensity Response)

사용자가 감마 공간 조명을 사용할 때, 셰이더에 제공되는 색상과 텍스처는 감마 보정이 적용되어 있습니다. 그것들이 셰이더에 사용될 때, 높은 밝기의 색상은 선형 조명에 대하여 설정되어야 하는 것보다 실제 더 밝습니다. 이는 빛의 강도가 강해짐에 따라, 표면은 비 선형적인 방식으로 더 밝아진다는 것을 의미합니다. 이는 여러 장소에서 너무 밝을 수 있는 조명을 발생하게 하고, 또한 모델과 씬(scene)에 씻겨 나간 것 같은 느낌을 줄 수 있습니다.사용자가 선형 조명을 사용할 때, 빛의 강도가 증가할수록 표면의 반응은 선형을 유지합니다. 이는 훨씬 더 현실적인 표면 셰이딩(shading)과 표면에서 훨씬 무난한 색상 반응을 이끌어냅니다. [-Infinite, Lee Perry-Smith에 의해 Creative Commons Attribution 3.0 Unported License로 라이선스 된 3D Head Scan. 다음 사이트에서 사용가능: http://www.ir-ltd.net/infinite-3d-head-scan-released-]

선형과 감마의 혼합(Linear and Gamma Blending)

Framebuffer로 혼합(blending)을 수행할 때, 그 혼합은 색상공간이나 framebuffer에서 발생합니다. 감마 랜더링을 사용할 때 이는 비선형적인 색상이 함께 혼합됨을 의미합니다. 선형적 공간 랜더링을 사용하면 혼합은 선형 공간에서 발생하고, 이는 정확하며 예측하는 결과를 가져옵니다.

선형 조명(Linear Lighting)의 사용

선형 조명은 랜더링 된 공간에서 다른 모양을 생성합니다. 만일 사용자가 선형 조명을 위한 프로젝트를 작성하면, 사용자가 감마 조명으로 변환할 경우 올바른 모양으로 보이지 않을 것입니다. 이 때문에 사용자가 감마 조명에서 선형 조명으로 이동할 경우 그것이 변환하기 전과 같이 양호한 상태로 보이게 하려고 프로젝트를 업데이트 하는데 시간이 걸리게 됩니다. 이렇게 이야기하면 Unity에서 선형 조명을 활성화 하는 것은 매우 간단합니다. 이 기능은 각 프로젝트 레벨에서 구현되어 있으며 Player Settings 에서 설정할 수 있고, 이는 Edit → Project Settings → Player → Other Settings에 위치합니다.

라이트매핑 (Lightmapping)

사용자가 근거리 조명을 사용할 경우, 모든 조명과 텍스처는 선형화(linearized)되며, 이는 라이트매퍼(lightmapper)에 전달한 값이 변경되어야 한다는 것을 의미합니다. 사용자가 선형 조명을 감마 조명으로 변환하거나 혹은 반대로 할 때, 라이트맵(lightmap)을 다시 구워야 합니다. Unity의 라이트매핑 인터페이스는 라이트맵이 부정확한 색상 공간 내에 있을 경우 경고를 표시합니다.

Supported Platforms 지원하는 플랫폼

모든 플랫폼이 선형 랜더링을 지원하지는 않습니다. 현재 이 기능을 제공하는 빌드 대상은 다음과 같습니다:

  • Windows & Mac (editor, standalone, web player)
  • Xbox 360
  • PlayStation 3

이 대상들이 선형 조명을 지원한다 하더라도, 해당 장비의 그래픽 하드웨어가 씬(scene)을 올바로 랜더링 할 수 있다는 보장은 없습니다. QualitySettings.desiredColorSpaceQualitySettings.activeColorSpace 을 참조하여 원하는 색상 공간과 지원되는 색상 공간을 확인 할 수 있습니다. 만일 원하는 색상 공간이 선형이나 활성화된 색상공간이 감마라면 그 플레이어는 감마 공간으로 후퇴(fallen back) 한 것 입니다. 이를 사용하여 사용자에게 경고 대화창을 표시하고 응용프로그램이 올바로 보이지 않을 것이라는 사실이아 혹은 해당 플레이어를 종료할 것을 알려줄 수 있습니다.

선형와 비 HDR(Linear and Non HDR)

HDR을 사용하지 않을 경우, sRGB 읽기와 sRGB 쓰기를 지원하는 특별한 framebuffer 타입이 사용됩니다 (읽기에 Degamma, 쓰기에 Gammar). 이는 텍스처와 마찬가지로, framebuffer 내의 값은 감마 보정이 되었다는 것을 의미합니다. Framebuffer가 혼합(blending)이나 텍스처로 묶여 있다면(bound), 그 값은 사용 전에 감마를 제거할 것 입니다. 이 버퍼가 값에 쓰여진다면, 쓰여지는 값은 선형 공간에서 감마 공간으로 변환됩니다. 만일 사용자가 선형공간에서 랜더링을 수행한다면, 모든 사후 처리 효과는 그 사후 처리와 사후 처리 혼합이 선형공간에서 발생할 수 있도록 소스(source)와 대상(target) 버퍼를 sRGB 읽기와 쓰기를 허용한 상태로 생성될 것 입니다.

선형(Linear)과 HDR

HDR을 사용할 경우, 랜더링은 부동 소수점 버퍼로 수행됩니다. 이 버퍼는 충분한 해상도를 갖추고 있어서 버퍼를 사용할 때 마다 감마 공간으로 변환할 필요가 없습니다. 이는 선형 모드에서 랜더링을 수행할 경우, 사용자가 사용하는 랜더링 대상은 색상을 선형 공간에 저장할 것이라는 것을 의미합니다. 백버퍼(backbuffer)에 쓰여질 때, 감마 보정이 적용됩니다.

GUI 와 선형 작성 텍스처 (Linear Authored Textures)

Unity GUI을 랜더링 할 때, 해당 랜더링은 선형 공간에서 수행되지는 않습니다. 이는 GUI 텍스트를 읽을 때 감마를 제거하지 말아야 한다는 것을 의미합니다. 이것은 아래의 두 가지 방법으로 가능합니다.

  • 텍스처 불러오기에서 텍스처 타입을 GUI로 설정
  • 고급 텍스처 불러오기에서 'Bypass sRGB Sampling' 체크 상자를 체크

RGB 값을 특정한 무언가가 sRGB 샘플링을 우회하여야 한다는 것을 의미하게 하기 위하여 작성된 조회(lookup) 텍스처와 다른 텍스처 역시 중요합니다.

이는 샘플링 된 텍스처가 그래픽 하드웨어에 의해 사용되어지기 전에 감마가 제거되지 않도록 강제할 것 입니다. 이는 또한, 셰이더에 전달된 값이 작성된(authored) 텍스처 내에 있는 값과 정확하게 같기를 바라는 마스크와 같은 다른 텍스처 타입에도 유용합니다.

역링크