라이트 프로브: 기술 정보
Placing Light Probes using scripting

라이트 프로브 그룹

씬에 라이트 프로브를 배치하려면 Light Probe Group 컴포넌트가 연결된 게임 오브젝트를 사용해야 합니다. 메뉴에서 Component > Rendering > Light Probe Group 으로 이동하여 Light Probe Group 컴포넌트를 추가할 수 있습니다.

씬의 모든 게임 오브젝트에 Light Probe Group 컴포넌트를 추가할 수 있습니다. 하지만 빈 게임 오브젝트를 새로 생성(메뉴: GameObject > Create Empty)한 후 여기에 추가하면 프로젝트에서 실수로 제거할 가능성을 줄일 수 있습니다.

Light Probe Group 컴포넌트
Light Probe Group 컴포넌트
프로퍼티 기능
Edit Light Probes 라이트 프로브 그룹을 변경하려면 Edit Light Probes 버튼을 클릭하여 편집을 활성화하십시오. 그러면 라이트 프로브를 이동하고 편집할 수 있도록 Unity를 변경하므로, 작업을 마친 후에는 반드시 편집을 비활성화해야 합니다. Edit Light Probes 가 활성화된 동안에는 Unity의 게임 오브젝트나 다른 요소를 이동하거나 편집할 수 없습니다.
Show Wireframe 이 프로퍼티를 활성화하면 Unity가 라이트 프로브 그룹의 와이어프레임을 씬(Scene) 뷰에 표시합니다. 비활성화하면 Unity는 연결하는 와이어프레임이 아니라 라이트 프로브 포인트만 표시합니다.
Remove Ringing 이 프로퍼티를 활성화하면 Unity가 씬에서 라이트 프로브 링잉을 자동으로 제거합니다. 자세한 내용은 이 섹션 후반에 나오는 링잉을 참조하십시오.
Selected Probe Position 씬에서 선택한 라이트 프로브의 x, y, z 좌표를 제공합니다. 이 프로퍼티는 읽기 전용입니다.
Add Probe 이 옵션을 클릭하면 라이트 프로브 그룹에 라이트 프로브를 추가합니다.
Select All 이 옵션을 클릭하면 라이트 프로브 그룹의 모든 라이트 프로브를 선택합니다.
Delete Selected 이 옵션을 클릭하면 라이트 프로브 그룹에서 선택한 라이트 프로브를 삭제합니다.
Duplicate Selected 이 옵션을 클릭하면 선택한 라이트 프로브를 복제합니다.

링잉

특정한 환경에서 라이트 프로브는 “링잉”이라고 불리는 원치 않는 동작을 보입니다. 이 문제는 라이트 프로브 주변 광원에 상당한 차이가 있을 때 발생합니다. 예를 들어 라이트 프로브의 한쪽 면에 밝은 광원이 있고 다른 면에는 광원이 없는 경우 빛 강도가 반대쪽 면에 “과도하게 도달”할 수 있습니다. 이러한 과도한 도달은 반대쪽 면에 광원 스폿을 만듭니다.

라이트 프로브 링잉의 예
라이트 프로브 링잉의 예

이 문제는 다음과 같은 방법으로 해결할 수 있습니다.

Light Probe Group 컴포넌트에서 Remove Ringing 을 활성화하십시오. 그러면 Unity가 원치 않는 광원 스폿을 자동으로 제거합니다. 하지만 이로 인해 라이트 프로브의 정확도가 다소 떨어지고 광원 콘트라스트가 감소할 수 있으므로 시각적 결과를 반드시 확인해야 합니다. 플레이어가 광원 스폿을 볼 수 있는 포지션에 도달할 수 없도록 게임 내에 장애물을 배치하십시오. 직접광을 라이트 프로브에 베이크하지 마십시오. 직접광은 그림자 모서리 같은 뚜렷한 불연속성이 있어서 라이트 프로브에는 적합하지 않습니다. 간접광만 베이크하려면 혼합 조명을 사용하십시오. 라이트 프로브 대신에 실시간 GI를 사용하여 동적 게임 오브젝트에 조명을 비추십시오.

광원 프로브 배치

라이트 프로브 그룹을 편집하는 경우 각각의 라이트 프로브를 게임 오브젝트와 비슷한 방법으로 조작할 수 있습니다. 하지만 라이트 프로브는 게임 오브젝트가 아니라 Light Probe Group 컴포넌트에 있는 포인트 집합입니다.

새로운 라이트 프로브 그룹을 편집하는 경우 처음 보는 화면은 아래와 같이 기본 배열인 큐브로 정렬된 8개의 프로브가 배치된 형태가 됩니다.

라이트 프로브의 기본 배열
라이트 프로브의 기본 배열

