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 방식 / 범위를 몇 번 나누느냐에 따른 개수)

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