예전에 소개되었던 Unity 5의 Physics에 대해 간단히 정리하여 포스팅 해볼까 합니다.
(이제 정말 Unity 5가 출시를 목전에 두고 있으므로 새롭게 상기시켜 보는 차원에서..) 
포스팅 내용은 아래 링크들을 참조하였습니다.

http://blogs.unity3d.com/2014/07/08/high-performance-physics-in-unity-5/

https://www.youtube.com/watch?v=ZtcAOQv9GWs&index=7&list=PLX2vGYjWbI0RP5YmvwgqgJQrHGul-Tnr_




PhysX 업그레이드
 Unity 5는 PhysX 를 2.8.3 버전에서 PhysX3.3 버전으로 업그레이드했습니다. PhysX 3 버전은 2.x 버전과는 완전히 달라졌기 때문에, 엔진의 전체 코드 베이스와 인터페이스 역시 달라지게 되었습니다. 하지만 덕분에 Unity 5 에서도 아주 많은 변화를 가져올 수 있었습니다.
 이러한 PhysX 업그레이드로 인해 피직스 성능 상 약 두 배 정도가 빨라지게 되었습니다. 또한 멀티 코어 연산을 본격적으로 지원하게 되었으며, 안드로이드 NEON 인스트럭션 셋 지원 역시 포함되었습니다.

호환성 문제
 Unity 5.0의 피직스는 Unity 4.x와 100% 호환되지 않습니다. 이전 버전 유니티 프로젝트의 피직스 관련 코드를 새로운 프로젝트에 맞게 수정해야 합니다.  

Adaptive Force Off
 사실 PhysX의 adaptive force는 스태킹 시뮬레이션에서 발생할 수 있는 수치에러를 교정하여 안정적으로 만드는 데에 도움을 주지만, 일반적인 상황일 때 월드 범위 기준에서 보았을 때 오히려 해당 기능에 의해 전체적인 불안정성을 증가시킨다는 유저들의 피드백이 많았습니다. 따라서 5 버전에서는 Adaptive force 를 스위치 온오프가 가능하게 하였고, 디폴트로는 그 기능을 꺼두게 되었습니다. 

스태틱 컬라이더 이동
 스태틱 컬라이더를 이동하는 것에 대한 비용을 대폭 줄였습니다. 스태틱 컬라이더는 Rigidbody 컴포넌트 없이 컬라이더 컴포넌트를 가진 게임객체(gameobject)를 말합니다. 이전에는 스태틱 컬라이더는 움직이지 않는 오브젝트로 가정했기 때문에, 만약 스태틱 컬라이더가 움직이는 상황이 생기면 내부 AABB 트리를 리빌딩하는 상황이 발생하여 전체 성능을 매우 떨어뜨렸습니다. 이제 Unity 5부터는 다이내믹과 스태틱 컬라이더에 대해서 동일한 데이터 구조를 사용하게 되면서, 스태틱 컬라이더의 이동에 대한 부하가 없어지게 됩니다. 물론 데이터 구조가 같아지게 되면서, 스태틱 컬라이더가 다이내믹 컬라이더에 비해 더 적은 메모리를 사용한다는 기존의 이점은 잃게 될 것입니다. 하지만 스태틱 컬라이더 이동에 대한 성능 문제는 유니티 게임 성능 이슈 탑3 중 하나였던만큼 아주 긍정적인 개선점이라고 볼 수 있겠습니다.

CCD 개선
 CCD(Continuous Collision Detection)의 성능이 크게 개선되었습니다. 특히 유저가 그냥 단지 CCD를 활성화시켜주기만 하면, 비용이 큰 CCD 시뮬레이션과 디폴트 Discrete 방식을 그때 상황에 맞게 알아서 선택하여 적용되도록 구현되어져서 고무적인 성능 향상을 가져옵니다.

Rigidbodies on the broadphase
 데스크탑 수준의 플랫폼에서는 이제 Broadphase 단계에서의 강체 개수 제한(예전에는 64k개)이 없어집니다. 단, PS3와 같은 몇몇 콘솔 타겟의 경우에는 여전히 개수 제한이 있습니다. 또한 물리 재질(physics material)의 경우 플랫폼에 상관없이 64k 개수 제한이 있다는 점을 유의해야 합니다.

메쉬 컬라이더 스케일링 비용   
 메쉬 컬라이더를 스케일링(확대/축소)하는 데에 드는 비용을 줄였습니다. 이전에는 메쉬 컬라이더를 스케일링하게 되면, 직접 버텍스를 수정하여 새로운 메쉬를 생성해야 했습니다. 당연히 시간과 메모리에 대한 비용이 컸습니다. 이제는 PhysX3 덕분에 실시간으로 스케일링하더라도 특별히 드는 비용이 없습니다.

새로운 Cloth 컴포넌트
 Unity 4에서는 천 시뮬레이션을 위해서 InteractiveCloth와 SkinnedCloth 컴포넌트를 지원했습니다. 이제 PhysX3 인테그레이션과 더불어 Unity 5에서는 InteractiveCloth 지원은 사라지며, 단순히 Cloth라고 불리는 하나의 컴포넌트만 남겨두게 되었습니다. Cloth 컴포넌트는 캐릭터의 천(의상)에 대한 것을 염두하여 고안하였습니다. (따라서 기존 SkinnedCloth와 인터페이스는 매우 흡사합니다.) 
 Cloth 시스템은 메인 물리 업데이트 로직과는 분리되어 있습니다. 그렇기 때문에 더 이상 천(cloth)은 씬(scene)의 어떠한 컬라이더들과도 물리적인 상호작용을 하지 않는 것이 기본이 됩니다. 그 대신 더 빠르고, 멀티스레드가 가능하고, 안정적인 캐릭터 천 솔루션을 갖게 됩니다.
 하지만 월드와 완전히 분리되는 것은 아닙니다. Cloth 에는 세 가지 타입의 컬라이더(sphere, capsule, conical capsule)를 등록할 수 있는데, 여기 등록된 컬라이더들에 한하여 Cloth는 영향을 받게 됩니다. 단, 반대로 Cloth가 컬라이더들에 영향을 주지는 않습니다.
 향후 5.x 버전 대에서 메카님 아바타와의 인테그레이션도 기대해 볼 수 있습니다. 또한 내부적으로 CUDA를 이용한 GPU 지원도 5.x 버전 대에서 릴리스 예정입니다.

새로운 Vehicle 컴포넌트
 PhysX3에서 향상된 Vehicle SDK를 제공하면서, 유니티에서도 이에 맞추어 새롭게 WheelCollider 컴포넌트를 구현하게 되었습니다. 이로 인해서 더욱 더 현실적인 서스펜션과 타이어 마찰을 표현하며, 그동안 오랫동안 문제되었던 이슈들을 해결할 수 있게 되었습니다.



Posted by 흑 기사