유니티 공식 홈페이지에 게재된 'Unity 5.0 Uprade Guide'의 일부를 번역한 내용입니다.

 (해당 블로그 글은 향후 업데이트될 수 있습니다.)


Physics


Unity5.0은 PhysX3.3 SDK로 업그레이드되었습니다. PhysX2는 PhysX3와 100% 호환되지 않으므로, 업그레이드를 할 경우 개발자가 직접 수정해야 하는 부분들이 있습니다.



General overview of updates

Unity 5.0 피직스(physics)는 이전 버전들에 비해 2배 정도 빠른 성능을 낼 것으로 기대됩니다. 이전부터 많이 사용하던 친숙한 컴포넌트들은 대부분 그대로 존재할 것이며, 예전과 같이 잘 동작할 것입니다. 그러나 다른 어떤 것들은 그대로 가져오기가 불가능했고, 또 어떤 것들은 예전의 코드 기반의 한계로 인해서 이상한 동작하는 결과를 보였기 때문에 일부 수정이 필요했습니다. 그 중 가장 큰 변화가 일어난 컴포넌트는 Cloth 컴포넌트와 WheelCollider 컴포넌트입니다. 따라서 이 두 컴포넌트에 대한 바뀐 내용들을 포함하여, 그 밖에도 피직스 전반에 걸쳐 호환성 문제를 일으킬 수 있는 자잘한 수정사항들에 대해 살펴보겠습니다.



Changes that are likely to affect projects:


Adaptive force is now switched off by default

 Adaptvie force는 큰 스택에 대한 시뮬레이션에 도움을 주기 위해서 존재하는 속성이나, 단지 데모(demo)에서만 좋은 효과를 주는 것으로 밝혀졌습니다. 오히려 실제 게임 안에서는 잘못된 동작을 일으켰습니다. 에디터의 물리 속성 설정을 통해서 on/off 할 수 있습니다: Editor-> Project settings->Physics->Enable adaptive force.


Smooth sphere collisions are removed both from terrain and meshes

 Smooth sphere collision 속성이 terrain과 mesh 컬라이더에서 모두 제거됩니다. 이제는 피직스 엔진의 표준 동작이 되었기 때문입니다.


Springs expose larger amplitudes with PhysX3

 PhysX3에서는 spring의 범위가 예전에 비해 넓어졌습니다. 따라서 업그레이드 후 사용자가 spring의 파라미터들을 새롭게 조정하길 원할 수도 있겠습니다.


Setting Terrain Physics Material has changed

 지형(terrain)을 위한 물리 재질(physics material)을 지정하기 위해서 TerrainCollider.shaderMaterial 과 TerrainCollider.material을 사용하세요. TerrainData를 통해서 물리 재질을 설정하던 이전 방식은 더이상 동작하지 않습니다. 추가로, 이제는 per collider basis 상에서 지형 물리 재질들을 설정할 수 있습니다.


Shape casting and sweeping has changed:

-Shape sweeps report all shapes they hit (i.e CapsuleCast and SphereCast would return all shapes they hit, even the ones that fully contain the primitive)

- Raycast는 raycast 원점(origin)이 포함된 것을 제외할 것입니다.


Compound Collider events:

 합성(compound) 컬라이더를 사용할 때, OnCollisionEnter는 각 접촉 쌍 당 한번 호출됩니다. 


Triggers must be convex:

 이제부터는 convex 모양에서만 트리거(trigger)를 가질 수 있습니다. (PhysX의 제약사항):

     - TerrainCollider는 더이상 IsTrigger 플래그를 지원하지 않습니다.

     - MeshCollider는 covex일 경우에만 IsTrigger가 지원됩니다.


Dynamic bodies must be convex:

동적인 바디 (예를 들면, Kinematic = false 의 강체를 가진)는 더이상 오목한 메쉬 컬라이더를 가질 수 없습니다. (이것은 PhysX 의 제약사항임)


오목한 메쉬에 대한 충돌을 원한다면, 정적 컬라이더와 kinmatic 바디여야 합니다.


Ragdoll joints:

 래그돌(ragdoll)에 대한 조인트 설정을 약각 조정할 필요가 있을 것입니다.


아래의 제안들은 일반적으로 조인트들에는 모두 적용됩니다.

- “Angular Y Limit” 와 “Angular Z Limit” 의 각도를 작게 설정하는 것을 피하세요. 사용자 설정에 따라 최소각은 약 5~15도로 해야 안정적입니다. 작은 각도를 사용하는 것 대신에 각도를 0으로 설정하도록 해보세요. 이것을 통해서 축을 고정되고 안정적인 시뮬레이션을 제공할 것입니다. 


- “Enable Preprocessing”을 false로 설정하세요. 선처리(preprocessing) 비활성화하게 되면 “블로우 업(blow up) ”을 방지하는데에 도움이 됩니다. 조인트들은 조인트 제약들을 만족시킬 수 없는 방법이 없는 상황에서 강제되면 블로우 업될 수 있습니다. 이것은 래그돌이 일부 벽 안쪽에 끼어서 스폰(spawn)되는 상황처럼, 강체가 정적 충돌 지오메트리에 의해 끌려지는 상항에서 일어날 수 있습니다.


