라이트 프로브: 기술 정보
스크립팅을 사용하여 프로브 위치하기

광원 프로브 배치(Placing Light Probes)

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

Light Probe Group 컴포넌트는 씬에서 모든 오브젝트에 추가할 수 있지만 비어 있는 게임 오브젝트에 추가하는 것이 가장 좋습니다.

Light Probe Group 컴포넌트
Light Probe Group 컴포넌트

라이트 프로브 그룹에는 끄고 켤 수 있는 고유 Edit Mode 가 있습니다. 라이트 프로브를 추가, 이동, 삭제하려면 Edit Light Probes 버튼을 눌러 라이트 프로브 그룹의 편집 모드를 꺼야 합니다.

라이트 프로브 편집 버튼
라이트 프로브 편집 버튼

라이트 프로브 편집 모드를 사용하는 경우, 각각의 라이트 프로브를 게임 오브젝트와 비슷한 방법으로 조작할 수 있습니다만, 그렇다 하더라도 각각의 프로브는 게임 오브젝트가 아님을 기억해야 합니다. 이들은 Light Probe Group 컴포넌트에 저장된 지점의 집합일 뿐입니다.

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

라이트 프로브의 디폴트 배열
라이트 프로브의 디폴트 배열

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

프로브를 편집한 이후에는 라이트 프로브 그룹 편집 모드를 꺼야 합니다. 그렇지 않으면 일반 게임 오브젝트를 움직이거나 조작할 수 없습니다.

라이트 프로브 포지션 선택

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

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

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

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

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

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

영역 생성

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

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

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

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

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

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

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

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

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

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

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

라이트 프로브 배치 문제

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

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

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

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

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

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

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

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


  • 2017–06–08 편집 리뷰 없이 페이지 게시됨

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

라이트 프로브: 기술 정보
스크립팅을 사용하여 프로브 위치하기