Understanding Clusters – 번역

Understanding Clusters

원문 링크

 

이전글 – Unwrapping and Chart reduction

Understanding Clusters

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

지금까지 챠트(Chart)의 관점에서 미리 계산되는 실시간 GI(Precomputed Realtime GI)에 대해서 살펴봤습니다. 챠트의 수를 줄이거나 최적화하면, 라이팅을 계산하는 과정에서 요구되는 라이트맵 합성이나 패킹(Packing)과 같은 작업의 수가 줄어듭니다. 이는 라이팅 계산 과정의 성능을 향상시키고 유니티의 미리 계산되는 실시간 GI 솔루션GI(Precomputed Realtime GI solution)에서 요구하는 데이터 세트의 크기를 줄여줍니다.

클러스터(cluster)를 수정하는 방법은 유니티의 라이팅 계산 프로세스 과정 중에 뒷부분에 있는 작업에서 필요로하는 처리작업의 수를 줄일 수 있는 좀 더 세분화된 방법입니다. 클러스터의 수 줄이기를 통해서 추가로 얻을 수 있는 이점은 런타임에서의 성능 향상입니다.

미리 계산되는 실시간 GI(Precomputed Realtime GI)를 이용해서 씬의 라이팅 솔루션을 시작하면, 유니티는 Static 씬의 복셀화된(voxelized) ‘프록시(proxy)’를 처리하는 작업에서 필요로하는 계산을 단순화 시킵니다. 이 복셀을 클러스터(Cluster)라고 부릅니다. 클러스터는 라이팅에 사용하는 정적 모델 구조(Static Geometry)에 효율적으로 매핑된(mapped) 표면 패치(작은 타일)입니다.
클러스터는 계층구조로 저장되며, 유니티의 디퓨즈 글로벌 일루미네이션 솔루션(diffuse global illumination solution)을 계산할때 필요한 복잡한 조도 계산에 사용됩니다. 클러스터는 챠트와 유사한 방식으로 매핑되지만, 이 둘은 완전히 독립적이라는 점에 주의해야 합니다.

clusteringdrawmode
Clustering Scene draw 모드는 유니티의 미리 계산되는 실시간 GI(Precomputed Realtime GI)에 의해서 생성되는 클러스터의 크기를 시각화하는데 사용할 수 있습니다.

클러스터는 각 클러스터가 매핑될 정적 메쉬의 알비도(albedo)를 샘플링합니다. 그런 다음, 라이팅 계산 과정의 Light Transport 단계에서 이 클러스터들 사이의 관계가 계산됩니다. 이 결과로 클러스터 네트워크를 통해서 라이트가 전달될 수 있습니다. 적절한 프레임 속도로 글로벌 일루미네이션(global illumination)을 제공하기 위해서는 런타임에 라이팅을 갱신(업데이트)해야 합니다. 현재 하드웨어의 한계 속에서도 이를 제공하기 위해서는 런타임에 갱신되는 라이팅 데이터의 양을 줄어야합니다. 유니티는 이를 위해서 Static 씬의 저해상도 근사치(low resolution approximation)를 생성합니다.

clusterdiagram
클러스터 X의 라이팅 값이 근처의 다른 클러스터 값과 연관되어 있는 모습을 보여주는 그림 (이미지 제공 : Geomerics).

라이팅을 계산하는 과정이 완료되면, 라이팅 계산 프로세스를 다시 시작할 필요없이, 라이트 위치, 강도, 색상 등과 함께 앰비언트(ambient) 라이트(skybox)(주변광)도 수정할 수 있습니다. 이렇게 라이팅의 변화는, 최종 결과에 포함된 씬의 재질(Material)의 기본 albedo와 emission을 고려해서, 클러스터 네트워크 전체에 걸쳐서 반사되고 투과되어 반영됩니다.

이렇게 초기에 반사되는 빛 이후에, 갱신된 라이팅 결과는 클러스터 자체에 적용될 수 있습니다. 매번 이런 과정이 반복될때마다, 씬 내의 쉐이더(shader)에 의해서 최종적으로 사용되기 전에, 라이팅이 반영된 클러스터는 해당 라이트맵 텍스쳐에 샘플링됩니다.

이 프로세스는 CPU에서 비동기로 처리되기 때문에, 글로벌 일루미네이션 솔루션(global illumination solution)을 갱신하는데 걸리는 시간은 사용가능한 작업 쓰레드(worker thread)의 수에 영향을 받습니다. 필요한 경우, Lighting 창에 있는 ‘CPU Usage’ 설정을 이용해서 작업 쓰레드의 양을 조절할 수 있습니다.

litclusters
Lit Clustering Scene draw 모드는 클러스터 네트워크 전체에 반사광이 적용된 클러스터를 보여줍니다.

Clustering 또는 Lit Clustering Scene draw 모드를 통해서 클러스터를 시각화할 수 있습니다. Clustering 모드를 사용하면, 씬에 여러 색상의 정사각형으로 구성된 진단 패턴(diagnostic pattern)이 중첩되어 표현됩니다. 각 사각형의 크기는, 해당하는 Static 메쉬에 매핑될 때의 클러스터의 크기를 나타냅니다. 각각의 고유한 색상은 씬의 서로 다른 클러스터를 나타냅니다. 이와 유사하게, Lit Clustering Scene draw 모드는 클러스터 네트워크 전체에 반사광이 적용된 클러스터를 보여주며, 이 결과는 다시 클러스터에 저장됩니다.

클러스터의 수를 줄이면, 이 업데이트 작업이 얼마나 자주 발생할지 결정합니다. 그래서 결과적으로 미리 계산되는 실시간 GI(Precomputed Realtime GI)가 타겟 플랫폼에서 표현될 방식이 결정됩니다. 더 중요한 점은 이 강좌의 목적에 따라서, 클러스터의 수를 줄이면 라이팅을 계산하는 시간을 단축시킬 수 있다는 점입니다. 그 결과로, 씬에 라이팅 작업을 할때 반복해야하는 작업의 속도가 향상됩니다. 클러스터의 수를 줄이는 방법에 대해서는 다음 섹션에서 살펴보겠습니다.

 

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

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

감사합니다 🙂

 

다음글 – Fine tuning with Lightmap Parameters

RonnieJ

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

답글 남기기

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

Please turn AdBlock off

Notice for AdBlock users

Please turn AdBlock off