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

[Houdini] MPM 솔버 생기초 요약 (MPM Fundamentals)

by Minkyu Lee 2025. 12. 25.

 

개요

후디니의 최신 솔버인 MPM 솔버에 대해 알아본다.

MPM 솔버는 아래와 같이 약간의 볼륨을 이용해서 묽은 진흙 등을 표현하기 좋은 비교적 빠른 솔버다.

이미지 출처 https://youtu.be/VMstxK6Xl0s?list=PL4JRTlA1OATDrjpJXgIMi-Ig6iqYSSPhp

 

영상

https://youtu.be/fDmJo3zpb1g

 

 

내용

[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 홈페이지에 있다.

MPM_Fundamentals_files.zip
0.20MB

댓글