Plugins in Unity 5.0
Shaders in Unity 5.0

Physics in Unity 5.0

Unity 5.0의 특징은 PhysX3.3 SDK로 업그레이드한다는 것입니다. 4.x 프로젝트에서 뭔가 조치를 취하기 전에 서둘러 이 기사를 읽어보십시오. 그러면 새로운 코드 기반에서 예상을 할 수 있을 것입니다. High Performance Physics in Unity 5 PhysX3과 PhysX2는 100% 호환되지는 않기 때문에, 사용자가 업그레이드하기 전에 몇 가지 필요한 조치가 있음에 주의하십시오.

업데이트의 전체적인 외관

Unity 5.0의 물리적 거동은 이전 버전에 비해 최대 2배까지 빠르게 작동할 것입니다. 잘 알고 계시는 컴포넌트의 대부분은 변하지 않고 존재하고 있으며, 여전히 변함없이 작동하고 있는 것도 알 것이라고 생각합니다. 물론 동작을 일치시키는 것이 불가능한 것이 있거나, 이미 존재하는 코드 기반의 제한에 의해 기분 나쁜 거동되는 경우도 있기 때문에 변경을 추가해야 합니다. 가장 중요한 변화가 있던 것은, Cloth 컴포넌트와 WheelCollider의 두 가지입니다. 각각에 대한 설명은 다음과 준비했습니다. 그 뒤에는 호환성이 맞지 않는 원인이 되는 Physics 코드 전체의 세부적인 변화에 대해 설명하고 있습니다.

프로젝트에 영향을 미칠 수 있는 변경

Adaptive force는 기본적으로 지워지게 되었습니다

Adaptive force는 거대한 스택(Stack)의 시뮬레이션을 도와주기 위하여 도입되었습니다만, 데모에서만 우수했다는 것을 알았습니다. 실제 게임에서는 잘못된 행동의 원인이 될 수 있었습니다. 설정은 에디터의 Physics 프로퍼티에서 다음과 같이 선택하여 전환할 수 있습니다 : Edit -> Project settings -> Physics -> Enable adaptive force

Smooth sphere collision은 Terrain과 mesh 모두에서 삭제되었습니다

PhysX3에는 PhysX2와 같은 문제를 유발한다는 특징이 있으므로, 중요한 결점을 빼고 해결책이 된다는 오해를 받는 전환을 할 수 없도록 했습니다.

Spring은 PhysX3에서보다 더 크게 확장할 수 있게 되었습니다.

업그레이드 후에는 Spring의 파라미터를 조정하고 싶을지도 모릅니다.

Terrain Physics Material의 설정이 변경되었습니다.

Terrain의 physics material을 지정하기 위해서는 TerrainCollider.sharedMaterial과 TerrainCollider.material을 사용하십시오. TerrainData를 통해 physics material을 설정하는 기존 방법은 작동하지 않습니다. 덤으로 각 콜라이더의 기초마다 terrain physics material을 지정할 수 있게 되었습니다.

모양 캐스트(Shape casting) 및 스위핑(Sweeping) 변경

  • 모양 스위프는 그들이 충돌한 모든 모양을 보고합니다. (즉, CapsuleCast와 SphereCast는 프리미티브 형을 전부 포함하는 것이어도 충돌한 모든 형태를 돌려주는 것입니다)
  • Raycast는 그 원점을 포함하는 모양을 포함하지 않습니다.

복합 콜라이더(Compound Collider) 이벤트 :

복합 콜라이더를 사용하는 경우, OnCollisionEnter는 각각의 접촉 페어마다 호출됩니다.

트리거(Trigger)는 볼록(convex)해야 합니다 :

현재, 트리거는 볼록한 모양에서만 사용할 수 있습니다 (PhysX 제한) :

  • TerrainCollider는 IsTrigger 플래그를 지원하지 않습니다.
  • MeshCollider는 볼록한 경우에만 IsTrigger를 사용할 수 있습니다.

동적 바디는 볼록해야 합니다:

동적 바디(즉, IsKinematic이 false로 설정되어 있는 Rigidbody가 연결되어 있는 것)에 오목한 메쉬 콜라이더는 사용할 수 없습니다(PhysX 제한).

오목한 메쉬를 충돌시키고 싶은 경우, static 콜라이더에 kinematic 바디를 사용하는 수 밖에 없습니다.

랙돌 조인트:

랙돌 용 조인트 설정은 조정이 필요할 수 있습니다.

이러한 제안은 일반적으로 동일하게 조인트에 적용합니다.

