Version: 5.3
Unity 5.0의 플러그인
Unity 5.0의 셰이더

Unity 5.0의 물리

Unity 5.0는 PhysX3.3 SDK 업그레이드를 제공합니다. 4.x 프로젝트에서 작업을 수행하기 전에 Unity 5의 고성능 물리 블로그 포스트를 잠깐 살펴보십시오. 그러면 새로운 코드 베이스에 기대할 수 있는 사항을 미리 확인할 수 있습니다. PhysX3는 PhysX2와 100% 호환되지 않으므로 업그레이드할 때 사용자가 몇 가지 작업을 수행해야 합니다.

업데이트에 대한 전반적인 개요

Unity 5.0의 물리는 이전 버전보다 최대 2배까지 더 빠르게 작동할 것이라 기대할 수 있습니다. 익숙한 컴포넌트는 대부분 계속 유지되고 전과 동일하게 작동합니다. 물론 일부 동작은 동일하게 구현이 불가능하였으며, 일부 동작의 경우 기존 코드베이스의 한계로 인한 이상 동작으로 밝혀져 수정을 가했습니다. 가장 크게 변경된 두 가지 컴포넌트는 Cloth 컴포넌트와 WheelCollider 컴포넌트입니다. 아래에는 각 컴포넌트에 대한 섹션이 포함되었습니다. 또한 전체 물리 코드에 걸쳐 비호환을 초래하는 더 작은 변경 사항도 여러 개 있습니다.

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

적응적 힘이 디폴트로 꺼짐

적응적 힘은 큰 스택을 시뮬레이션하는 데 도움이 될 수 있도록 도입되었지만, 오직 데모 버전에서만 올바르게 동작하였고, 실제 게임에서는 이상 동작을 유발하였습니다. 에디터 물리 프로퍼티(Edit -> Project settings -> Physics -> Enable adaptive force로 이동)에서 적응적 힘을 켤 수 있습니다.

원활한 구체 충돌이 터레인과 메시에서 모두 제거됨

PhysX3는 해당 문제를 해결하는 기능이 있지만, 큰 문제가 없는 솔루션으로 간주되기 때문에, 더 이상 전환할 수 없습니다.

PhysX3에서는 스프링이 더 큰 진폭을 표시함

업그레이드 후에 스프링 파라미터를 조정해야 할 수 있습니다.

터레인 물리 머티리얼(Terrain Physics Material) 설정이 변경됨

터레인의 물리 머티리얼을 지정하려면 TerrainCollider.sharedMaterial과 TerrainCollider.material을 사용합니다. TerrainData를 통해 물리 머티리얼을 설정하는 기존 방식은 더 이상 사용할 수 없습니다. 또한 이제는 콜라이더마다 터레인 물리 머티리얼을 지정할 수 있습니다.

셰이프 캐스팅 및 스위핑이 변경됨

  • 셰이프 스위프는 충돌하는 모든 셰이프를 보고합니다. 즉 CapsuleCast와 SphereCast는 프리미티브를 완전히 포함하는 셰이프까지도 포함한 모든 셰이프를 반환합니다.
  • 레이캐스트는 레이캐스트 원점을 포함하는 셰이프를 필터링하여 제외합니다.

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

복합 콜라이더를 사용하는 경우 이제 OnCollisionEnter가 각 접촉 페어마다 한 번씩 호출됩니다.

트리거(Triggers)는 볼록해야 합니다.

이제부터는 볼록 셰이프에만 트리거가 포함될 수 있습니다(PhysX 제한 사항).

  • TerrainCollider는 IsTrigger 플래그를 더 이상 지원하지 않습니다.
  • MeshCollider는 볼록한 경우에만 IsTrigger를 포함할 수 있습니다.

동적 바디는 볼록해야 함

동적 바디(즉, 키네마틱 = 거짓(false)인 리지드바디가 연결된 바디)에는 더 이상 오목한 메시 콜라이더가 포함될 수 없습니다(PhysX 제한 사항).

오목한 메시와 충돌하도록 하려면 정적 콜라이더와 키네마틱 바디에서만 가능합니다.

래그돌(Ragdoll) 조인트

래그돌 조인트 설정을 미세 조정해야 할 수 있습니다.

다음 제안 사항은 일반적인 조인트에도 해당됩니다.

