내일배움캠프 78일차 TIL : 최적화

woollim·2025년 1월 14일

내일배움캠프TIL

목록 보기
71/74
post-thumbnail

■ 오늘계획

○ 할 일 목록

  • 다음 보상 정보 안맞는거 수정
  • 보상 관련 오브젝트 및 UI 코드 정리
  • 최고층 도달 함수 위치 변경으로 인한 오류 탐색(특히 보물방)
  • 게임 매니저 대공사
  • 휴게층 입장 로직 수정(현재는 UI에서 진행되고 있는데 매우 옳지 않다)
  • 보물방 추가 명성치, 골드 빼버리기
  • 던전에서 '도망가기' 버튼 만들기
  • 무한 스테이지 모드
  • 스테이지 나가기 버튼 클릭시 몬스터 정리안되는 버그 확인
  • 움직이지 않는 오브젝트 static 설정
  • 오클루전 컬링
  • 절두체 컬링


■ static

○ 마을씬

  • 움직이지 않는 오브젝트는 인스펙터창에서 static을 체크합니다.
  • 움직이는 불은 따로 체크해제 했습니다. (움직이는 오브젝트로 static으로 설정하면 화면에 잔상처럼 이상하게 나옵니다)
  • 적용 결과 : Batches 는 300 하락, FPS는 8 정도 상승 했습니다.



■ 오클루전 컬링 (Occlusion Culling)

○ 개념

  • 오클루전 컬링(Occlusion Culling)은 카메라의 시야에서 보이지 않는 오브젝트를 렌더링하지 않도록 최적화하여 성능을 향상시키는 기술

○ 원리

  • 오클루전 테스트

    • 오브젝트가 카메라의 시야에 포함되어 있어도 다른 오브젝트에 의해 가려진 경우, 해당 오브젝트는 렌더링되지 않습니다. 이를 오클루전 테스트라고 합니다.
  • 뷰 프러스텀 컬링(View Frustum Culling)

    • 카메라의 시야 밖에 있는 오브젝트를 렌더링하지 않는 기술로, 오클루전 컬링과 함께 사용됩니다.
  • 오클루더(Occluder)

    • 다른 오브젝트를 가리는 역할을 하는 오브젝트입니다. 오클루더 뒤에 있는 오브젝트는 보이지 않기 때문에 렌더링되지 않습니다.

○ 사용방법

  • 오클루전 컬링 데이터 생성

    • Window > Rendering > Occlusion Culling 메뉴를 통해 오클루전 컬링 창을 엽니다.
    • 베이크(Bake) 버튼을 사용하여 현재 씬의 오클루전 데이터를 생성합니다.
  • 오클루더와 오클루드 결정

    • Static으로 설정된 오브젝트만 오클루더 역할을 할 수 있습니다.
    • Inspector에서 해당 오브젝트의 Static 설정에서 Occluder Static 또는 Occludee Static을 체크합니다.
  • 카메라 설정

    • 카메라 컴포넌트에서 Occlusion Culling 옵션이 활성화되어 있는지 확인합니다.

○ 장점

  • 렌더링 최적화: 보이지 않는 오브젝트를 렌더링하지 않으므로 GPU 부하를 줄입니다.
  • 프레임 속도 향상: 연산량이 줄어들어 전체적인 성능이 향상됩니다.

○ 주의사항

  • Static 오브젝트만 적용 가능:

    • 오클루전 컬링은 움직이지 않는 오브젝트(Static)에서만 효과적입니다.
  • 오클루전 데이터 크기:

    • 베이킹된 오클루전 데이터가 너무 크면 메모리 사용량이 증가할 수 있습니다.
  • 복잡한 씬:

    • 오클루전 컬링 자체의 계산이 과도하게 복잡하면 성능에 영향을 줄 수 있으므로 테스트가 필요합니다.

○ 프로젝트 적용

  • 마을씬에 오클루전 컬링을 적용하기 위하여 먼저 오클루전 컬링 인스펙터창을 엽니다.
  • 설정 이후 베이크 버튼을 클릭
  • 적용 결과 : Batches 는 50 정도 하락, FPS는 7 정도 상승 했습니다. (static 적용했을때처럼 드라마틱 하진 않네요)




■ 절두체 컬링

○ Far Clip Plane 개념

  • 3D 그래픽 엔진에서 카메라의 시야 범위를 정의하는 두 가지 경계면 중 먼쪽 경계면을 의미합니다. 이는 카메라가 렌더링할 수 있는 최대 거리를 결정합니다.

○ Far Clip Plane의 역할

  • 렌더링 거리 제한

    • Far Clip Plane보다 더 먼 거리에 있는 오브젝트는 카메라에 보이지 않으며 렌더링되지 않습니다.
  • 성능 최적화

    • 필요 없는 먼 거리에 있는 오브젝트를 렌더링하지 않아 GPU 및 CPU의 작업량을 줄입니다.
  • 시야 조정

    • 카메라가 보여주는 장면의 범위를 설정함으로써, 적절한 장면의 구성과 렌더링 성능을 동시에 관리합니다.

○ Far Clip Plane과 관련된 설정

  • Unity에서 설정 방법

    • 카메라 컴포넌트를 선택한 후, Inspector 패널에서 Far Clip Plane 값을 설정할 수 있습니다.
    • 기본값은 일반적으로 1000으로 설정되며, 사용자가 필요한 범위에 따라 조정할 수 있습니다.
  • Far Clip Plane과 Near Clip Plane

    • Near Clip Plane은 카메라에서 가장 가까운 경계면을 정의합니다.
    • 두 값은 함께 View Frustum(뷰 프러스텀)이라는 피라미드 형태의 시야 공간을 정의하며, 카메라가 렌더링할 장면의 영역을 나타냅니다.

○ 적절한 Far Clip Plane 값 선택

  • 짧게 설정해야 하는 경우:

    • 성능 최적화가 중요한 경우.
    • 멀리 있는 오브젝트가 장면에서 중요하지 않은 경우.
  • 길게 설정해야 하는 경우:

    • 큰 규모의 환경이나 배경을 렌더링해야 하는 경우.
    • 예: 오픈 월드 게임이나 하늘 배경 렌더링.
  • 주의 사항:

    • Far Clip Plane 값이 너무 크면 Z-Fighting(깊이 버퍼 충돌)이 발생할 수 있습니다. 이는 깊이 버퍼의 정밀도 제한으로 인해 가까운 오브젝트와 먼 오브젝트 간에 그래픽 충돌이 발생하는 현상입니다.
    • Near Clip Plane과 Far Clip Plane 간의 거리가 너무 멀 경우, 깊이 버퍼의 비율이 비효율적으로 할당되어 그래픽 품질이 저하될 수 있습니다.

○ 프로젝트에 적용

  • 버츄얼 카메라의 Far Clip Plane 을 1000 -> 45 로 변경
  • 오클루전 컬링은 카메라 뒷편을 랜더링 하지 않는 방식이지만, 카메라 시야에 들어오는 전방은 끝까지 랜더링 되었습니다. 또한 사물에 가려지는 영역도 랜더링 합니다.
  • Far Clip Plane은 먼쪽 경계면, 최대 거리를 결정합니다.
  • 둘다 사용한다면 앞 뒤 쪽 모두 랜더링을 제한하여 최적화에 효과를 볼 수 있습니다.

0개의 댓글