Realtime Resolution – 번역

Realtime Resolution

원문 링크

 

이전글 – Introduction to Precomputed Realtime GI

Realtime Resolution

확인 완료한 버전: 5.5 – 난이도: 중급

미리 계산된 GI(Precomputed Realtime GI)를 사용하는 라이팅을 위한 씬을 설정할때, 먼저 결정해야하는 사항 중 하나는 씬의 기본 Realtime Resolution을 결정하는 것입니다. Realtime Resolution은 월드 단위(world unit) 당 사용되는, 실시간 라이트맵 텍셀(lightmap texel)의 수를 나타냅니다.

다음과 같이 Lighting 창에서 Realtime Resolution을 설정할 수 있습니다:

  • Lighting 창(Window > Lighting)을 열고 Scene 탭을 선택합니다.
  • Precomputed Realtime GI 체크박스를 클릭해서 Precomputed Realtime GI 항목을 활성화합니다.
  • Precomputed Realtime GI 체크박스 밑에 Realtime Resolution 속성을 확인합니다.

realtimeresolution
씬의 글로벌 Realtime Resolution 설정을 보여주는 유니티의 Lighting 창.

 

적절한 Realtime Resolution 결정하기 (Choosing an appropriate Realtime Resolution)

씬을 설정할때, 프로젝트에서 필요로하는 단위 크기(unit scale)를 염두해두는 것이 중요합니다. 프로젝트의 단위 크기는 미터(meter), 피트(feet) 또는 센티미터(centimeter)가 될 수 있습니다.
유니티 단위는 현실 세계의 단위 크기와 동일하지 않기 때문에, 단위가 어떤것인지는 전적으로 사용자에게 달려있습니다.

이 글의 예제 프로젝트에서는 단위 크기를 1미터로 결정했습니다. 다른 물리 개념은 동일하다고 가정합니다. 예를 들어, 중력(gravity)은 유니티에서 기본값으로 초당 단위로 표현됩니다. 단위 크기가 1미터와 동일하다고 가정하면, 실제 게임 시나리오에 적합합니다.

상황에 따라서 씬의 Realtime Resolution은 게임 세계의 크기에 의해서 결정되기도 합니다. 예를 들어, 씬의 크기가 작지만, 건물 내부가 다양한 반사 광(bounced lighting)으로 채워져있는 경우를 예로 들 수 있습니다. 이 경우 단위 크기 당 2-3 텍셀과 같이, 높은 라이트맵 해상도(lightmap resolution)를 설정해야 ‘고-주파(high-frequency)’ 라이팅이나 좀 더 세부적인 디테일을 포착할 수 있습니다.

게임 세계의 크기가 상당히 큰 게임에서, 야외 환경의 크기가 큰 씬이 존재할 수 있습니다. 이 게임에서 반사 광(bounced light)의 색상의 변화가 거의 없는, 수백 또는 수천 단위 크기(미터, 센티미터 등)의 표면이 존재할 수 있습니다. 이와 같은 경우, 라이팅의 변화가 단순하고 크기가 큰 외부 환경에, 내부(indoor)씬에서 복잡하게 뒤얽힌 라이팅을 포착하기에 적절한 resolution을 적용하기에는 낭비일 수 있습니다. 이 경우, 씬의 전체 룩(look)에는 크게 효과가 없음에도, 라이트맵 텍셀을 저장하고 업데이트해야하기 때문에 CPU와 메모리를 낭비하게 됩니다. 더 중요한 것은, 이 글의 목적에 따라서, 라이팅을 미리 계산하는 과정에서 고려해야하는 라이트맵 텍셀의 수를 증가시키는 것입니다. 라이트맵 텍셀의 수를 증가시키면, 라이팅을 계산하는 시간에 크게 영향을 미칠 수 있습니다.

외부 환경의 경우에 씬에서 크기가 큰 오브젝트에 대한 라이트맵 해상도는 단위 당 0.5 – 1 사이의 텍셀이 적절할 수 있습니다. 씬의 지형에 대한 라이트맵 해상도는 단위 당 0.1 – 0.5 사이의 텍셀이 적절한 크기가 될 수 있습니다.

 

미리 계산된 실시간 GI vs 기존의 라이트맵 (Precomputed Realtime GI Resolution vs. traditional lightmaps)

유니티의 미리 계산된 실시간 GI(Precomputed Realtime GI)에 필요한 Realtime Resolution 값은 ‘기존의’ 라이트맵 텍셀 밀도의 크기보다 작은 수치입니다. 미리 계산된 실시간 GI는 라이트맵에서 간접광(indirect lighting)만 포착하기 때문에 매우 부드럽거나 ‘저-주파’인 경향이 있기 때문입니다. 미리 계산된 실시간 GI을 사용하면, 선명한 그림자는 고해상도 라이트맵 보다는 실시간 그림자(shadow)에 의해서 제공됩니다.

