Search

MPM SOLVER

MPM Solver가 뭐야? (한 문장 정의)

*MPM(Material Point Method)**은 “파티클(물질점)”로 재료를 표현하면서, 내부는 “격자(grid)”에서 계산해 고체/연성/점성/입자성 재질의 탄소성(elasto-plastic) 거동을 강하게 다루는 솔버야. 공식 문서에서도 FLIP을 고체역학 쪽으로 확장한 개념이고, 눈/흙/진흙/콘크리트/금속/젤리/고무/물/꿀/모래 같은 다양한 재질을 한 씬에서 상호작용시키는 데 초점이 있다고 설명해.

“Vellum/FLIP/FEM(RBD)”랑 뭐가 달라?

공식 문서 요지 기준으로 딱 감 잡기 좋게 정리하면:
Vellum(PBD): 빠르고 컨트롤 쉬움(천/헤어/소프트바디/그레인), 대신 “진짜 재료의 응력-변형 기반 파괴/흙·눈의 덩어리감”은 물리적으로 한계가 있음.
FLIP: 유체(물) 자체에 강함. 하지만 “흙/눈처럼 뭉치고 찢어지는 재질”을 제대로 하려면 별도의 트릭/결합이 필요.
MPM: 덩어리(Chunky) 재질과 **다이나믹 프랙처(부서짐)**를 자연스럽게 만들기 쉬움. 물+흙처럼 서로 섞이며 영향을 주는 2-way coupling도 강조돼.
FEM/클래식 솔리드: 정확하지만 셋업/안정성/성능(특히 대규모)에서 부담이 큼.

MPM의 핵심 구조 (공식 “워크플로우” 그대로)

MPM은 SOP 레벨에서 다음 4개가 기본 골격이야.
1.
MPM Container
시뮬의 해상도(Particle Separation), grid voxel 크기(dx = Particle Separation × Grid Scale), 시작 프레임, (선택) 도메인 경계/삭제/반사 등을 정의.
특히 Grid Scale=2면 “평균적으로 voxel당 8 particles” 정도를 기본 가정으로 둔다고 문서에 명시돼.
1.
MPM Source
입력 지오/볼륨에서 **MPM 파티클(물질점)**을 만들고, 재질 프리셋/물성(강성, 점성, 응집, 항복 등)을 포인트 속성으로 세팅해 Solver로 보냄.
1.
MPM Collider
충돌체를 VDB collider로 만들고(정적/리짓 애니메이션/디포밍 등), 컨테이너 해상도에 맞춰 변환. 얇은 콜라이더는 추가 설정이 필요할 수 있다고 문서에서 별도로 다룸.
1.
MPM Solver
실제 해를 푸는 곳. sparse background grid를 쓰고, 구현은 **OpenCL 기반(GPU 가속)**이라고 공식 문서에 적혀 있어.

MPM Solver 파라미터 “진짜 중요한 것만” (문서/마스터클래스 공통 포인트)

MPM에서 결과를 좌우하는 건 대부분 아래 묶음이야.

A) 해상도(Resolution): “파티클 간격이 곧 모든 것”

Particle Separation: 소스/콜라이더/시뮬 전반 디테일을 한 번에 규정하는 “기준 스케일”.
Grid Scale → dx: 배경 격자 voxel 크기. 물질이 서로 달라붙거나(물+흙이 과하게 붙는 현상) 같은 상호작용 스케일까지 바꾸는 경우가 많아서, 트러블슈팅에서도 Grid Scale 조정을 직접 권장해.
감각적인 가이드
“덩어리감/질량감”을 더 잘 잡고 싶다 → 보통 Separation을 줄여 디테일↑
“너무 붙고 뭉개져서 흐름이 안 나온다” → Grid Scale을 낮춰 상호작용 스케일을 타이트하게(문서에 실제 예시로 언급)

B) 타임스텝/서브스텝(Iterations): 안정성은 여기서 결정

