
개요
후디니의 최신 솔버인 MPM 솔버에 대해 알아본다.
MPM 솔버는 아래와 같이 약간의 볼륨을 이용해서 묽은 진흙 등을 표현하기 좋은 비교적 빠른 솔버다.

이미지 출처 https://youtu.be/VMstxK6Xl0s?list=PL4JRTlA1OATDrjpJXgIMi-Ig6iqYSSPhp
영상
내용
[00:00:00 - 00:02:41] MPM 솔버의 기본 개념 및 구조
MPM은 'Material Point Method'의 약자다.
FLIP 솔버의 확장된 형태로 볼 수 있으며 고체 역학에 가깝다.
가장 큰 장점은 눈, 흙, 물 등 성질이 다른 물질들을 하나의 솔버 안에서 효율적으로 섞고 상호작용하게 만들 수 있다는 점이다.
Vellum Grain과 달리 제약 조건(Constraints)보다는 연속적인 물질(Continuous Material)로 작동한다.
대규모의 고체나 소규모 유체 시뮬레이션에 적합하다.
MPM 셋업의 기본 구조는 다음과 같다.
- MPM Source: 지오메트리의 동작과 물성(눈, 물, 흙 등)을 정의합니다.
- MPM Collider: 정적(Static) 또는 동적(Dynamic) 충돌체를 정의하며, 충돌 지오메트리를 VDB로 변환하여 계산합니다.
- MPM Container: 시뮬레이션의 해상도와 경계(Boundaries)를 결정합니다. 소스와 충돌체의 해상도는 이 컨테이너의 설정에 영향을 받습니다.
- MPM Solver: CFL 조건과 재질 조건(Material Conditions)을 통해 서브스텝(Substeps)을 동적으로 제어합니다.
[00:02:41 - 00:08:11] MPM Configure 노드를 통한 노드 파라미터 분석
MPM Configure 노드를 통해 자동 생성된 네트워크를 분석한다.
각 노드의 기능 설명이다.
- MPM Source: Emission Type을 'Continuous'로 설정하여 지속적인 방출을 만들거나, 초기 속도(Initial Velocity)를 부여하는 방법을 보여줍니다. 재질 프리셋(Snow, Water 등)을 변경하면 파티클의 거동뿐만 아니라 물리 속성값들도 자동으로 변경됩니다.
- MPM Collider: 충돌체 타입에는 Rigid(강체)와 Deforming(변형)이 있습니다. 단순 이동/회전은 Rigid로, 캐릭터처럼 포인트 위치가 변하는 경우는 Deforming으로 설정해야 합니다. 마찰(Friction)과 점착(Sticky) 파라미터로 파티클이 표면에 미끄러지거나 달라붙는 정도를 조절합니다.
- MPM Container: Particle Separation 값이 해상도를 결정하며, 이 값을 반으로 줄이면 해상도는 8배 증가합니다. Domain 설정에서 경계면을 'Close'(충돌) 또는 'Delete'(삭제)로 설정할 수 있습니다.
- MPM Solver: Time Scale로 속도를 조절하고, CFL 값을 낮춰 서브스텝을 늘려 시뮬레이션의 정확도를 높일 수 있습니다.
[00:08:11 - 00:13:35] 수동 셋업 및 캐릭터 애니메이션 통합 (Manual Setup)
카피바라 캐릭터가 3가지 다른 물성(진흙, 묽은 진흙, 물) 위를 걸어가는 씬을 만들어본다.
- 캐릭터 애니메이션: Motion Clip과 Soft Transform을 사용하여 카피바라가 평지를 걷다가 웅덩이로 걸어 내려가는 애니메이션을 수정합니다.
- 소스 설정: 3개의 소스를 생성하고 각각 다른 물성을 부여합니다. 첫 번째는 발자국이 남도록 가소성(Plasticity)이 높은 진흙, 두 번째는 밀도(Density)가 높은 묽은 진흙, 세 번째는 일반 물로 설정합니다. 시각적 구분을 위해 Color 노드로 색상을 다르게 지정합니다.
- 동적 충돌체 설정: 카피바라를 Collider로 설정하되, 물에 들어가기 전에는 발에 흙이 묻도록 Stickiness를 10으로 높게 주고, 물에 닿는 시점부터는 0으로 낮추고 마찰(Friction)도 0.01로 줄여 자연스러운 상호작용을 유도하는 애니메이션을 적용합니다.
[00:13:35 - 00:19:57] 파티클 메쉬 변환 (Meshing MPM Particles) 캐시된 시뮬레이션 데이터를 메쉬로 변환하는 과정입니다. Blast 노드와 @source_name 속성을 사용하여 각 소스(진흙, 액체, 물)를 분리합니다.
- 진흙/고체 메쉬 (VDB 방식): VDB from Particles를 사용합니다. 적절한 복셀(Voxel) 사이즈를 찾기 위해 detail 함수를 사용한 표현식(Expression)을 활용하여 MPM 해상도 기반으로 자동 계산되도록 설정합니다. 이후 VDB Reshape (Dilate 후 Erode)와 VDB Smooth를 거쳐 Convert VDB로 Polygon Soup으로 변환합니다.
- UV 생성: 움직이는 메쉬에 텍스처를 입히기 위해 UV Texture를 정적인 프레임(Time Shift)에서 생성한 뒤, Attribute Copy 및 Attribute Transfer를 사용하여 움직이는 파티클 메쉬로 UV를 전송하는 테크닉을 보여줍니다.
- 물 메쉬 (Particle Fluid Surface): 물은 Particle Fluid Surface 노드를 사용하는 것이 효과적입니다. 추가적으로 렌더링 시 깊이감을 주기 위해 두 번째 Particle Fluid Surface를 사용하여 내부 밀도(Interior Density)용 볼륨을 별도로 생성합니다.
[00:19:57 - 00:27:33] Solaris 및 Karma 렌더링 셋업 Solaris(LOPs) 환경으로 넘어가 렌더링을 준비합니다.
- Scene Import: SOP Import를 사용하여 분리한 각 소스(진흙 1, 2, 물, 밀도 볼륨)를 불러옵니다. 이때 Import Path Prefix를 /FX/viscous, /FX/water 등으로 지정하여 체계적인 Scene Graph 경로를 만듭니다.
- 조명 및 재질: Dome Light에 HDRI를 적용합니다. Material Library 내에서 Karma Material Builder를 생성합니다.
- 물(Water): 투과(Transmission)를 높이고 거칠기(Roughness)를 낮춰 투명하게 만듭니다.
- 진흙(Mud): MtlX Image 노드로 텍스처를 불러와 Base Color와 Displacement에 연결합니다. 텍스처 매핑을 위해 앞서 생성한 UV가 사용됩니다.
- 밀도(Density): Karma Pyro Material을 사용하여 물의 내부 색상(Absorption Color)과 산란(Scatter)을 표현합니다.
- 재질 할당: Assign Material 노드나 Path 기반 할당을 통해 각 지오메트리 경로에 맞는 재질을 연결합니다.
[00:27:33 - 00:30:44] 카메라 설정 및 최종 렌더링
- 카메라 및 렌더 세팅: 뷰포트에서 원하는 구도를 잡고 카메라를 생성합니다. Karma Render Settings에서 해상도(1920x1080), 렌더 엔진(XPU), 모션 블러(Velocity Blur), 디노이저(OptiX Denoiser)를 설정합니다.
- 최종 결과 확인: 뷰포트의 Karma XPU 실시간 렌더를 통해 재질과 조명을 확인합니다. 최종 렌더링 전에는 시뮬레이션의 Particle Separation을 0.0034 정도로 낮추어 약 4,100만 개의 파티클을 생성, 디테일을 높일 것을 권장합니다(MPM은 보통 4천만~8천만 파티클 권장).
파일
원본 프로젝트 파일은 HDRI, 텍스처 등을 더 제공하지만 용량이 너무 커서 최소한만 남겼다.
원본이 필요하다면 sidefx 홈페이지에 있다.
'이펙트 (FX) > 이펙트 팁 : Houdini' 카테고리의 다른 글
| [Houdini] Labs File Cache 노드 Wedge 사용법 (Wedging, 웨지, 웻지, 파일 캐시) (0) | 2026.01.07 |
|---|---|
| [Houdini] MPM 솔버 기초 튜토리얼 정리 (INDIAN VFX SCHOOL) (0) | 2026.01.06 |
| [Houdini] Ubisoft의 절차적 월드 생성 파이프라인 소개 (Farcry5 예시) (0) | 2025.10.07 |
| [Houdini] 캐릭터 FBX 익스포트 하는 법 (FBX Characteroutput) (0) | 2025.09.08 |
| [Houdini] RBD Cluster 올바른 사용법 (0) | 2025.08.26 |
댓글