[유니티 TIPS] 알쓸유잡 | 카메라와 컬링 완벽 이해
💡 카메라와 컬링
- 카메라에 오브젝트가 그려지기 위해서는 매 프레임마다 오브젝트가 변환을 거치게 됨
- 가만히 있는 상황에서도 내부적으로 Transform 변환이 일어남
- 이러한 변환들은 Vertex에서 일어나는 것
- Mesh가 움직이는 게 아니고 Vertex가 움직이는 것
- 하나의 오브젝트는 여러 개의 점들로 구성되어 있고, 이 점들이 연결되어 폴리곤을 만들며, 이 폴리곤들이 모여 메쉬를 만들게 됨
- Model(Local/Object) Space : Unity Scene에 올라가있지 않은 모델만 있는 상태의 공간
- 오브젝트 자체의 공간이 따로 있는 것
- 오브젝트를 Unity Scene에 올리게 되면 특정 데이터를 가지고 그 좌표로 이동하게 됨
→ World Space : World 기준의 공간
→ World Transform : World 기준으로 오브젝트가 위치하는 것
- 우리는 카메라를 통해 오브젝트를 보게 되므로, 카메라를 기준으로 정렬이 되어야 함
→ View(Camera) Space : 카메라 기준 공간
→ View Transform : 카메라 기준 공간으로 위치 변환
- 모델 공간 → 월드 공간 → 카메라 공간 변환이 매번 일어남
- 위 과정을 거친 후 모니터에서 보기 위해서는 모니터 공간으로 오기 위해 Projection이라는 과정을 거치게 됨
- 3D 공간을 2D 모니터에 표현하기 위해 Clip Space라는 공간으로 변환
→ Projection Transform
- Projection을 통해 원근법을 적용
- Perspective Camera
- 3D에서 주로 사용
- 원근법이 적용된 Projection
- World, View 변환 등은 행렬을 통해 이루어짐
- Vertex에서는 항상 복잡한 수학적 계산이 일어남
🐰 Frustum Culling
- Unity가 기본적으로 제공
- 카메라가 비추는 공간을 Frustum이라고 함
- Frustum 공간 안에 오브젝트가 있는지 없는지 여부에 따라 오브젝트를 그리는 것
- 오브젝트의 Transform을 기준으로 영역에 걸쳐있는 것은 그림
- Far와 Near를 설정
→ Far보다 멀리 있으면 그리지 않는다
→ Near보다 가까이 있으면 그리지 않는다
![](https://velog.velcdn.com/images/lazypotato/post/b949d31c-8509-48df-ae4b-0a1b595dd19b/image.png)
- 모바일 게임은 Far 값을 많이 줄임
- 크게 설정하면 멀리 있는 것까지 다 그리기 때문
- 딱 잘린 것처럼 보이지 않기 위해 Fog 처리를 함
- Fog End와 Clipping Far를 비슷하게 설정
- 오브젝트를 덜 그리기 위해 사용했던 것이 Top-Down View
🐹 Occlusion Culling
- 가려지는 것들은 그리지 않음
- Frustum 안에 있어도 다른 오브젝트 등에 의해 가려지면 그리지 않음
- Unity에서는 Umbra라는 시스템을 사용하여 구현
- 보통 Indoor 게임에서 사용
- Outdoor에서 적용하면 연산 효율이 떨어짐
- Occluder : 가리는 오브젝트
- Occludee : 가려지는 오브젝트
- Occlusion 성능을 높이기 위해서는 적절한 조절이 필요 (매직 넘버!)
- 공간을 너무 크게 자르면 Culling 효율이 떨어짐
- 공간을 너무 촘촘하게 자르면 연산 오버헤드가 발생할 수 있음
- Occlusion Portal
- 문 오브젝트에 Portal이라는 컴포넌트를 추가
- 문이 열리면 Portal의 open을 true로 설정
→ 문이 열리고 닫힘에 따라 가려지는 오브젝트의 연산을 할지 안 할지 결정할 수 있음
🐣 Culling Mask
- Unity는 Culling을 먼저 하고 Layer 필터링을 함
- Culling Mask를 설정한다고 해서 Culling 효율이 좋아지지는 않음
- 카메라가 여러 개 존재해야 한다면 Cinemachine 사용을 추천
- Cinemachine 자체가 Culling이나 Rendering을 하지 않음
- 실제 카메라를 컨트롤
- Camera Stacking
- 실제 카메라를 많이 써야 할 경우 Frustum이 겹치지 않도록 사용하는 것을 추천
🦝 LOD
- 멀리 떨어진 것들은 그리지 않음
- Outdoor에서 활용
Unity의 카메라에 대해서 오해하고 있던 것들을 바로 잡고 새로운 사실도 배워서 너무나도 유익했다..!!!
아직도 모르는 것들이 산더미구나 새삼 깨닫기
끗!!