본문 바로가기

Unreal/최적화

[UE] 커스텀 뎁스로 인한 오클루전 컬링 해제 이슈

레벨 최적화를 하다가 알게 된 사실이 있는데 커스텀 뎁스가 켜진 매쉬는 오클루전 컬링에서 제외됩니다.

 

 

일반적으로 벽 뒤에 매쉬를 세우면 오클루전 컬링으로 뒤에 있는 매쉬는 렌더링이 걸리지 않습니다.

 

 

렌더독으로 확인해 보면 베이스 패스에 큐브만 있는 걸 볼 수 있습니다.

 

 

벽 뒤에 있는 매쉬에 커스텀 뎁스를 활성화하고 

 

 

렌더독으로 다시 보면 벽 뒤에 있는 매쉬가 찍힌 걸 볼 수 있습니다.

 

 

원인을 알기 위해 코드를 살펴봅시다.

 

오클루전 컬링을 할 때 SceneProxy 별로 조건 검사합니다.

 

 

그중 하나가 EOcclusionFlags::CanBeOccluded 플래그가 있는지를 검사하는 것인데 이것이 없다면 오클루전 컬링에서 제외됩니다.

 

 

해당 플래그는 SceneProxy가 추가될 때 설정됩니다.

 

 

Proxy의 CanBeOccluded 함수 내부를 보면 !ShouldRenderCustomDepth가 있어서 커스텀 뎁스가 켜진 매쉬는 오클루전 컬링이 안되는 이유입니다.

 

 

생각해 보면 커스텀 뎁스는 기존의 뎁스 버퍼외 다른 뎁스 버퍼에 그려지기에 일반적인 오클루전 컬링에서는 제외되는 게 맞는 듯합니다.

 

최적화를 위해서는 커스텀 뎁스 기능은 필요할 때만 켜주는 것이 좋습니다.