이 가이드의 최신 버전은 조인트와 래그돌 안정성 페이지를 참조하십시오.

  • “Angular Y Limit”과 “Angular Z Limit”을 작은 각도로 설정하지 마십시오. 설정에 따라, 안정성을 유지하려면 최소 각도가 약 515도여야 합니다. 작은 각도를 사용하는 대신 각도를 0으로 설정해 보십시오. 그러면 축이 고정되고 안정적이 시뮬레이션이 가능합니다.

  • “Enable Preprocessing”을 false 값(선택 안 함)으로 설정합니다. 전처리 사용을 비활성화하면 조인트의 “폭발”을 방지하는 데 도움이 됩니다. 조인트 제약조건을 충족할 수 있는 방법이 없는 상황에 강제로 노출되는 조인트는 “폭발”할 수 있습니다. 이러한 현상은 래그돌이 부분적으로 벽 안에서 스폰되는 경우와 같이 조인트로 연결된 리지드바디가 정적 충돌 지오메트리에 의해 분리되는 경우 발생할 수 있습니다.

  • 래그돌이 부분적으로 벽 안에서 스폰되거나 강한 힘에 의해 밀리는 경우와 같이 극한적인 상황에 노출되는 경우에는 조인트 솔버가 리지드바디 연결을 유지할 수 없게 됩니다. 그러면 스트레칭 또는 “신체 부위 클라우드”가 발생할 수 있습니다. “ConfigurableJoint.projectionMode” 또는 “CharacterJoint.enableProjection”을 사용하여 조인트의 프로젝션을 활성화해야 합니다.

  • 조인트로 연결된 바디가 떨리는 경우 Edit -> Project Settings -> Physics -> Solver Iteration Count를 높여 보십시오. 1020 사이로 설정해 보십시오.

  • 직접 변환 액세스를 다른 바디에 조인트로 연결된 키네마틱 바디와 함께 사용하지 마십시오. 이렇게 하면 PhysX가 해당 바디의 내부 속도를 계산하는 과정이 생략되므로 솔버가 내놓는 결과에 문제가 발생할 수 있습니다. 일부 2D 프로젝트에서 직접 변환 액세스를 사용해 리그의 루트 분에 있는 transform.direction을 수정하여 캐릭터를 플립하는 경우가 확인된 적이 있습니다. MovePosition/MoveRotation/Move를 대신 사용하면 동작이 크게 개선됩니다.

리지드바디의 제약조건이 로컬 공간에 적용됨

Unity 4에서 사용했던 잠금 메커니즘은 기본적으로 잠긴 회전 변경을 폐기하고 포스트 솔버 단계로서 각속도를 재설정하는 것이었습니다. 이 방법은 대체로 효과적이었지만, 솔버에서 프레임마다 회전을 조정하려고 했기 때문에 바디가 수면 상태로 전환하지 못하는 문제가 있었고, 몇 년 동안 관련 사례가 몇 번 발생했습니다. PhysX3 통합 작업을 진행하면서 PhysX 3.3의 새롭고 멋진 기능인 고정된 회전 자유도에 무한 관성 텐서 컴포넌트를 설정할 수 있는 기능을 활용하였습니다. 이 기능은 이제 솔버에서 지원되므로, 바디가 올바르게 수면 상태로 전환됩니다. 하지만 이 기능은 관성적이므로 로컬 좌표에서만 적용됩니다.

WheelCollider

새로운 WheelCollider는 PhysX2의 코드에서 완전히 달라진 새로운 차량 시뮬레이션 라이브러리인 PhysX3 Vehicles SDK를 사용합니다.

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

천(Cloth)

Unity 5는 새로운 PhysX SDK에서 제공하는 완전히 새로 작성된 천 솔버를 사용합니다. 이 솔버는 캐릭터 복장을 고려하여 디자인되었고, 구 버전에 비해 성능과 안정성이 크게 개선되었습니다. Unity 5는 Unity 4의 SkinnedCloth 및 InteractiveCloth 컴포넌트를 SkinnedMeshRenderer와 함께 작동하는 Cloth 컴포넌트 하나로 대체합니다. 기능은 이전 SkinnedCloth 컴포넌트와 유사하지만, 이제는 스킨이 없는 임의의 메시를 SkinnedMeshRenderer에 할당할 수 있으므로 천 시뮬레이션을 모든 메시에서 처리할 수 있습니다.

하지만 이전 InteractiveCloth에서 사용 가능했던 일부 기능은 새 PhysX 버전에서 고성능으로 구현하기 어렵기 때문에 더 이상 지원되지 않습니다. 구체적으로 설명하면 다음과 같습니다.

  • 더 이상 임의 월드 지오메트리와 충돌하기 위해 천을 사용할 수 없습니다.
  • 티어링은 더 이상 지원되지 않습니다.
  • 더 이상 천에 압력을 가할 수 없습니다.
  • 더 이상 천을 콜라이더에 연결하거나 천으로 씬의 리지드바디에 힘을 가할 수 없습니다.
Unity 5.0의 플러그인
Unity 5.0의 셰이더