기존의 라이트맵 기법에서 적절해 보이는 값(단위 당 30텍셀이라고 가정)은 라이팅 계산에 실패하거나 계산이 완료되지 않는 결과를 낳을 수 있습니다. 좀 더 적절한 값은 내부 씬의 경우, 단위 당 2 – 3 텍셀이며, 외부 환경의 경우 0.5 – 1 텍셀입니다. 이 값은 1단위 = 1미터의 단위 크기로 계산해서 작업하고 있다고 가정한 경우의 값입니다. 단위 크기가 다른 경우에는, 그 크기에 따라서 이 값을 다른 값으로 조절해야 합니다.

Scenario Realtime Resolution
내부 (Indoor) 단위 당 2 –  3 텍셀
외부 (Outdoor) 단위 당 0.5 – 1 텍셀
지형 (Terrain)  0.1 – 0.5 텍셀

1미터가 인간 세계의 규모를 가정하는 가장 적절한 값

씬의 Realtime Resolution을 처음 설정할때, 씬에 위치한 스태틱 오브젝트에 대해서 기본 해상도를 지정합니다. Lightmap Static으로 설정된 MeshRenderer를 가진 새 게임오브젝트는, 변경을 하지 않는 경우 이 값(기본 값)을 사용하게 됩니다. 전체 씬에 대한 Realtime Resolution을 선택하는 것 외에도 오브젝트 단위로 라이트맵 해상도를 변경할 수 있는 옵션도 있습니다. 높은 해상도를 통해서 추가적인 디테일이 필요한 경우, 이 값을 선택적으로 증가시킬수 있습니다. 일반적으로 가장 많이 사용되는 해상도를 씬의 기본값으로 설정한 다음, 라이팅 디테일이 더 필요한 오브젝트에 해상도를 수동으로 증가시키는 것이 작업량이 더 적습니다. 오브젝트 단위로 해상도를 수정하는 접근방법에 대해서는 이 글의 뒷부분에서 살펴보겠습니다.

 

씬의 실시간 Realtime Resolution 설정하기(Setting our Scene’s Realtime Resolution)

예제는, 이 페이지 상단의 있는 링크 Lighting Optimisation Tutorial에 포함되어 있는 LightingTutorialStart 씬에서 시작합니다.

예제 씬에는 외부 환경이 포함되어 있습니다. 이 외부 환경에는 대부분이 일정한 색상으로 표현된 중간 크기의 지형(Terrain)이 있습니다. 이 지형에는 씬의 다른 오브젝트에 의해서 반사되는 빛을 포착하는데 0.5 텍셀의 낮은 Realtime Resolution이면 충분합니다. 하지만, 나무로 된 집들도 있습니다. 이 집들은 훨씬 더 자세하게 표현되어 있습니다. 씬에 지형 오브젝트 보다 집 오브젝트가 훨씬 다 많기 때문에, Realtime Reaolution을 집에 적절한 값으로 설정하겠습니다. 그런 다음, 개별 지형 오브젝트에 사용되는 해상도를 변경할 수 있습니다. 이런 과정으로 작업하면, 씬을 준비하는데 필요한 작업량을 줄일 수 있습니다. 이를 토대로, 기본 Realtime Resolution에 월드 단위 당 1 텍셀 값을 사용합니다.

  • Lighting 창(Window > Lighting)을 열고 Scene 탭을 선택합니다.
  • Realtime Resolution 값을 1로 설정합니다.

씬의 크기는 1단위 = 1미터로 결정했습니다. 이렇게 설정하면, 유니티의 미리 계산된 실시간 GI(Precomputed Realtime GI)에 의해서 생성된 라이트맵 하나의 크기는 1×1미터 크기와 동일한 크기를 갖습니다. 이 크기는 작아 보일 수 있지만, 간접광만 포착한다는 점을 명심하시기 바랍니다. 선명한 그림자와 직접광에 의한 정반사는 씬의 실시간 라이트에 의해서 제공됩니다.

 

내용 끝까지 읽어주셔서 감사합니다.

배너 클릭은 저에게 많은 힘이 됩니다.

감사합니다 🙂

 

다음글 –  Understanding Charts

RonnieJ

프리랜서 IT강사로 활동하고 있습니다. 게임 개발, C++/C#, 1인 기업에 관심이 많습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Please turn AdBlock off

Notice for AdBlock users

Please turn AdBlock off