이후 라이트 프로브 그룹 인스펙터의 컨트롤을 사용해서 그룹에 새로운 프로브 포지션을 추가할 수 있습니다. 프로브는 씬에서 노란 구로 나타나며 이는 게임 오브젝트와 동일한 방법으로 배치할 수 있습니다. 개별 프로브나 여러 개의 프로브를 선택하고 복제하려면 일반적인 “복제” 키보드 단축키(ctrl+d/cmd+d)를 사용해야 합니다.

라이트 프로브 편집을 완료한 후에는 라이트 프로브 그룹 편집 모드를 비활성화해야 원래대로 씬에 있는 게임 오브젝트를 계속 편집하고 이동시킬 수 있습니다.

라이트 프로브 포지션 선택

오브젝트의 표면 위로 지속적인 해상도를 가진 라이트맵과는 달리 라이트 프로브 정보의 해상도는 얼마나 라이트 프로브를 빽빽하게 배치했는지에 따라 달라집니다.

라이트 프로브가 저장하는 데이터 양과 게임이 진행되는 동안 수행된 계산 양을 최적화하려면 라이트 프로브를 최소한으로 배치하는 것이 좋습니다. 하지만 서로 다른 공간에서의 광원 변화가 원하는 수준에서 기록될 수 있도록 충분한 라이트 프로브를 배치해야 합니다. 이는 복잡하거나 선명한 콘트라스트가 있는 광원이 비치는 영역에는 라이트 프로브를 빽빽하게 배치하고 광원의 변화가 적은 영역에는 듬성하게 배치하면 된다는 의미입니다.

간단한 씬에 서로 다른 밀도로 배치된 라이트 프로브
간단한 씬에 서로 다른 밀도로 배치된 라이트 프로브

위의 예제에서 콘트라스트와 컬러 배리에이션이 큰 건물 사이와 그 근처에 라이트 프로브가 더 빽빽하게 배치되어 있고, 조명이 크게 변화하지 않는 길가에는 낮은 밀도로 라이트 프로브가 배치되어 있습니다.

라이트 프로브를 배치하는 가장 쉬운 방법은 일반적인 3D 격자 무늬 패턴으로 라이트 프로브를 배치하는 것입니다. 이 패턴이 간단하고 효율적이기는 하지만 필요 이상으로 메모리를 소모하며 중복되는 라이트 프로브가 많을 수 있습니다. 예를 들어 위의 씬에서 길가에 지나치게 많은 수의 라이트 프로브가 있으면 리소스를 낭비하게 됩니다. 광원은 길의 거리에 따라 크게 변경되지 않으므로 대부분의 라이트 프로브는 거의 비슷한 조명 데이터를 인접 라이트 프로브에 저장합니다. 이와 같은 상황에서는 더 적은 스프레드 아웃 라이트 프로브 사이에서 이 조명 데이터를 보간하는 것이 훨씬 효율적입니다.

개별 라이트 프로브는 많은 양의 정보를 저장하지 않습니다. 기술적인 측면에서 각 프로브는 샘플 지점에서 보는 구형 파노라마 HDR 이미지이며 27개의 부동 소수점 값으로 저장된 스피리컬 하모닉 L2를 사용해 인코딩된 것입니다. 하지만 수백 개의 라이트 프로브를 추가할 수 있는 거대한 씬의 경우 라이트 프로브를 너무 빽빽하게 패킹하면 게임에서 상당한 메모리가 낭비됩니다.

영역 생성

게임플레이가 2D 평면(예: 차가 도로 표면 위를 달리는 등)에서 이루어진다고 하더라도 라이트 프로브는 3D 영역을 형성해야 합니다.

이것은 라이트 프로브 그룹에 최소 두 개의 수직 “레이어” 점이 있어야 한다는 의미입니다.

아래 예제에서 왼쪽 그림에서는 라이트 프로브가 지표면 위에만 정렬되어 있음을 볼 수 있습니다. 여기에서는 라이트 프로브 시스템이 라이트 프로브에서 합리적으로 정사면체 영역을 계산할 수 없기 때문에 좋은 조명 효과를 낼 수 없습니다.

오른쪽 그림에서는 라이트 프로브가 두 레이어에 정렬되어 있음을 볼 수 있습니다. 일부는 낮은 지표면에 있고, 다른 라이트 프로브는 위에 있기 때문에 다수의 개별 4면체로 이루어진 3D 영역을 형성하고 있습니다. 이것이 좋은 레이아웃입니다.

왼쪽 이미지는 라이트 프로브에 의해 정의된 영역에 높이가 없기 때문에 라이트 프로브 포지션을 잘못 선택했음을 보여줍니다. 오른쪽 이미지는 라이트 프로브 포지션을 잘 선택한 예입니다.
왼쪽 이미지는 라이트 프로브에 의해 정의된 영역에 높이가 없기 때문에 라이트 프로브 포지션을 잘못 선택했음을 보여줍니다. 오른쪽 이미지는 라이트 프로브 포지션을 잘 선택한 예입니다.

동적 GI를 위한 라이트 프로브 배치

