본문 바로가기
이펙트 (FX)/이펙트 팁 : Unreal

[Unreal/Houdini] 후디니로 언리얼용 스켈레탈 메시 만들기

by Minkyu Lee 2026. 9. 1.

 

1. 영상 정보

 

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):
    • Draw Curve 노드를 배치한 후 뷰포트에서 Enter 키를 눌러 활성화 상태로 전환하고 마우스 드래그로 자유로운 커브 라인을 작성합니다. (Escape 키로 작성 완료) [00:50]
    • Resample 노드를 연결하여 드로잉된 커브의 포인트 간격을 일정하게 재배치합니다. 이는 이후 메시 생성 시 균일한 폴리곤 밀도를 유지하는 데 필수적입니다. [01:20]
  • Sweep 노드를 이용한 입체화 및 Cap 닫기 (00:01:33):
    • Sweep 노드를 연결하고 Surface TypeRound Tube로 설정하여 커브 라인을 따라 원통형 단면을 생성합니다. [01:49]
    • End Caps 옵션을 Grid로 변경하여 뚫려 있는 양쪽 끝 단면을 캡으로 닫아 완전한 닫힌 지오메트리(Closed Primitive)로 만듭니다. [02:01]
  • Attribute Noise를 이용한 불규칙한 두께 변화 생성 (00:02:05):
    • Resample과 Sweep 사이 노드 흐름에 Attribute Noise 노드를 삽입합니다. [02:25]
    • 기본 변경 속성인 Cd(Color)를 pScale(Point Scale)로 변경하여 커브 각 포인트마다의 스케일 값을 노이즈 파형에 따라 무작위로 변형합니다. [02:38]
    • Amplitude, Element Size, Offset 파라미터를 조절하여 유기적인 불규칙성을 부여합니다. [02:51]
  • 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):
    • 메시의 중심축을 관통하는 뼈대는 앞서 만든 Attribute Noise 직후의 커브 포인트들을 그대로 재활용합니다. [06:16]
    • 해당 위치에 Null 노드를 연결하고 이름을 OUT_SKELETON으로 지정합니다. [06:29]
  • 스켈레톤 포인트 최적화 (Resample) (00:06:38):
    • 추출한 커브 노선에 Resample 노드를 추가로 연결합니다. 원본 포인트(예: 34개)가 너무 많으면 관절 개수가 과도해지므로, Length 값을 크게 올려 적절한 관절 수(예: 11개)로 줄여줍니다. [06:52]
  • Rig Doctor 노드를 통한 본 구조 변환 및 방향 재설정 (00:07:34):
    • Rig Doctor 노드를 연결하여 일반 포인트를 KineFX 뼈대 구조로 초기화합니다. [07:40]
    • Initialize Transforms 버튼을 클릭하여 본의 Transform 매트릭스를 생성하고, 계층 구조(Parent-Child Relationship)를 생성합니다. [07:45]
    • 뷰포트 상에서 뼈대의 크기(Joint Scale) 및 부모-자식 본 간의 방향성(Hierarchy)이 제대로 정렬되었는지 확인합니다. [08:17]
    • 완료된 뼈대 라인 끝에 Null 노드를 배치하고 OUT_RIG으로 명명합니다. [09:05]

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개의 입력단에 각각 다음 노드를 연결합니다:
      1. Input 1 (Skinned Mesh): OUT_SKINNED_MESH (스킨 웨이트가 완료된 지오메트리) [12:52]
      2. Input 2 (Capture Pose): OUT_RIG (기본 포즈 뼈대) [13:07]
      3. Input 3 (Animation): 애니메이션 노드 (단일 포즈 익스포트 시 기본 리포즈 유지를 위해 OUT_RIG 연결) [13:19]
    • 익스포트 옵션에서 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]
    C
     
    matrix3 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):
    • UE5 콘텐츠 드로어(Content Drawer)로 생성된 FBX 파일을 드래그 앤 드롭합니다. [20:34]
    • Skeletal MeshImport Mesh 옵션을 활성화한 상태에서 Import All을 진행합니다. (Smoothing Group 경고는 후디니 기본 FBX 출력 특성이므로 무시) [20:43]
    • 임포트 완료 후 3가지 핵심 에셋이 생성됩니다:
      1. Skeletal Mesh (분홍색 아이콘)
      2. Physics Asset (주황색 아이콘)
      3. Skeleton (파란색 아이콘) [21:17]
  • Root Bone Scale 정상화 검증 (00:20:48):
    • Skeleton 에셋을 열어 루트 본(Point 0)의 Transform Scale 정보를 확인하면 정상적으로 1.0으로 표기되는 것을 확인할 수 있습니다. [20:48]
  • Physics Asset을 활용한 랙돌 시뮬레이션 테스트 (00:21:24):
    • 피직스 에셋을 열면 스켈레톤 마디 마디를 따라 충돌 캡슐(Capsule Body)들이 자동 배치되어 있습니다. [21:53]
    • Simulate 버튼을 누르면 메시가 유연하게 하강하며 바닥에 찰지게 떨어지는 실시간 피직스/랙돌 시뮬레이션을 확인할 수 있습니다. [21:32]
  • 절차적 시스템 확장 및 재활용성 검증 (00:22:52):
    • 후디니로 돌아와 커브를 알파벳 'S' 자 형태로 새로 그리고 노드를 재실행합니다. [23:10]
    • 스켈레톤과 스킨 웨이트가 자동으로 새 'S' 자 메시에 할당되며, 똑같이 ROP Character Output으로 익스포트합니다. [23:18]
    • UE5로 가져온 후 머티리얼 인스턴스를 입히고 뷰포트에 여러 개 배치한 뒤 Simulate Physics를 켜고 실행하면, 후디니에서 드로잉한 임의의 모양대로 즉시 물리 시뮬레이션이 동작하는 자동화 파이프라인이 완료됩니다. [23:56]

댓글