
1. 영상 정보
- 영상 제목: Creating skeletal meshes in Houdini for UE5
- 채널명: Eusebi Jucglà
- 영상 링크: https://youtu.be/Bhp9-UTUZoc
2. 핵심 요약 (Conclusion)
- 절차적(Procedural) 스켈레탈 메시 생성: 후디니(Houdini)에서 Draw Curve, Sweep, Attribute Noise, VDB 워크플로우를 활용해 복잡하고 불규칙한 유기체형 메시를 자동으로 생성하는 방법
- 자동 리깅 및 스킨 웨이팅(Auto-Rigging & Skinning): Rig Doctor, Bone Capture Lines, Tet Embed, Bone Capture BiHarmonic 노드를 결합하여 클릭 몇 번으로 메시 내부에 뼈대를 심고 자동으로 가중치(Weight)를 계산하는 자동화 시스템 구축
- KineFX 기반 애니메이션/포즈 검증: Rig Pose 및 Bone Deform 노드를 활용해 언리얼 엔진으로 익스포트하기 전 후디니 뷰포트 내에서 뼈대 관절의 변형과 스킨 변형이 올바르게 일어나는지 직관적으로 테스트하는 방법
- 언리얼 엔진 5(UE5) 스케일 및 단위 변환 문제 완벽 해결: 후디니 단위($1\text{m}$)와 언리얼 단위($1\text{cm}$) 간의 축척 문제로 인해 발생되는 루트 본(Root Bone)의 Scale 100 오버라이드 현상을 VEX(attribwrangle) 코드를 통한 transform 매트릭스 정규화(Normalization) 작업으로 해결하는 팁 제공
- KineFX ROP Export 및 UE5 피직스 에셋(Physics Asset) 연동: 후디니의 ROP Character Output을 통해 FBX 파일로 익스포트하고, UE5에서 이를 스켈레탈 메시 및 피직스 에셋으로 임포트하여 랙돌(Ragdoll) 시뮬레이션을 구현하는 전체 연동 워크플로우
3. 타임라인별 상세 정리
1. 절차적 스켈레탈 메시 지오메트리 생성 (00:00:00 ~ 00:05:50)
- 스켈레탈 메시 생성을 위한 노드 네트워크 구성 (00:00:21):
- /obj 단계에서 Geometry 노드를 생성하고 이름을 skeletal_mesh_test로 변경합니다. [00:31]
- Draw Curve 및 Resample 설정 (00:00:39):
- Sweep 노드를 이용한 입체화 및 Cap 닫기 (00:01:33):
- Attribute Noise를 이용한 불규칙한 두께 변화 생성 (00:02:05):
- VDB 워크플로우를 통한 표면 부드럽게 만들기 및 리메시 (00:03:00):
- 급격하게 왜곡되거나 꼬인 지오메트리는 시뮬레이션 및 리타겟팅에 부적합하므로, VDB from Polygons 노드를 사용하여 지오메트리를 VDB 볼륨(Distance VDB)으로 변환합니다. (Voxel Size: 0.1) [03:36]
- VDB Smooth SDF 노드를 연결하여 각진 표면과 울퉁불퉁한 구간을 부드럽게 완화합니다. [04:24]
- Convert VDB 노드를 배치해 다시 폴리곤 지오메트리로 복원합니다. [04:09]
- Fast Remesh (또는 Remesh) 노드를 적용하고 Target Size를 0.2 정도로 조절하여 언리얼 엔진 임포트 시 삼각화(Triangulation)가 깔끔하게 처리되도록 고품질 삼각망 메시로 재구성합니다. [04:33]
- 커브 라인을 수정하면 자동으로 완벽한 메시가 갱신되는 절차적 파이프라인의 기반이 완성됩니다. [05:19]
2. KineFX 기반 자동 스켈레톤(뼈대) 구축 (00:05:51 ~ 00:09:16)
- 원본 커브 기반의 스켈레톤 추출 (00:06:03):
- 스켈레톤 포인트 최적화 (Resample) (00:06:38):
- 추출한 커브 노선에 Resample 노드를 추가로 연결합니다. 원본 포인트(예: 34개)가 너무 많으면 관절 개수가 과도해지므로, Length 값을 크게 올려 적절한 관절 수(예: 11개)로 줄여줍니다. [06:52]
- Rig Doctor 노드를 통한 본 구조 변환 및 방향 재설정 (00:07:34):
3. 자동 스킨 웨이팅(Skinning & Auto Weighting) 연산 (00:09:17 ~ 00:12:22)
- Bone Capture Lines 노드 세팅 (00:09:26):
- Bone Capture Lines 노드를 추가하여 뼈대 세그먼트 정보를 기반으로 스킨 캡처용 속성을 추출합니다. [09:34]
- Tet Embed 및 Bone Capture BiHarmonic 기반 자동 바인딩 (00:09:50):
- Tet Embed 노드에 입력 메시와 캡처 라인을 연결합니다. 이 노드는 메시 내부 공간을 4면체(Tetrahedral) 메시 구조로 채워 넣는 역할을 합니다. [10:05]
- Bone Capture BiHarmonic 노드를 배치하고, 1번 입력단에는 최종 리메시된 메시, 2번 입력단에는 Bone Capture Lines, 3번 입력단에는 Tet Embed 결과를 연결합니다. [10:52]
- 조작 없이도 수식 계산(BiHarmonic 알고리즘)을 통해 메시 표면에 뼈대 영향력(Bone Weights)이 자동으로 정확히 계산되어 할당됩니다. [10:59]
- Rig Pose 및 Bone Deform 노드를 통한 스킨 테스트 (00:11:07):
- 스킨이 잘 먹혔는지 검증하기 위해 Rig Pose 노드로 뼈대를 회전 및 변형시키고, Bone Deform 노드를 붙여 메시가 뼈대 움직임에 맞춰 자연스럽게 찌그러지고 구부러지는지 뷰포트에서 실시간으로 확인합니다. [11:34]
4. KineFX 캐릭터 익스포트 및 단위/스케일 문제 해결 (00:12:23 ~ 00:21:40)
- ROP Character Output 노드 연결 (00:12:30):
- ROP Character Output 노드를 생성합니다. 3개의 입력단에 각각 다음 노드를 연결합니다:
- 익스포트 옵션에서 Clip Range를 Render Current Frame으로 바꿉니다. [13:40]
- 후디니와 언리얼 엔진 간 축척 mismatch 문제 (00:14:07):
- 후디니는 $1\text{unit} = 1\text{m}$ 기준이고 언리얼 엔진은 $1\text{unit} = 1\text{cm}$ 기준입니다.
- 일반적으로 전체 스케일을 100배 확대한 뒤 익스포트하지만, 단순히 지오메트리와 뼈대를 Transform 노드로 100배 키우면 언리얼 엔진 임포트 시 루트 본(Root Bone)의 Scale 정보가 100으로 고정되는 심각한 문제가 발생합니다. [17:22]
- Root Scale이 100인 상태에서는 UE5 피직스 에셋 시뮬레이션 및 충돌 계산에 심각한 오류가 발생하거나 메시가 거대하게 일그러지므로 반드시 Root Scale을 1로 정규화해야 합니다. [17:46]
- VEX 코드를 활용한 Skeleton Transform Matrix 정규화 (00:18:01):
- 스켈레톤 경로 상에 Attribute Wrangle (Point 수준) 노드를 추가합니다. [19:26]
- 아래의 VEX 코드를 작성하여 뼈대의 Transform 매트릭스 스케일 값만 다시 $100$으로 나누어 $1$ 기준 값으로 초기화합니다. [19:31]
Cmatrix3 tr = 4@transform; tr /= 100.0; 4@transform = tr;- 이 조치를 거치면 후디니에서 확대된 지오메트리 크기($100\text{배}$)는 그대로 유지되면서도, 스켈레톤의 데이터 구조상 Transform Matrix는 $1$ 수준으로 깔끔하게 정규화(Normalization)되어 출력됩니다. [19:48]
- FBX 익스포트 실행 (00:20:22):
- ROP Character Output 노드의 Convert Units 옵션을 체크 해제(Uncheck)하고 Save to Disk를 눌러 FBX 파일로 저장합니다. [14:24]
5. 언리얼 엔진 5(UE5) 임포트 및 피직스 시뮬레이션 구현 (00:20:27 ~ 00:25:33)
- UE5 파일 임포트 및 구성 요소 확인 (00:20:27):
- Root Bone Scale 정상화 검증 (00:20:48):
- Skeleton 에셋을 열어 루트 본(Point 0)의 Transform Scale 정보를 확인하면 정상적으로 1.0으로 표기되는 것을 확인할 수 있습니다. [20:48]
- Physics Asset을 활용한 랙돌 시뮬레이션 테스트 (00:21:24):
- 절차적 시스템 확장 및 재활용성 검증 (00:22:52):
'이펙트 (FX) > 이펙트 팁 : Unreal' 카테고리의 다른 글
| [Houdini/Rigging] 언리얼에서 임포트한 스켈레탈 메시의 본 기즈모가 너무 클 경우 해결법 (RigPose, Gizmo, Scale, (0) | 2026.09.01 |
|---|---|
| [Unreal/Material] 언리얼 반투명 머티리얼에 모션블러 적용하기 (Translucent, Fluid VAT) (0) | 2026.08.27 |
| [Unreal/Niagara] 나이아가라의 머티리얼을 런타임에서 동적으로 변경하기 (Material Interface, Runtime) (1) | 2026.08.27 |
| [Unreal/Optimizing] 언리얼 엔진 "모범 사례"에 대한 오해와 진실 (최적화) (0) | 2026.08.21 |
| [Unreal] Verse 배울 수 있는 곳 추천 (Book of Verse) (0) | 2026.08.20 |
댓글