Physics - 물리학

Unity는 프로젝트에서 물리를 시뮬레이션하여 객체가 올바르게 가속되고 충돌에 응답하도록 합니다. 중력 및 기타 다양한 힘. Unity는 3D, 2D, 객체 지향 또는 데이터 지향 등 프로젝트 요구에 따라 사용할 수 있는 다양한 물리 엔진 구현을 제공합니다. 

Built-in 3D Physics

유니티에는 엔비디아(Nvidia)사의 피직스(PhysX)엔진이 내부에 탑재가 되어 있어서 이를 토대로 다양한 컴포넌트들을 이용 물리 효과를 줄 수 있게 하였다.

Character control first-person와 third-person characters를 위한 물리 기반 캐릭터 제어 구성
Rigidbody physics GameObjects에 물리 기반 동작 적용
Collision
콜라이더를 사용하여 GameObject 간의 충돌을 구성합니다.
Joints
게임 오브젝트를 연결하고 피벗, 이동 및 제한을 위한 물리적 힘을 시뮬레이션하는 조인트를 적용 및 구성합니다.
Articulations 강체와 관절의 복잡한 시스템을 구성합니다.
Ragdoll physics 캐릭터에 대한 래그돌 물리학을 구성합니다.
Cloth
캐릭터 의류 및 기타 인앱 직물의 직물 움직임을 시뮬레이션합니다.
Multi-scene physics 여러 전용 물리 장면이 있는 하나의 프로젝트에서 다양한 물리 컨텍스트를 관리합니다.

Physics Reference 2D

  2D 물리 엔진으로는 유명한 Box2D 엔진이 탑재가 되어 있다. 다음 같은 2D 컴포넌트들이 있다.

Rigidbody 2D 리지드바디 2D의 작동 방식을 알아보세요.
Collider 2D Rigidbody 2D와 함께 사용할 수 있는 Collider 2D 구성 요소의 유형을 이해합니다.
Physics Material 2D
충돌하는 2D 물리 개체 사이의 마찰과 바운스를 제어합니다.
2D Joints 2D 게임 오브젝트와 함께 사용할 수 있는 2D 조인트 유형을 이해합니다.
Constant Force 2D 리지드바디 2D에 일정한 힘을 추가합니다.
Effectors 2D GameObject 충돌체가 접촉할 때 물리력을 지시합니다.

 

Physics 설정(메인 메뉴: Edit > Project Settings 에서 Physics 카테고리 선택 ) 을 사용하여 3D 물리에 대한 전역 설정을 적용합니다. 

참고: 2D 물리에 대한 전역 설정을 관리하려면 Physics 2D 설정을 대신 사용하십시오.

 

3D 물리 설정

이러한 설정은 물리적 시뮬레이션의 정확도에 대한 제한을 정의합니다. 일반적으로 더 정확한 시뮬레이션에는 더 많은 처리 오버헤드가 필요하므로 이러한 설정은 정확도와 성능을 절충할 수 있는 방법을 제공합니다. 자세한 내용은 매뉴얼의 물리학 섹션을 참조하십시오.

