베이크된 조명(Baked lighting)
미리 계산된 조명 사용(Using precomputed lighting)

전역 조명

전역 조명(GI)은 직접 표면에 닿는 광원(직접광)뿐만 아니라 다른 표면에 부딪혀 반사되는 광원(간접광)을 모델링하는 시스템입니다. 오브젝트는 서로의 형상에 영향을 미치기 때문에 간접 조명을 모델링하면 가상 세계를 더 현실적이고 연결된 것처럼 만들 수 있습니다. 예를 들어 빨간색 소파에 햇살이 비치면 붉은 광원이 그 뒤에 있는 벽 위로 반사됩니다. 또한 동굴 입구의 바닥에 햇살이 비춰지면 동굴 내부로 반사되어 동굴 안쪽이 밝게 비춰질 수 있습니다.

씬 뷰에서의 전역 조명입니다. 간접 조명의 미묘한 효과에 주목해야 합니다.

GI 개념

간접 조명 계산에 너무 많은 시간이 걸렸기 때문에 일반적으로 비디오 게임이나 기타 실시간 그래픽스 애플리케이션에는 직접 조명만 사용해왔고, CG 애니메이션 필름과 같은 비실시간 콘텐츠에서만 간접 조명을 사용할 수 있었습니다. 이러한 한계를 극복하기 위해 게임에서는 이동하지 않는 정적인 오브젝트와 표면에 대해 간접광을 미리 계산하는 방법이 고안되었습니다. 시간이 많이 걸리는 계산을 미리 할 수 있고 오브젝트는 움직이지 않고 멈춰 있기 때문에 이러한 방법으로 미리 계산된 간접광은 런타임 시점에 정확하게 나타납니다. Unity 는 베이크된 GI(베이크된 라이트맵이라고도 함)라고 하는 이 기술을 지원합니다. 이 기술의 이름은 간접광이 미리 계산되어 저장(베이크)되는 프로세스인 “베이크”의 이름을 따서 만들어졌습니다. 간접광 외에도 베이크된 GI 는 확보된 계산 시간을 활용하여 실시간 기술로는 달성하기 어려운 면 광원이나 간접광에서도 더 사실적이면서 부드러운 그림자를 만들어냅니다.

또한 Unity 5.0 에서는 미리 계산된 실시간 GI 라는 새로운 기술을 지원합니다. 위에서 언급한 베이킹과 비슷하게 사전 계산 단계가 필요하며, 정적인 오브젝트만을 대상으로 합니다. 하지만 단순히 빌드할 때 씬에서 광원이 어떻게 반사되는지 미리 계산하는 것이 아니라 모든 경우의 광원 반사를 미리 계산하여 이 정보를 런타임 시점에 사용할 수 있도록 인코딩합니다. 쉽게 말해 모든 정적인 오브젝트에 대해 “이 표면에 광원이 닿으면 어느 쪽으로 반사됩니까?”라는 질문에 언제든지 대답할 수 있습니다. Unity 는 나중에 사용할 목적으로 광원의 이동 예상 경로에 대한 정보를 저장합니다. 최종 조명은 런타임 시점에 이전에 계산된 광원 이동 경로에 실제 광원을 투입하여 결정됩니다.

광원의 개수와 타입, 포지션, 방향, 기타 프로퍼티를 모두 변경할 수 있으며, 그에 따라 간접 조명이 업데이트됩니다. 마찬가지로 컬러, 흡수하는 광원의 양, 방출하는 광원의 양과 같은 오브젝트의 머티리얼 프로퍼티를 변경할 수도 있습니다.

미리 계산된 실시간 GI 는 부드러운 음영을 만들어내지만 씬이 아주 작지 않은 한, 베이크된 GI 로 얻을 수 있는 것보다는 전체적인 조명이 조금 거칠어질 수 있습니다. 또한 미리 계산된 실시간 GI 는 런타임 시점에 최종 조명이 결정되지만 여러 프레임에 걸쳐 반복적으로 수행되므로 조명에서 큰 변화가 이루어지면 많은 프레임이 지난 후에야 해당 효과가 완전히 적용됩니다. 실시간으로 사용하기에 충분히 빠르지만 대상 플랫폼의 리소스가 매우 제한되어 있다면 더 나은 런타임 퍼포먼스를 위해 베이크된 GI 를 사용하는 것이 좋습니다.

GI 의 한계

베이크된 GI 와 미리 계산된 실시간 GI 는 공통적으로 베이크/사전 계산 단계에서 정적 오브젝트만을 대상으로 한다는 한계가 있습니다. 따라서 움직이는 오브젝트는 다른 오브젝트로 빛을 반사하거나 다른 오브젝트에서 반사되는 빛을 받을 수 없습니다. 하지만 라이트 프로브를 사용하면 정적 오브젝트에서 반사되는 광원을 움직이는 오브젝트에 투영할 수 있습니다. 라이트 프로브는 씬의 포지션으로서, 조명이 베이크/사전 계산 단계에서 측정(프로브)되며, 런타임 시점에 비정적 오브젝트에 닿는 간접광은 해당 시점에서 오브젝트에 가장 가까운 프로브의 값을 사용하여 추정됩니다. 예를 들어 하얀 벽 옆에서 구르고 있는 붉은 공은 붉은색을 벽에 번지게 하지는 않지만, 붉은 벽 옆에서 구르고 있는 하얀 공에는 라이트 프로브를 통해 벽에서 번지는 붉은색이 입혀집니다.

GI 효과 예제

  • 하늘을 가로지르는 태양의 효과를 시뮬레이션하기 위해 방향 광원의 방향과 컬러를 변경합니다. 방향 광원과 함께 스카이박스를 수정하면 런타임 시점에 업데이트되는 현실적인 시간 흐름 효과를 만들어 낼 수 있습니다. 실제로 내장된 새로운 절차적 스카이박스를 사용하면 이 작업을 쉽게 수행할 수 있습니다.

  • 낮 시간이 지나가면서 창을 통해 들어오는 햇빛이 바닥을 지나 움직이며, 이 광원은 방안과 천장에 사실적으로 반사됩니다. 빨간색 소파에 햇살이 비치면 붉은 광원이 그 뒤에 있는 벽 위로 반사됩니다. 소파의 컬러를 빨간색에서 초록색으로 변경하면 뒤에 있는 벽의 컬러가 빨간색에서 초록색으로 바뀝니다.

  • 방사형으로 뻗어나가는 네온사인의 머티리얼을 애니메이션으로 만들어 네온사인에 불을 켜면 주변으로 밝게 빛나기 시작합니다.

다음 섹션에서는 이 기능을 사용하는 방법에 대해 자세하게 설명합니다.

베이크된 조명(Baked lighting)
미리 계산된 조명 사용(Using precomputed lighting)