유니티/공통

유니티 - 카메라와 컬링에 대해 알아보자 (feat. LOD)

근본넘치는개발자 2024. 11. 28. 23:59

2024.11.27 - [분류 전체보기] - 게임 그래픽스에 대해 알아보자 #1 (렌더링 파이프 라인)

 

오늘은 카메라와 컬링에 대해 정리해 보고자 합니다.

Culling ?

3D 그래픽스에서 불필요한 렌더링을 제거하는 최적화 기술

 

컬링은 CPU 영역에서 대상을 체크하고,

실제 잘리는 건 GPU 영역, 렌더링 파이프라인 단위에서 이루어진다고 합니다. 

 

(엔진 단위에서의 컬링 설명)

 

MVP Transformation(Vertex Transformation) 

모델 공간 -> 월드 공간 -> 카메라 공간(View 공간)-> Projection Transform 공간으로

변환 과정을 통해 3D 공간 객체를 2D 화면에 표시하는 과정을 말합니다.

Frustum Culling

카메라의 시야 범위(프러스텀) 밖의 오브젝트를 렌더링하지 않는 기술

 

유니티에서 카메라를 추가했을 때 네모난 범위를 보신 적이 있으실 겁니다.

이게 프러스텀 입니다. 오..

 

 

 

프러스텀 컬링 범위 안에 물체가 들어갔는지 확인하고 싶으시다면

다음 함수로 확인 할 수 있습니다.

 

OnBecameVisible(): 오브젝트가 카메라의 시야에 들어와서 보이게 될 때 호출

OnBecameInvisible(): 오브젝트가 카메라의 시야에서 벗어나서 안 보이게 될 때 호출

 

https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnBecameVisible.html

 

Spatial Partiton

프러스텀 컬링에 걸릴 때마다 모든 오브젝트를 컬링 처리하지 않고

공간분할( Spatial Partiton )의 기법을 사용하여 부분만 처리한다고 합니다.

(3d에서는 Octree, 2d는 Quadtree 방식 / 범위를 몇 번 나누느냐에 따른 개수)

 

Quadtree

Occlusion Culling

가려지는 건 그리지 않는 기법

 

 

Occluder(가리는 물체) / Occludee(Occluder에 의해 가려지는 물체)

 

Culling Mask

유니티는 Culling을 먼저하고 Layer필터링을 한다고 합니다.

 

 

 

여러 대의 카메라를 사용해야 하는 경우

 

멀티 카메라는 성능 부담이 있으므로

카메라가 여러 대여야 한다면 Cinemachine을 사용하는 걸 권장하는 듯합니다.

 

카메라를 여러 대 사용해야 하는 경우라면

가급적 카메라의 프러스텀이 겹치지 않게 사용하는 게 좋습니다.

(프로스터가 겹치는 경우 여러 번 처리될 수도 있기에)

 

이런 경우엔 카메라의 Stack을 활용하면 좋습니다.

 

 

stacking 안에 추가한 Camera가 서로 화면을 그리고 최종적으로 Game 뷰에서 합쳐집니다.

(stacking 할 카메라의 Render Type은 Overlay로 설정해 주어야 합니다.)

 

 

LOD(Level of Distance)

- 거리에 따라 오브젝트의 상세도를 조절하는 기법

(시각적으로 어느 정도 멀리 떨어진 것들을 컬링시킴)

 

마무리 

오늘은 간단하게 카메라와 컬링에 대해 정리해 봤습니다.

이전에 작성한 게임 그래픽스 글 내용과 겹치는 부분이 있어서

한번 읽어봐 주시면 감사하겠습니다.

 

참고한 자료

https://youtu.be/O0qliGO7Oes?si=1NwbVYoiuLO88ZI0