Unity의 실시간 GI는 무빙 라이트가 정적 배경에 동적 반사광을 투영할 수 있도록 지원합니다. 하지만 라이트 프로브를 사용 중인 경우 움직이는 게임 오브젝트의 무빙 라이트에서 동적 반사광을 수신할 수도 있습니다.

따라서 라이트 프로브는 서로 비슷하지만 구분되는 두 개의 기능을 수행합니다. 하나는 정적으로 베이크된 광원을 저장하는 것이고 다른 하나는 런타임 도중 움직이는 오브젝트에 조명의 효과를 표현하기 위해 동적 실시간 전역 조명(GI 또는 반사광)에 대한 샘플링 지점을 표시하는 것입니다.

따라서 움직이는 동적 광원을 사용하면서 움직이는 게임 오브젝트에 실시간 반사광을 투영하고 싶은 경우, 이것은 라이트 프로브를 어디에 어느 밀도로 배치할지에 대한 선택에 영향을 미칠 수 있습니다.

이 상황에서 주로 고려해야 할 점은 상대적으로 변화하지 않는 정적 광원의 영향을 받는 넓은 영역 내에서는 광원의 변화가 적으므로 소수의 라이트 프로브만 배치해도 된다는 것입니다. 하지만 이 영역에 무빙 라이트를 두고, 움직이는 오브젝트에 반사광을 투영하려면 광원의 범위와 스타일에 부합할 수 있는 높은 수준의 정확도를 달성하기 위해 라이트 프로브를 높은 밀도로 배치해야 합니다.

라이트 프로브 배치의 밀도는 광원의 크기, 범위, 이동 속도, 그리고 반사광을 받아들일 움직이는 오브젝트의 크기에 따라 달라집니다.

라이트 프로브 배치 문제 해결

라이트 프로브 포지션 선택에는 조명이 라이트 프로브 세트 간에 보간된다는 것을 고려해야 합니다. 라이트 프로브가 씬 내의 조명 변화를 올바르게 반영하지 않는 경우, 문제가 발생할 수 있습니다.

아래의 예제는 양쪽에는 두 개의 밝은 가로등이 있고 가운데는 어두운 야간 씬을 보여줍니다. 만일 라이트 프로브가 가로등 근처에만 배치되고 가운데에는 배치되지 않은 경우, 가로등에서 나오는 조명은 어두운 쪽에 "흘러" 움직이는 오브젝트에까지 영향을 줄 것입니다. 이는 조명이 밝은 지점에서 다른 밝은 지점으로 보간되고 있으며 가운데에 있는 어두운 영역에 대한 정보는 없기 때문입니다.

이 이미지는 라이트 프로브 배치가 잘못된 경우를 보여줍니다. 두 가로등 사이 어두운 영역에 라이트 프로브가 없으므로 보간 현상에 어두운 영역은 포함되지 않습니다.
이 이미지는 라이트 프로브 배치가 잘못된 경우를 보여줍니다. 두 가로등 사이 어두운 영역에 라이트 프로브가 없으므로 보간 현상에 어두운 영역은 포함되지 않습니다.

실시간 광원 또는 혼합 광원을 사용하는 경우, 이 문제는 알아채기 어려울 수도 있는데 이는 간접 광만 틈 사이로 흐르기 때문입니다. 이 문제는 완벽히 베이크된 광원을 사용하는 경우 더욱 두드러지는데, 이는 이 상황에서 움직이는 오브젝트의 직접광 역시 라이트 프로브에서 보간되기 때문입니다. 이 예제 씬에서는 두 가로등이 베이크되어 있으므로 움직이는 오브젝트는 라이트 프로브에서 직접광을 받습니다. 이로 인해 움직이는 오브젝트(구급차)는 어두운 영역을 지나가는 동안에도 밝게 유지되는데, 이것은 바람직한 효과가 아닙니다. 노란색 와이어프레임 정사면체는 거리의 밝은 빛 끝 하나와 다른 끝 사이에 보간 현상이 발생함을 보여줍니다.

이것은 바람직한 효과가 아닙니다. 구급차는 어두운 영역을 지나가는 동안에도 밝게 유지되는데 이는 어두운 영역에 라이트 프로브가 배치되어 있지 않기 때문입니다.

이를 해결하려면 아래와 같이 어두운 영역에 라이트 프로브를 더 배치하면 됩니다.

이제 씬의 어두운 영역에도 라이트 프로브가 존재하므로 움직이는 구급차는 씬을 이동하는 동안 더 어두운 조명을 받게 됩니다.

이제 구급차는 씬 중간에서 의도한 대로 더 어두운 조명을 받게 됩니다.
이제 구급차는 씬 중간에서 의도한 대로 더 어두운 조명을 받게 됩니다.

  • 2018–10–17 Page amended

  • 2017–06–08 Page published

  • 2018.3에서 Remove Ringing 추가됨 NewIn20183

  • Unity 5.6에서 라이트 프로브 업데이트됨

라이트 프로브: 기술 정보
Placing Light Probes using scripting