일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Effective c++
- 메타테이블
- 다형성
- Vector
- 영화
- 오블완
- reference
- resource management class
- c++
- 언리얼
- exception
- lua
- 예외
- UE4
- 상속
- virtual function
- Smart Pointer
- 게임
- effective stl
- more effective c++
- 비교 함수 객체
- 암시적 변환
- 루아
- 티스토리챌린지
- operator new
- implicit conversion
- 영화 리뷰
- 스마트 포인터
- 반복자
- 참조자
- Today
- Total
스토리텔링 개발자
[UE4] 컬링(Culling) 본문
개요
게임에는 수많은 오브젝트들이 배치됩니다.
하지만 그 배치된 오브젝트들이 늘 그려질 필요는 없을 것입니다.
전혀 노출되지 않는 오브젝트까지 매번 계산하여 그리는 건 낭비이기 때문입니다.
이렇게, 필요 없는 상황에 렌더링을 하지 않게 하는 기법을 컬링이라고 합니다.
액터의 바운드
그려지지 않는 액터를 구분하기 위해서는,
우선 액터가 카메라의 시야에 있는지 없는지를 체크하기 위한 기준이 필요합니다.
액터는 컬링(가시성 테스트)을 위해 (박스형 + 구형)의 바운드 세트를 가지고 있습니다.
각각은 다음과 같습니다.
구형 바운드
간단한 거리 테스트에 사용합니다.
박스형 바운드
액터의 본 모양에 가까운 형태로 설정되어, 좀 더 정밀한 테스트에 사용합니다.
컬링의 종류
컬링이 필요한 상황은 각양각색입니다.
아래는 각 종류별 컬링입니다.
다이내믹 오클루전(Dynamic Occlusion)
다른 오브젝트에 가려져서 보이지 않는 오브젝트들을 컬링합니다.
실시간으로 가려졌는지 확인하기 때문에 자원을 많이 소모합니다.
하지만 무버블 오브젝트에도 적용이 가능하다는 장점이 있습니다.
하드웨어 오클루전 쿼리
매 프레임 액터 별 가시성 검사 쿼리를 GPU에 보냅니다.
하드웨어 오클루전 쿼리 비용은 GPU 에서 수행되는 쿼리 수에 비례합니다.
즉, 다른 컬링을(디스턴스, 프리컴퓨티드 등) 혼용하여 사용하면 GPU로 보내는 쿼리 비용이 줄어들므로, 자원을 좀 더 효율적으로 사용할 수 있습니다.
액터의 가시성은 한 프레임 뒤에 읽어 오므로, 카메라가 매우 빨리 움직이는 경우 튀는 현상이 생길 수 있습니다.
모바일용 소프트웨어 오클루전 쿼리
액터에 지정된 레벨 오브 디테일(LOD)을 사용하여 그 뒤의 액터를 가리는 오클루전 메서드입니다.
GPU에서 처리하는 하드웨어 오클루전과 달리 CPU에서 씬을 래스터라이즈하여 액터를 컬링합니다.
보수적으로 설계되어 있기 때문에 모든 모바일 디바이스에서 사용할 수 있습니다.
하드웨어 오클루전 쿼리는 모바일에서 2 프레임 지연되지만 소프트웨어 오클루전은 1 프레임 지연됩니다.
이 컬링 메서드를 활성화하려면 프로젝트 세팅에서 렌더링 > 모바일에서 Support Software Occlusion Culling 옵션을 켜면 됩니다.
뷰 프러스텀(View Frustum)
카메라 시야(FOV)의 가시 화면 영역을 사용하여 이 공간 안에 없는 오브젝트를 컬링합니다.
디스턴스 컬링(Distance Culling)
액터와 카메라와의 거리를 측정하여 그보다 먼 오브젝트는 컬링합니다.
액터 별 디테일의 LOD에서 카메라와의 거리를 설정하거나 컬 디스턴스 볼륨을 배치하는 것으로 설정합니다.
프리컴퓨티드 비저빌리티(Precomputed Visibility)
각 위치별로 그 자리에서 보일 수 있는 스태틱 오브젝트들을 미리 계산해두는 방식입니다.
때문에 각 정보들을 미리 계산해두는 과정(베이킹)이 필요합니다.
대신 실시간으로 계산하지 않기 때문에 런타임 성능으로는 이점이 있습니다.
프리컴퓨티드 비저빌리티 볼륨을 설치하고 라이팅 빌드(베이킹)를 진행하면 비저빌리티 셀이 생성됩니다.
프리컴퓨티드 비저빌리티의 단점은 다음과 같습니다.
- 무버블 액터는 처리하지 않습니다.
- 불투명이 아닌 머티리얼, 즉 반투명이나 마스크드 머티리얼은 처리하지 않습니다.
- 셀은 표면 위에만 배치됩니다. 비행 모드가 있는 프로젝트에는 무용지물입니다.
- 모든 데이터가 퍼시스턴드 레벨에 저장되기 때문에 레벨 스트리밍이 효율적이지 않습니다.
- 스태틱 섀도를 드리우는 트라이앵글만 오클루전이 일어납니다.
'개발 > 언리얼 엔진' 카테고리의 다른 글
[UE4] 상위 객체 (Outer / Owner / AttachParent) (0) | 2021.10.01 |
---|---|
[UE4] 텍스쳐 스트리밍 시스템(Mipmap) (0) | 2021.09.29 |
[UE4] 오브젝트 생성(Create Object) (0) | 2021.09.13 |
[UE4] 언리얼 프로퍼티(리플렉션) 시스템(Unreal Property System) (0) | 2021.08.24 |
[UE4] 프로퍼티(UPROPERTY) (0) | 2021.08.18 |