Unity 내일배움캠프 TIL 1110 | Unity의 Camera와 Culling

cheeseonrose·2023년 11월 11일
0

Unity 내일배움캠프

목록 보기
76/89
post-thumbnail

[유니티 TIPS] 알쓸유잡 | 카메라와 컬링 완벽 이해



💡 카메라와 컬링

🐱 MVP Transform (Vertex Transform)

  • 카메라에 오브젝트가 그려지기 위해서는 매 프레임마다 오브젝트가 변환을 거치게 됨
  • 가만히 있는 상황에서도 내부적으로 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보다 가까이 있으면 그리지 않는다
  • 모바일 게임은 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의 카메라에 대해서 오해하고 있던 것들을 바로 잡고 새로운 사실도 배워서 너무나도 유익했다..!!!

아직도 모르는 것들이 산더미구나 새삼 깨닫기


끗!!

0개의 댓글