기본 개념은 다음 글에서 참고
[유니티] 오클루전 컬링 - 기본 개념
오클루전 컬링 - 오클루전 컬링은 어떤 게임 오브젝트가 다른 게임오브젝트에 의해 카메라 뷰에서 완전히 가려진 게임 오브젝트에 대한 렌더링 계산을 수행하지 못하도록 하는 프로세스이다. -
srdeveloper.tistory.com
다음은 오클루전 컬링 설정을 위한 예시이다.
위 그림에서 Wall 게임 오브젝트는 정적 게임오브젝트, Ball은 동적 게임오브젝트로 오클루전 컬링을 설정해 볼것이다.
카메라 설정
- 카메라 컴포넌트에서 Occlusion Culling 플래그를 활성화 시켜준다.
Wall 게임오브젝트
- 정적 게임오브젝트로 컬링 데이터를 베이크할 것이기 때문에 렌더러에서 Dynamic occlusion 플래그를 활성화시켜줄 필요는 없다.
- 게임 오브젝트의 Static 옵션에서 Occluder Static과 Occludee Static을 선택해준다.
※※ 일반적으로 정적 오브젝트는 일일이 선택하기보다는 모든 종류의 Static을 선택해주는데 여기서는 그렇게 하지 않았다.
Ball 게임 오브젝트
- 동적 게임오브젝트로 설정해야하므로 렌더러에서 Dynamic occlusion 플래그를 활성화 시켜준다.
오클루전 컬링 창
- 상단 메뉴에서 Window
→Rendering
→Occlusion Culling
을 눌러 오클루전 컬링 창을 연다.
- Bake 카테고리를 눌러 각 옵션을 설정해주는데 옵션별 기능은 다음과 같다.
- Smallest Occluder
- 다른 게임 오브젝트를 가릴 수 있는 가장 작은 게임 오브젝트의 크기(M단위)이다.
- 일반적으로 가장 작은 파일 크기와 가장 빠른 베이크 시간을 위해 씬에서 최상의 결과를 제공하는 가장 높은 값을 선택해야한다.
- Smallest Hole
- 카메라가 들여다 볼 수 있는 가장 작은 간격의 직경(M단위)이다.
- Smallest Occluder와 같이 최상의 결과를 제공하는 높은 값을 선택하는 것이 좋다.
- Backface Threshold
- 베이크 된 크기를 줄여야 하는 경우 유니티는 베이크할 때 씬을 샘플링하고, 표시되는 오클루더 지오메트리가 특정 비율의 후면 이상으로 구성된 씬의 일부를 제외할 수 있다.
- 높은 비율의 후면이 있는 영역은 지오메트리 아래 또는 내부에 있을 가능성이 높으므로, 런타임 시점에 카메라가 있을 가능성이 낮다.
- 기본값 100은 데이터에서 영역을 제거하지 않는다. 값을 낮추면 파일 크기가 작아지지만, 시각적 결함이 발생할 수 있다.
베이크
- 가볍게 사용법을 파악하기 위한 글이니, Smallest Occluder값을 1로 하고 베이크를 한다.
- 베이크를 하게 되면, 프로젝트 창에는 씬의 이름으로 폴더가 생성되고 그 안에 컬링 데이터가 생성되어있는것을 확인할 수 있다.
- 오클루전 컬링이 적용된것을 눈으로 확인하고 싶으면 오클루전 컬링 창에서 Visualization
을 선택하면 컬링 화면을 확인할 수 있다.
- 다음 사진과 같이 씬 뷰에서는 컬링된 결과를, Status창에서는 Batches와 Saved by batching의 수치가 줄어든 것을 확인할 수 있다.
※※ 만약 Visualization을 눌러도 컬링이 되지 않는다면 카메라가 컬링 범위(노란색 범위)에 있는지 확인해볼 것. 카메라가 범위 밖으로 나가면 컬링 연산을 하지 않는다.
동적 오클루전(Dynamic Occlusion)
- 동적 게임오브젝트의 경우 오클루전 컬링을 하려면 Dynamic Occlusion 플래그를 활성화해야 한다고 언급했다.
- 만약 해당 플래그를 비활성화한 뒤, Visualization으로 확인해보면 다음과 같이 컬링이 되지않는것을 확인할 수 있다.
결과
추가 주의점
- Smallest Occluder의 값은 작을수록 컬링 정밀도가 올라가지만, 정밀도가 올라갈수록 데이터 크기가 늘어나고 연산 오버헤드가 발생하므로 적절한 수치를 적용하는것이 좋다. (이러한 경험적으로 얻는 수치를 매직 넘버라고 부른다.)
- 야외 씬과 같은 경우 폐쇠되지 않고 오픈되어있는 환경이기 때문에 오클루전 컬링이 그다지 효율적이지 않다.
'Develoment > Graphics' 카테고리의 다른 글
[유니티] 배칭(다이나믹, 스태틱) (0) | 2022.04.27 |
---|---|
[유니티] 모바일 기본 쉐이더 (0) | 2022.04.24 |
[유니티] 오클루전 컬링 - 기본 개념 (0) | 2022.04.20 |
[유니티] 벚꽃잎 흩날리는 파티클 (0) | 2022.04.18 |
그래픽스(렌더링) 파이프라인 (0) | 2022.04.18 |