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에 명시