Unity 그래픽 최적화를 위한 Batches관리

2022. 7. 22. 05:03Unity/VR

이번 포스팅은 개인적으로 프로젝트를 진행하면서 프레임률에 큰 문제를 주었던 드로우콜을 관리 하기위해 

가장 유용했던 방법을 기술하기 위해 작성해보려한다.

 

기본적으로 Batches를 관리하기위해서는 여러가지 방법이 있지만 대표적으로는 당연히

"머터리얼을 통합한다"가 가장 대표적인 방법이다. 

 

하지만 개발을 진행하다 보면 최대한 머터리얼의 통합을 진행하여도 왜인지 배치가 줄어들지 않는 현상을 분명히 볼 수 있을 것이다. 본인도 개인 프로젝트에서 3D에셋들은 거의 다른 곳에서 가져오는 편이라 머터리얼을 통합에는 한계가 있었고 그렇다고 에셋들을 덜 배치하는 것도 퀄리티에 문제가 있었다.

 

그렇기에 선택한 것이 선택적 쉐도우 관리이다.

 

현재 건물의 모습을 보자. 한눈에봐도 다양한 물체들이 있고 다 개별로 머터리얼을 가지고 있는 것이 보인다.

여기서 그래픽 최적화를 위해서는 크게 여러 방법이 떠오르는데

1. 부품들의 갯수를 줄인다.(퀄리티 다운)

2. 머터리얼을 통합한다.

3. 스태틱 배칭을 한다.

3. 건물의 그림자를 끈다.

 

여기서 필자는 먼저 1번과 2번, 3번을 끝내 놓은 상태였다. 참고로 스태틱배칭은 조금만 찾아보면 자세하게 기술되어있는 자료들이 많기에 넘어 가겠다.

하지만 1번과 2번, 3번을 통해 줄어든 배치는 1/4정도였고 목표 프레임까지는 도달하지 못하였다. 그래서 건물을 더 자세히 뜯어보던 중 건물의 모든 부분이 모듈화가 되어있는 것을 확인 하였고 이 모듈들 대부분 메쉬랜더러의 shadow가 켜져있는 것을 확인하였다.

여기서 나는 과연 이 모듈들 하나하나에 그림자를 넣는다고 과연 VR을 착용했을 때 그 모습이 드라마틱하게 차이가 있을까? 라는 고민을하게 되었고 내 대답은 No였다. 왜냐하면 가장 눈에 띄는 그림자인 건물 전체 그림자만 있으면 사용자입장에서는 "아 그림자가 제대로 구현 되어있구나"라고 생각할테니 말이다.

 

그렇게해서 건물전체의대한 그림자를 제외한 나머지 모듈들의 그림자를 제거해 보았다.

위와 같은 사진을 사용하였다. 위 모습을 보면 대부분의 모듈들의 그림자가 꺼져있는 상태지만 전혀 눈치를 챌 수가 없다.물론 정말 자세히보면 그림자가 있어야 할 곳에 그림자가 없다. 하지만 엄청나게 확대를 해야 보일 만큼이다. 

 

그렇게 마을 전체 건물 작은 모듈들의 쉐도우를 끄니 배치가 1/3을 더 줄일 수 있었다. 그렇게 초기 목표 프레임까지 도달할 수 있었다.

VR을 착용해도 VR자체 이슈 스파이크를 제외하면 60프레임이 방어가 되는 모습이다. 이는 VR플레이하기 어느정도 쾌적함을 보장해줄 수 있는 수치라고 생각한다.

 

참고로 모듈의 그림자를 끄기전에는 50프레임도 방어를 못했었다.