MPM Solver > Iterations에 핵심이 몰려 있어.
Global Substeps: “프레임당 DOP substeps”. 기본 1 권장(성능). 다만 연속 방출이 계단처럼 보이면 올리라고 트러블슈팅에 명시.
CFL Condition: “한 타임스텝에 파티클이 voxel의 몇 %까지 움직일 수 있나” = 속도 기반 안정성 제한. 빠르면 더 쪼개짐.
Material Condition: 재질 강성/물성 기반 안정성 제한. 금속/콘크리트처럼 “너무 뻣뻣한 재질”은 이 제한 때문에 서브스텝이 폭증할 수 있고, FAQ에서도 “느릴 수밖에”를 언급해.
Substeps Min/Max: 솔버가 자동으로 잡는 서브스텝의 상한/하한.
문서에서 “실제로 몇 서브스텝이 쓰였는지(detail attribute) 보고 최소값을 올리거나 CFL/Material Condition을 조정하라”는 팁이 있음.

C) Collision: “얇은 콜라이더/관통”은 정석 처방이 있다

얇은 콜라이더 관통 문제는 트러블슈팅에 정답 루트가 거의 그대로 적혀 있어.
1.
MPM Collider에서 Voxel Size(콜라이더 해상도) 더 촘촘히
2.
MPM Solver > Advanced에서 Enable Particle-Level Collisions 켜기 (정밀하지만 비용↑)
3.
Move Outside Colliders를 Velocity-Based로 (가장 정확하지만 불안정 가능)

D) Surface Tension & Sleeping (H21에서 특히 체감 큼)

Surface Tension: 액체/점성 타입에서 사용. H21에 “Point Based vs Grid Based” 옵션이 강화됐다고 What’s New에 정리돼 있고, Solver 파라미터에도 두 방식의 성격(정확/느림 vs 빠름/덜 안정)이 명시돼.
Sleeping(Auto Sleep): 움직임 적은 파티클을 “비활성화”해서 속도를 올리는 기능. 대규모에서 체감이 큼.

실무 레시피: Masterclass에서 계속 나오는 “대표 패턴 6개”

(아래는 H20.5/H21 마스터클래스 개요 + 문서 가이드에 맞춰 정리한 ‘자주 쓰는 패턴’이야.)
1.
눈/흙/젤리 같은 “chunky material” 기본
Container로 해상도 결정 → Source에서 프리셋 선택/미세조정 → Solver에서 CFL/Material Condition으로 안정화
1.
물+흙(2-way coupling)
서로 다른 Source를 합쳐 Solver에 넣는 게 기본 구조(문서 예시에도 “soil + water” 조합이 언급됨)
“너무 달라붙어 물이 흙을 잘 못 흘려내림” 같은 상황은 Grid Scale 조정이 해법으로 문서에 등장
1.
연속 방출(컵 채우기/크림 짜기 등)
기본적으로 MPM은 “겹치는 파티클”을 싫어함 → 그래서 MPM Source의 Overlapping Expansion이 공식 해법으로 안내됨
1.
리짓 콜라이더를 빠르고 정확하게
Transform으로 애니메이션 주고 Collider Type을 Animated (Rigid)로: 문서 워크플로우에 그대로 있음
1.
얇은 시트(금속 찢김)
Source를 “Volume”이 아니라 “Surface”로 뿌리고, Relax Iterations로 균일 분포 만들라는 식의 예제가 공식 MPM Configure(금속 tearing) 문서에 정리돼 있어.
1.
진짜 파괴(Destruction) 워크플로우
MPM은 RBD처럼 “먼저 프랙처 → 시뮬”이 아니라, 공식 문서가 강조하듯:
먼저 시뮬을 마음에 들게 만든 뒤 → 마지막 프레임 상태로 Post-Fracture → Deform Pieces로 리타게팅
그리고 이때 Deformation Gradient F를 캐시해야 한다(Solver Output에서 켜야 함)고 경고로 박혀 있어.

성능/안정성 체크리스트 (문서 기반 “막힐 때 여기부터”)

느리다/불안정하다
실제 서브스텝 수(detail attribute) 확인 → Min Substeps 올리거나 CFL/Material Condition 조정
얇은 콜라이더 관통
Collider Voxel Size↑ → Particle-Level Collisions 켜기 → Velocity-Based Move Outside
연속 방출이 계단진다
Global Substeps↑ (문서에 그대로)
물질이 떨리거나(wiggle) / 튄다(bounce)
트러블슈팅에 재질 파라미터(강성/응집/임계 압축 등) 조정 방향이 구체적으로 적혀 있음
라이선스
SOP에 있어도 “DOP 권한”이 필요해서 Core에는 없고 FX/Indie/Apprentice/Education에 있다고 FAQ에 명시