Rigid Body 노드와 커스텀 물리
AnimNode_RigidBody, PhysicsConstraint, World Space 물리 시뮬레이션의 구현과 활용을 분석합니다.
AnimNode_RigidBody 개요
AnimGraph 내부에서 물리 시뮬레이션을 수행하는 Rigid Body 노드
AnimNode_RigidBody(Rigid Body 노드)는 AnimGraph 안에서 경량 물리 시뮬레이션을 수행하는 노드입니다. UPhysicalAnimationComponent와 달리 월드 물리 씬이 아닌 독립 시뮬레이션을 사용하여, 다른 액터와의 충돌 없이 자체적으로 물리를 계산합니다.
| 특성 | Rigid Body Node | Physical Animation Comp |
|---|---|---|
| 시뮬레이션 위치 | AnimGraph 내부 (독립 씬) | 월드 물리 씬 |
| 외부 충돌 | 기본 불가 (선택적 활성화) | 지원 |
| 성능 | 경량 | 상대적 무거움 |
| 사용 사례 | 보조 동작 (체인, 꼬리, 장식) | 피격 반응, 래그돌 블렌딩 |
| 블렌딩 | AnimGraph에서 자연스럽게 | 수동 블렌딩 필요 |
// AnimGraph에서 Rigid Body 노드 배치
//
// [Locomotion SM] → [Rigid Body Node] → [Output Pose]
//
// Rigid Body Node 설정:
// Override Physics Asset: PhysicsAsset_Secondary
// → 보조 본(꼬리, 장식)용 Physics Asset
// Simulation Space: Component Space
// → Component Space: 캐릭터 이동에 반응
// → World Space: 월드 기준 중력/관성
// → Base Bone Space: 특정 본 기준
// Alpha: 1.0
// → 물리 시뮬레이션 적용 강도
Simulation Space와 외력
시뮬레이션 공간 선택과 외력/중력 설정
Component Space
컴포넌트 기준 시뮬레이션. 캐릭터 이동/회전 시 관성 효과가 적용됩니다. 캐릭터에 부착된 장식, 무기 스트랩 등에 적합합니다.
World Space
월드 좌표계 기준 시뮬레이션. 중력 방향이 월드 Z축을 따릅니다. 긴 로프, 깃발 등 월드에 고정된 물체에 적합합니다.
Base Bone Space
지정된 본 기준 시뮬레이션. 해당 본의 이동에만 반응합니다. 머리에 달린 귀걸이(머리 본 기준) 등에 활용합니다.
| 외력 설정 | 설명 |
|---|---|
| Override Gravity | 커스텀 중력 벡터. 기본 월드 중력 대신 사용 |
| External Force | 모든 바디에 적용되는 추가 힘 벡터 (바람 등) |
| Freeze Simulation When Stopped | 캐릭터 정지 시 시뮬레이션 동결 (성능 절약) |
| Component Linear/Angular Vel Scale | 컴포넌트 이동/회전의 영향 스케일 |
Physics Constraint 활용
Physics Asset의 Constraint로 관절 제한과 동작 범위 설정
Rigid Body 노드는 Override Physics Asset을 사용할 수 있습니다. 보조 본 전용 Physics Asset을 만들어 원하는 본에만 시뮬레이션을 적용하고, Constraint로 관절의 움직임 범위를 제한합니다.
// 꼬리 Physics Asset 예시
// Physics Body 구성:
// tail_01: Capsule (Kinematic) ← 루트는 키네마틱
// tail_02: Capsule (Simulated)
// tail_03: Capsule (Simulated)
// tail_04: Capsule (Simulated)
// tail_05: Capsule (Simulated)
// Constraint 설정 (tail_02 - tail_01 사이):
// Angular Motion: Limited
// Swing1 Limit: 30도
// Swing2 Limit: 30도
// Twist Limit: 15도
// Angular Damping: 1.0
// Angular Stiffness: 0.5 (스프링 효과)
// Linear Motion: Locked (위치 고정)
// 프로파일 차별화:
// 루트 본 (tail_01): Kinematic → 애니메이션 따름
// 중간 본 (tail_02~03): Medium Damping
// 끝 본 (tail_04~05): Low Damping → 더 많이 흔들림
Physics Asset에서 여러 Constraint Profile을 정의하고, 런타임에 전환할 수 있습니다. 예: "Stiff" 프로파일(좁은 관절 범위)과 "Loose" 프로파일(넓은 범위)을 만들어, 캐릭터 상태에 따라 물리 동작 특성을 변경합니다.
실전 활용 패턴
꼬리, 체인, 의상 장식 등 실전 Rigid Body 활용
동물 꼬리
tail 체인에 Rigid Body 노드를 적용. 이동 관성으로 자연스럽게 흔들리며, Component Space에서 방향 전환 시 뒤따르는 효과를 만듭니다.
무기 스트랩/주머니
캐릭터에 달린 소형 장식물. Override Physics Asset으로 해당 본만 시뮬레이션하여 성능을 절약합니다.
긴 머리카락
헤어 본 체인에 적용. 중력과 이동 관성으로 자연스러운 머리카락 흔들림. Chaos Cloth와 비교하여 더 가벼운 대안입니다.
망토/스카프
간단한 2D 체인 구조에 적용. 복잡한 망토는 Cloth Simulation이 더 적합하지만, 간단한 스카프/리본은 Rigid Body가 효율적입니다.
Rigid Body 노드는 AnimGraph 평가 시 물리 시뮬레이션을 수행하므로, 많은 캐릭터에 적용하면 CPU 부하가 증가합니다. LOD에 따라 Alpha를 0으로 설정하거나, bFreezeSimWhenNotVisible을 활성화하여 화면 밖 캐릭터의 시뮬레이션을 중지하세요.
핵심 요약
- AnimNode_RigidBody는 AnimGraph 내부의 독립 물리 시뮬레이션으로, 보조 동작(꼬리, 장식 등)에 적합하다.
- Simulation Space(Component/World/BaseBone)로 시뮬레이션 기준 좌표계를 선택한다.
- Override Physics Asset으로 특정 본에만 시뮬레이션을 적용하여 성능을 최적화한다.
- Physics Asset의 Constraint로 관절 회전 범위, 감쇠, 스프링 강성을 설정한다.
- LOD 기반 Alpha 제어와 FreezeSimWhenNotVisible로 다수 캐릭터 환경에서 성능을 관리한다.
도전 과제
배운 내용을 직접 실습해보세요
AnimBP의 AnimGraph에 Rigid Body 노드를 추가하세요. Physics Asset에서 망토나 체인에 해당하는 본들의 바디와 컨스트레인트를 설정하고, Rigid Body 노드가 해당 본들에만 물리를 적용하여 이동 시 자연스럽게 흔들리는 보조 모션을 만드세요.
Rigid Body 노드의 Override World Gravity를 활성화하고 커스텀 중력을 설정하세요. 무중력 환경에서의 머리카락이나 장식물 동작을 시뮬레이션하고, External Force로 바람 효과를 추가하세요.
Physics Constraint 프로파일을 커스터마이징하여 다양한 관절 제한을 설정하세요. Angular/Linear Limit를 조절하여 사실적인 관절 움직임을 만들고, C++에서 FAnimNode_RigidBody를 확장하여 커스텀 포스 로직(자석 효과, 와류 등)을 구현하세요.