안녕하세요! 오늘 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. 에셋 번들을 만들 때 팁입니다.
텍스처를 공유하는 마테리얼 두개를 만들 경우,
그림처럼 각자 번들에 하나씩 세트로 추가되게 됩니다.
미리 텍스처 자체를 에셋 번들로 만들어 두면, 이를 일관성 있게 참조하게 할 수 있습니다. 메모리 낭비를 줄이는 셈이죠.
이상입니다! 정말 배울 게 많은 강연이었고, 앞으로도 쓸 수 있는 것들만 가르쳐준 정말 실속 있는 강연이었다는 생각이 듭니다.
'유니티 게임 개발하기' 카테고리의 다른 글
유나이트 2017 ( Unite 2017 ) 5/16 강연 정리! (0) | 2017.05.16 |
---|---|
유니티 게임 개발하기 (4) - 캐릭터를 따라다니는 카메라를 만들자. (0) | 2015.05.13 |
유니티 게임 개발하기 (3) - 플레이어 캐릭터와 애니메이션 만들기 (0) | 2015.04.27 |
유니티 게임 개발하기 (2) - 움직이는 오브젝트 만들기. (0) | 2015.04.23 |
유니티 게임 개발하기 (1) - 설치와 준비. (3) | 2015.04.22 |