- 래그돌 안정성과 스트레칭: 만약 래그돌이 일부 벽 안에 끼어서 스폰되거나 커다란 힘에 밀리는 상황 등의 극단적인 환경에 놓이면, 조인트 솔버는 강체들과 함께 유지하기 어려워집니다. 따라서 스트레칭 또는 “cloud of body parts” 가 발생할 수 있습니다. "ConfigurableJoint.projectionMode"또는 "CharacterJoint.enableProjection"를 사용하여 조인트들에 대해서 프로젝션(projection)을 활성화해주세요.


- 조인트로 연결된 바디들이 지터링(jittering)하고 있다면, Solver Iteration Count(Edit->Project Settings->Physics->“Solver Iteration Count”)를 증가시켜 보세요. 10 ~ 20 을 설정해 봅니다.

 -다른 바디(body)와 연결된 kinematic 바디에 대해서 절대 직접적인 transform 접근하여 사용하지 마세요. 그렇게 하면, PhysX가 각 바디들에 해당하는 내부 속도를 계산하는 단계를 건너뛰기 때문에, 솔버(solver)가 안좋은 결과를 만들어냅니다. (어떤 2D 프로젝트 경우, rig의 루트 본(root bone)에서 transform.direction을 수정하여 캐릭터들을 뒤집기 위해서 직접 transform에 접근하는 경우가 있었습니다. 이같은 경우에는 그 대신 MovePosition / MoveRotation / Move 를 사용하는 것을 권장합니다.


Rigidbody’s constraints are applied in local space

Unity 4 에서 사용했던 락킹 방식(locking mechanism)은 기본적으로 잠긴 회전(locked rotation)들에 대한 변경을 무시하여 버리고 포스트 솔버(post-solver) 단계에서 각속도를 리셋하는 형태였습니다.

이러한 방식은 대부분의 경우에서 잘 동작했습니다. 다만, 솔버가 매 프레임마다 회전을 조정하려고 하는 것에 의해서 바디가 슬립(sleep)으로 가는 것을 실패하는 이슈, 그리고 이와 관련된 몇가지 들과 같이 예외적인 문제가 있었습니다. PhysX3 통합 작업을 할 때, 자유 잠금 회전(locked rotational degrees of freedom)도을 위한 무한 관성 텐서 요소( infinite inertia tensor components)를 설정할 수 있는 PhysX3.3의 새 기능을 활용하였습니다. 이제 이러한 기능이 솔버에서 지원됨으로써, 바디가 적절하게 슬립될 수 있게 됩니다. 하지만 이것은 관성이므로, 로컬좌표 내에서 적용됩니다.


WheelCollider

새로운 WheelCollider는 PhysX3 Vehicle SDK에 의해 동작하는데, 이것은 PhysX2로 작성된 코드와 비교했을 때 기본적으로 완전히 새로운 차량(vehicle) 시뮬레이션입니다.


자세한 것은 새로운 'WheelCollider' 문서를 통해 참조하시기 바랍니다.


Cloth

 유니티 5는 새 PhysX SDK에 의해 제공되는 완전히 재구현된 천 솔버(cloth  solver)를 사용합니다. 이러한 천 솔버는 캐릭터 의상에 맞게 고안되었으며, 안정성과 성능 면에 이전 버전에 비해서 매우 개선된 모습을 보여줍니다. 이제 Unity 4에서 사용하던 SkinnedCloth와 InteractiveCloth 컴포넌트를 Unity 5에서는 SkinnedMeshRenderer와 함께 작동하는 Cloth라는 단일 컴포넌트로 대체하였습니다.

기능적인 부분은 이전 SkinnedCloth 컴포넌트와 유사합니다. 하지만 이젠 임의의 논스킨 메쉬를 SkinnedMeshRenderer에 할당하는 것이 가능해졌으므로 여전히 어떠한 랜덤 메쉬에서도 천(cloth) 시뮬레이션을 다룰 수 있습니다.


 그러나 이전 버전의 InteractiveCloth에서 이용할 수 있었던 몇가지 기능들은 새 PhysX 버전에서는 이제 더 이상 지원되지 않습니다. 해당 기능들을 좋은 성능으로 구현하기가 어렵기 때문입니다. 보다 명확히 말하면:


- 더이상 임의의 월드 지오메트리들와 충돌하는 것에 천을 사용할 수 없습니다.

- 찢어짐 효과(tearing)가 더이상 지원되지 않습니다.

- 천에 압력(pressure)을 적용할 수 없습니다.

- 더이상 천(cloth)에 컬라이더를 추가하거나 천이 씬(scene) 안의 강체들에게 힘을 적용할 수 없습니다.

 

글 내용과 관련하여 문의사항이 있으시면 댓글을 남겨주세요, 

감사합니다.





Posted by 흑 기사
,