본문 바로가기

유니티 게임 개발하기

Unite 2017 - Optimizing Unity: 강연 요약.



안녕하세요! 오늘 Optimizing 부분에 대해서 들었던 강연에 대해 정리를 해 볼까 합니다!

PPT는 unite에서 제공해 주는 자료를 필요한 부분만 가져와 올렸습니다.

혹시나 저작권에 문제가 된다면 말씀주세요! 그런 부분을 밖에서 못 찾아서 자료로 쓰려고 가져온 거라서, 문제가 되면 바꿔야 할 거 같아요.





1. Unity의 Transform 이동 최적화.


유니티의 트랜스폼은 저희가 코딩하는 것 말고도 뒤에서 많은 메세지 전송을 거칩니다. 

특히 postion과 rotation 이 일어날 때, 각각 다른 메세지를 사용하는데요.

Unity는 최근에 SetPositionAndRotation 이라는 함수를 추가하여 1개의 메세지로 이를 해결할 수 있도록 하였습니다.

아래처럼, Transform 의 이동, 회전에는 통합된 메세지를 사용해 주시면 현재의 절반의 비용으로 유니티의 이동 회전 함수를 굴릴 수 있을 겁니다.




2. Transfrom의 경우, Child 들에게도 전부 동일한 메세지를 전달하게 됩니다. 


아래처럼 엄청나게 많은 차일드가 존재하는 캐릭터같은 경우 그만큼 퍼포먼스에 부담을 주게 되죠.



하지만 intspector 에서 옵티마이제이션을 켜 주면, 이부분을 매우 완화해 줄 수 있습니다.

유니티 내부에서 이를 지원한다고 하네요.





3.  씬 내부에서의 동작 최적화


씬 내부에 오브젝트들이 많이 놓여 있으면, 그 밀도가 높을수록 컴퓨터는 부담을 받습니다.

아래 표와 같이 1000 개의 레이캐스트를 실행하는데  콜라이더가 많을 수록 더 많은 시간이 걸리는 것을 알 수 있죠.


유니티의 물리계산 과정은 다음의 3 단계를 거칩니다.

잠재적인 충돌자를 월드 내에서 구하고 -> 레이어로 한번 거른 다음 -> 실제로 전부 충돌하는지 검사합니다.




따라서 잠재적인 충돌을 줄이면 좋은데요, 아래 표를 보시면 알겠지만 밀도 자체를 줄이는 게 어려울 때는,

레이캐스트가 뻗는 거리를 줄여주거나, 물리 레이어 항목을 수정정하고 나눠 주거나,


아니면 아예 계산을 30프레임 마다만 하도록 해 주거나 하는 방법이 있습니다.



4. 메모리 관리

• https://bitbucket.org/Unity-Technologies/memoryprofiler


-> 빗버켓을 통해 메모리 관리를 위한 그림을 보실 수 있습니다.

실제 게임이 메모리를 어떻게 처리하는지 보고, 클릭해서 확인할 수 있습니다.

과도하게 메모리를 가지고 있다면, 그 메모리에 들어가는 리소스 용량을 줄이는 식으로 좀더 최적화 할 수 있을 겁니다.



5. 에셋 번들을 만들 때 팁입니다.

텍스처를 공유하는 마테리얼 두개를 만들 경우, 

그림처럼 각자 번들에 하나씩 세트로 추가되게 됩니다.

미리 텍스처 자체를 에셋 번들로 만들어 두면, 이를 일관성 있게 참조하게 할 수 있습니다. 메모리 낭비를 줄이는 셈이죠.




이상입니다! 정말 배울 게 많은 강연이었고, 앞으로도 쓸 수 있는 것들만 가르쳐준 정말 실속 있는 강연이었다는 생각이 듭니다.