재산 기능
중력 Gravity: Rigidbody 구성 요소 에 적용되는 중력의 양을 설정합니다 . 사실적인 중력 설정을 위해 y축에 음수를 적용합니다. 중력은 제곱초당 세계 단위로 정의됩니다.
참고 : 중력을 높이면 안정적인 접촉을 유지하기 위해 기본 솔버 반복 값도 늘려야 할 수 있습니다.
기본 재료 Default Material: Collider에 할당된 것이 없는 경우 사용할 기본 Physics Material에 대한 참조를 설정합니다 .
바운스 임계값 Bounce Threshold: 속도 값을 설정합니다. 충돌하는 두 개체의 상대 속도가 이 값보다 낮으면 서로 튕기지 않습니다. 이 값은 또한 지터를 감소시키므로 매우 낮은 값으로 설정하지 않는 것이 좋습니다.
기본 최대 침투 속도 Default Max Depenetration Velocity: 침투 속도의 기본값을 정의합니다 (솔버가 다른 바디와 겹치지 않도록 바디를 당기는 동안 바디에 설정할 수 있는 속도).
수면 임계값 Sleep Threshold : 비운동학적 리지드바디 (즉, 물리 시스템에 의해 제어되지 않는 리지드바디)가 잠들 수 있는 전역 에너지 임계값을 설정합니다. Rigidbody 가 잠자고 있을 때 매 프레임마다 업데이트되지 않으므로 리소스를 덜 사용합니다. Rigidbody의 운동 에너지를 질량으로 나눈 값이 이 임계값 미만 이면 수면 후보입니다.
기본 접촉 오프셋 Default Contact Offset : 충돌 감지 시스템이 충돌 접촉을 생성하는 데 사용하는 거리를 설정합니다 . 값은 양수여야 하며 0에 너무 가깝게 설정하면 지터가 발생할 수 있습니다. 기본적으로 0.01로 설정됩니다. Collider는 거리가 접촉 오프셋 값의 합보다 작은 경우에만 충돌 접촉을 생성합니다.
기본 솔버 반복 Default Solver Iterations 모든 물리 프레임에서 Unity가 실행하는 솔버 프로세스 수를 정의합니다 . 솔버는 관절의 움직임 또는 겹치는 Rigidbody 구성 요소 간의 접촉 관리와 같은 여러 물리적 상호 작용을 결정하는 작은 물리 엔진 작업입니다 . 이것은 솔버 출력의 품질에 영향을 미치며 기본값이 아닌 Time.fixedDeltaTime이 사용되거나 구성이 추가로 요구되는 경우 속성을 변경하는 것이 좋습니다 . 일반적으로 관절이나 접촉으로 인한 지터를 줄이는 데 사용됩니다.
기본 솔버 속도 반복 Default Solver Velocity Iterations : 솔버가 각 물리 프레임에서 수행하는 속도 프로세스 수를 설정합니다 . 솔버가 수행하는 프로세스가 많을수록 리지드바디 바운스 후 결과 출구 속도의 정확도가 높아집니다. 접합된 Rigidbody 구성 요소 또는 Ragdoll이 충돌 후 너무 많이 움직이는 문제가 발생하면 이 값을 늘려 보십시오.
쿼리 적중 뒷면 Queries Hit Backfaces : 물리 쿼리(예: Physics.Raycast )가 MeshColliders 의 후면 삼각형 이 있는 적중을 감지하려면 이 옵션을 활성화합니다 . 기본적으로 이 설정은 비활성화되어 있습니다.
쿼리 적중 트리거 Queries Hit Triggers : 물리 히트 테스트(예: Raycasts , SphereCasts 및 SphereTests )가 Trigger로 표시된 Collider와 교차할 때 히트를 반환하도록 하려면 이 옵션을 활성화합니다. 개별 레이캐스트는 이 동작을 재정의할 수 있습니다. 기본적으로 이 설정은 활성화되어 있습니다.
어댑티브 포스 활성화 Enable Adaptive Force : 적응형 힘을 활성화하려면 이 옵션을 활성화합니다. 적응형 힘은 물체 더미나 스택을 통해 힘이 전달되는 방식에 영향을 주어 보다 사실적인 동작을 제공합니다 . 기본적으로 이 설정은 비활성화되어 있습니다.
연락처 생성 Contacts Generation : 연락처 생성 방법을 선택합니다.
레거시 연락처 생성 Unity 5.5 이전에 Unity는 축 분리 정리( SAT . PCM이 더 효율적이지만 이전 프로젝트의 경우 물리학을 약간 다시 조정할 필요가 없도록 SAT를 계속 사용하는 것이 더 쉬울 수 있습니다 . PCM은 결과를 초래할 수 있습니다. (즉, OnCollisionEnter , OnCollisionStay OnCollisionExit 에 전달된 Collision 인스턴스에서 얻은 배열 )
업그레이드 조언 : Unity 2018.2로 만든 프로젝트를 마이그레이션하려면 또는 더 낮으면 매니폴드에서 패치를 병합하고 연락처를 선택하는 코드와 함께 작동하도록 스크립트를 업데이트해야 할 수 있습니다.
영구 접점 매니폴드(PCM) Persistent Contacts Manifold (PCM) : 매 물리 프레임마다 더 적은 수의 접촉을 생성하고 더 많은 접촉 데이터가 프레임 간에 공유됩니다. PCM 접촉 생성 경로도 더 정확하며 일반적으로 대부분의 경우 더 나은 충돌 피드백을 생성합니다. 자세한 내용은 Persistent Contact Manifold에 대한 Nvidia 설명서를 참조하십시오 . 이것이 기본값입니다.
자동 시뮬레이션 물리 시뮬레이션을 자동으로 실행하거나 이에 대한 명시적 제어를 허용하려면 이 옵션을 활성화합니다.
자동 동기화 변환 Transform 구성 요소가 변경될 때마다 물리 시스템과 변환 변경 사항을 자동으로 동기화하려면 이 옵션을 활성화하십시오 . 기본적으로 이 설정은 비활성화되어 있습니다.
연락처 쌍 모드 Contact Pairs Mode : 사용할 접점 쌍 생성 유형을 선택하십시오.
기본 연락처 쌍 kinematic-kinematic 및 kinematic-static 쌍을 제외한 모든 접촉 쌍에서 충돌 및 트리거 이벤트를 수신합니다.
운동학 쌍 활성화 Enable Kinematic Kinematic Pairs : 운동학적-운동학적 접촉 쌍에서 충돌 및 트리거 이벤트를 수신합니다.
운동학적 정적 쌍 활성화 Enable Kinematic Static Pairs : 운동학-정적 접촉 쌍에서 충돌 및 트리거 이벤트를 수신합니다.
모든 연락처 쌍 활성화 Enable All Contact Pairs : 모든 연락처 쌍에서 충돌 및 트리거 이벤트를 수신합니다.
광상 유형 Broadphase Type : 물리 시뮬레이션에서 사용할 광역 위상 알고리즘을 선택합니다 . PhysX SDK Rigid Body Collision 에 대한 NVIDIA 문서를 참조하십시오 .
브로드페이즈 스윕 및 가지치기 Sweep and Prune Broadphase : 스윕 앤 프룬(sweep-and-prune) 광역 위상 충돌 방법(즉, 멀리 떨어져 있는 쌍을 확인해야 하는 것을 배제하기 위해 단일 축을 따라 객체를 정렬)을 사용합니다.
멀티박스 프루닝 Broadphase Multibox Pruning Broadphase: Multi-box pruning은 그리드를 사용하며 각 그리드 셀은 스위프&프루닝을 수행합니다. 예를 들어 평평한 세계에 많은 게임 오브젝트가 있는 경우 일반적으로 성능을 향상시키는 데 도움이 됩니다 .
자동 상자 가지치기 세계 경계와 분할 수를 자동으로 계산할 수 있다는 점을 제외하면 Multibox Pruning 과 유사합니다 . 그리드 셀 세트를 유지하고 정기적인 스윕 앤 프룬 접근 방식을 사용하여 잠재적으로 겹칠 수 있는 충돌체 쌍을 해결합니다. 일반적 으로 단일 Sweep 및 Prune이 많은 추가 오탐지를 생성하는 큰 장면 에 도움이 됩니다 .
세계 경계 World Bounds : Multibox Pruning Broadphase 알고리즘 을 사용할 때 멀리 떨어져 있는 개체가 서로 영향을 주지 않도록 세계를 둘러싸는 2D 그리드를 정의합니다 . 이 옵션은 Broadphase Type을 Multibox Pruning Broadphase 로 설정한 경우에만 사용됩니다 .
월드 세분화 World Subdivisions : 2D 그리드 알고리즘에서 x축과 z축을 따라 있는 셀의 수입니다. 이 옵션은 Broadphase Type을 Multibox Pruning Broadphase 로 설정한 경우에만 사용됩니다 .
마찰 유형 Friction Type : 시뮬레이션에 사용되는 마찰 알고리즘을 선택합니다.
패치 마찰 유형 Patch Friction Type : 일반적으로 낮은 솔버 반복 횟수에서 가장 안정적인 결과로 이어지는 기본적인 강력한 마찰 알고리즘입니다. 이 방법은 접촉하는 객체 쌍당 최대 4개의 스칼라 솔버 제약 조건만 사용합니다.
한 방향 마찰 유형 Coulomb 마찰 모델의 단순화로, 주어진 접촉점에 대한 마찰이 접촉 법선의 교차하는 접선 방향으로 적용 됩니다 . 이를 위해서는 패치 마찰보다 더 많은 솔버 반복이 필요하지만 2방향 모델만큼 정확하지는 않습니다. 관절 바디가 이 마찰 유형과 함께 작동하도록 하려면 솔버 유형을 Temporal Gauss Seidel 로 설정하십시오 .
두 방향 마찰 유형 단방향 모델과 같지만 두 접선 방향으로 동시에 마찰을 적용합니다. 이렇게 하려면 더 많은 솔버 반복이 필요하지만 더 정확합니다. 모든 접점에 적용되기 때문에 접점이 많은 시나리오의 경우 패치 마찰보다 비용이 많이 듭니다. 관절 바디가 이 마찰 유형과 함께 작동하도록 하려면 솔버 유형을 Temporal Gauss Seidel 로 설정하십시오 .
향상된 결정성 활성화 게임이 결정론적 순서로 액터를 삽입한다면 장면의 시뮬레이션은 액터가 존재하는지에 관계없이 일관됩니다. 이 모드는 이러한 추가 결정성을 보장하기 위해 일부 성능을 희생합니다.
통합 하이트맵 활성화 Enable Unified Heightmaps : 메시 충돌 과 동일한 방식으로 지형 충돌을 처리하려면 이 옵션을 활성화합니다 .
솔버 유형 Solver Type : 시뮬레이션에 사용할 PhysX 솔버 유형을 선택합니다.
투영된 가우스 자이델 Projected Gauss Seidel : 기본 PhysX 솔버입니다.
시간적 가우스 자이델 Temporal Gauss Seidel : 조인트 의 저항을 향상시킵니다 . 일반적으로 기본 솔버로 시뮬레이션하는 동안 일부 비정상적인 동작이 발생할 때 도움이 됩니다.
레이어 충돌 매트릭스 Layer Collision Matrix : 레이어 기반 충돌 감지 시스템의 작동 방식을 정의합니다 . Collision Matrix에서 레이어를 확인하여 다른 레이어와 상호 작용하는 레이어를 선택합니다.
Cloth Inter-Collision : 옷감 상호 충돌
거리 상호 충돌하는 각 Cloth 파티클 주위의 구형 직경을 정의합니다 . Unity는 이러한 구체가 시뮬레이션 중에 겹치지 않도록 합니다. 거리는 구성에서 두 입자 사이의 최소 거리보다 작아야 합니다. 거리가 더 크면 옷감 충돌이 일부 거리 제한을 위반하여 지터링이 발생할 수 있습니다.
단단함 상호 충돌하는 천 파티클 사이의 분리 임펄스의 강도  HYPERLINK "https://docs.unity3d.com/2021.3/Documentation/Manual/class-Cloth.html" \l "intercollision" 입니다. 천 솔버는 이것을 계산하고 파티클을 분리된 상태로 유지하기에 충분해야 합니다.

+ Recent posts