본문 바로가기

유니티

유니티 배치 문제(그래픽 최적화)

1061개의 배치들

레벨디자인을 하던 도중 심상치 않은 배치의 수를 발견했다.

 

카메라를 움직여 확인해보니 풀이 리소스를 굉장히 많이 잡아먹고 있던 것이였다.

 

풀 한포기 심기

하나 심었을 뿐인데 20개나 올라가는 배치..

피씨환경에서는 당장 큰 문제가 아니겠지만 모바일에서 돌아갈 예정이라 문제를 해결하기 급급했다.

 

정적(static)배칭 전후

원하는 오브젝트를 선택 후 인스펙터 상단의 static 체크박스를 선택해주면 전환시킬 수 있다.

게임상에서 움직이지 않는 오브젝트라면 활성화 시켜 드로우콜을 감소시킬 수 있다.

무려 약 2배나 줄어들었다.

 

정적배칭이란 정적인 오브젝트를 큰 메시로 결합해서 렌더링하는 방법을 말한다.

이로인해 렌더링의 부담을 덜 수 있지만, 결합된 데이터를 추가로 저장해야하기 때문에 메모리가 더 필요하다.

 

https://docs.unity3d.com/kr/2019.3/Manual/DrawCallBatching.html

 

드로우 콜 배칭 - Unity 매뉴얼

화면에 게임 오브젝트를 그리려면 엔진이 그래픽스 API(OpenGL, Direct3D 등)에 드로우 콜을 보내야 합니다. 드로우 콜에는 종종 리소스가 많이 사용되고, 그래픽스 API가 모든 드로우 콜에 중요 작업을 수행함으로 인해 CPU 성능이 많이 사용될 수 있습니다. 이 이유는 주로 드로우 콜 간에 수행되는 (다른 머티리얼로 전환하는 등의) 스테이트 변경으로 인해 그래픽 드라이버에서 리소스가 많이 사용되는 확인 및 이동 단계를 수행해야 하기 때문입니다

docs.unity3d.com

 

 

그림자 온오프 전후

게임에서 그림자의 유무가 크게 중요치 않다면 과감하게 꺼버리는 것이 성능에 큰 도움이 된다.

조명 오브젝트의 인스펙터에서 그림자를 오프시킬 수 있다.

 

또한 사진은 없지만

카메라의 인스펙터 항목에서 Far의 수치를(기본수치 1000) 낮추면 성능에 좀 더 도움이 된다.

카메라로부터 월드상의 공간을 어디까지 지켜볼지 정하는 옵션이다.

자신의 게임에 맞게 조절하면 된다.

쉽게 생각하면 배틀그라운드의 옵션 항목중 거리보기 옵션을 낮춘 것과 같다.

 

적당히 조절하여 10~20%정도 추가성능을 얻었다.

 

이와 관련해서 오클루전 컬링을 활용하는 방법도 있겠다.

https://docs.unity3d.com/kr/2019.3/Manual/class-OcclusionArea.html

 

오클루전 영역 - Unity 매뉴얼

움직이는 오브젝트에 오클루전 컬링을 적용하려면 Occlusion Area 를 만든 다음 움직이는 오브젝트가 포지션할 공간에 맞게 영역의 크기를 수정해야 합니다. 물론 움직이는 오브젝트를 정적이라고 표시할 수 없습니다. 빈 게임 오브젝트에 Occlusion Area 컴포넌트를 추가하여 오클루전 영역을 만들 수 있습니다(메뉴의 Component -> Rendering -> Occlusion Area).

docs.unity3d.com

 

이 외에 리소스 자체를 줄여버리는 방법도 있다.

근원을 없애버리면 편하다.

디테일이 크게 중요치 않다면 게임 플레이하는데 방해되지 않는 선까지 과감하게 줄여버려라.

옛날 게임들이 고심을 많이 했을 것이다. 기기의 성능이 충분치 않았으니까.

그나마 타협본다고 2.5D나무라던가.. 멀리서봤을땐 3D같아보였는데 가까이서보니까 2D인 그런 것들

 

아무튼 눈물을 머금고 벌초를 해버렸다.

내 풀..