See the Joint And Ragdoll Stability page for most recent version of this guide.

  • “Angular Y Limit” 및 “Angular Z Limit”에 작은 값을 사용하는 것은 피하십시오. 당신의 설정에 따라 최소 각도는 안정시키기 위해 5 ~ 15도 정도로 설정해야 합니다. 작은 각도를 사용하는 대신 angle을 0으로 설정하여 보십시오. 각도가 고정되고 안정된 시뮬레이션이 제공됩니다.

  • “Enable Preprocessing”을 false로 설정(체크하지 않고)하십시오. preprocess(사전 처리)를 해제해 둠으로써 조인트가 “폭발”하지 않도록 보조합니다. 조인트는 조인트하고 있는 위치의 제한 용량을 초과하는 힘이 가해졌을 경우 “폭발합니다.” 이것은 랙돌이 일부만 벽에 스폰되는 등 연결되어 있는 리지드 바디가 정적 지오메트리에 의해 흩어진 경우에 발생할 수 있습니다.

  • 랙돌의 안정성 또는 신축 : 부분적으로 벽에 스폰되거나 막대한 힘에 밀리는 등 랙돌이 극한의 상황에 놓인 경우, 조인트 솔루션은 리지드 바디끼리 계속 연결을 유지할 수 없습니다. 이에 따라 그들이 신축하거나 “cloud of body parts”가 될 수 있습니다. “ConfigurableJoint.projectionMode” 또는 “CharacterJoint.enableProjection”을 사용하여 조인트의 프로젝션(projection)을 활성화하십시오.

  • 조인트에 의해 연결된 바디가 조금씩 떨리는 경우 Edit -> Project Settings -> Physics -> “Solver Iteration Count”를 늘려보십시오. 10–20을 시험해보십시오.

  • 결코 다른 바디에 연결된 kinematic 바디의 Transform을 직접 사용하지 마십시오. 그러면 PhysX에 의한 바디와 일치하는 내부적인 속도 계산 단계를 생략해버리므로 솔루션이 만족스럽지 않은 결과를 낼 수 있습니다. 우리는 2D 프로젝트에서 리그의 루트 뼈에서 transform.direction을 통해 대신 캐릭터를 반전하기 위해 Transform에 직접 액세스를 사용하는 것을 어느 정도 보고 왔습니다. MovePosition / MoveRotation / Move를 대신 사용하는 경우, 이것은 더 잘 작동합니다.

리지드 바디의 제한은 로컬 공간에서 적용됩니다.

Unity 4에서 사용하고 있던 잠금(Locking) 메커니즘은 잠긴 회전의 변경을 기본적으로 폐기하고 각속도를 포스트 솔버(post-solver) 단계로 재설정하고 있었습니다. 이것은 솔버가 매 프레임 회전을 조정하려고 하면서 바디가 sleep 상태가 되고자 하는 문제가 있는 것을 제외하고는 대체로 잘 작동했습니다. 그리고 이와 관련 사례도 최근 다소 발견되고 있습니다. PhysX3 통합에서 실행시킬 때, 잠긴 회전 각도의 자유를 위해 무한 관성 텐서(Tensor) 컴포넌트를 설정할 수 있다는 PhysX 3.3의 새롭고 멋진 기능을 이용했습니다. 바디가 적절히 sleep 상태가 되도록, 이것이 솔버로 지원되도록 했지만, 이것은 관성때문에 로컬 좌표에서 적용됩니다.

WheelCollider

새로운 WheelCollider는 PhysX2 코드에 비해 근본적으로 새로운 차량 라이브러리인 PhysX3 Vehicles SDK에서 제공되었습니다.

새 WheelCollider에 대한 내용은 여기를 참조하십시오.

Cloth

Unity 5는 PhysX SDK에서 제공되는 새로운 완전히 재 작성된 크로스 솔버이 사용됩니다. 이 크로스 솔버는 캐릭터의 착용을 고려하여 디자인되어 있어 성능과 안정성이 이전 버전에 비해 상당한 개선되어 있습니다. Unity 5는 Unity 4의 SkinnedCloth와 InteractiveCloth 컴포넌트를 Cloth 컴포넌트 하나로 대체하고 있으며, 이것은 SkinnedMeshRenderer와 함께 작동합니다. 기능은 이전 SkinnedCloth 컴포넌트와 유사하지만, 독단으로 논스킨 메쉬를 SkinnedMeshRenderer에 할당할 수 있게 되어 있기 때문에 크로스 시뮬레이션을 어떤 메쉬에서도 처리할 수 있습니다.

그러나 이전 InteractiveCloth에서 사용할 수 있었던 일부 기능은 새 버전의 PhysX가 지원되지 않게 되었으므로, 다음과 같은 기능을 좋은 성능으로 구현하기가 어렵습니다. 특히 :

  • 크로스 월드 지오메트리와 독단으로 충돌할시킬 수 없습니다.
  • 티어링(Tearing)은 지원되지 않습니다.
  • 천(Cloth)에 압력을 가할 수 없습니다.
  • 천에 콜라이더를 연결하거나, 천으로 씬의 리지드 바디에 힘을 적용시킬 수 없습니다.
Plugins in Unity 5.0
Shaders in Unity 5.0