v0.6 기획 — 아무 메시나 부수고, 물을 마음대로
2026-09-20 · 요구 3가지 + 기존 약점 8가지를 어떻게 풀지, 무엇으로 확인할지
결론
세 가지를 고칩니다. ① 조각내기를 진짜 보로노이 방식으로 바꾸고 메시를 먼저 수리합니다. ② 물을 "떨어지는 공"에서 방향·속도·모양·점성을 정하는 물로 바꿉니다. ③ 숨겨 둔 값(마찰, 중력, 계산 정밀도, 연기 농도 등)을 전부 인자로 꺼냅니다. 그다음 남은 약점 8개를 정리하고 깃허브(choisam4u-creator)에 올립니다.
1. 먼저, 이 계획의 약점
- 보로노이는 느립니다. 조각 하나마다 이웃 8개와 잘라야 해서, 지금 방식보다 계산이 5~10배 늘어납니다. 조각 200개에서 몇 초가 걸릴 수 있습니다. 완화책은 이웃 수 제한과 미리보기용 저조각 모드입니다.
- 망가진 메시는 완벽히 못 고칩니다. 인터넷에서 받은 모델은 구멍이 뚫려 있거나 면이 뒤집혀 있습니다. 자동 수리(구멍 메움, 두께 주기)는 대부분을 살리지만 전부는 아닙니다. 그래서 수리 결과를 숫자로 보고해서 AI가 사용자에게 알리게 합니다.
- 물은 해상도가 전부입니다. 방향·속도를 아무리 잘 줘도 해상도가 낮으면 뭉툭합니다. "바로바로"와 "예쁘게"는 상충합니다. 미리보기는 낮게, 최종은 높게 두 단계로 나눕니다.
- 설정을 다 열면 AI가 헷갈립니다. 인자가 20개 넘는 도구는 AI가 엉뚱한 값을 넣습니다. 그래서 프리셋 + 덮어쓰기 구조로 갑니다. 기본은 이름 하나(
material="concrete"), 세밀 조정은 별도 인자. - 슬로모션을 전체에 걸면 길이가 바뀝니다. 파티클까지 느리게 하려면 장면 전체 시간을 늘려야 하고, 그러면 렌더 프레임 수가 늘어납니다. 구간 슬로모션과는 다른 도구로 분리합니다.
- 검증이 어렵습니다. "물리적으로 맞다"는 눈으로만 압니다. 숫자로 잡을 수 있는 것(무게 = 부피×밀도, 조각 부피 합 = 원본 부피, 물 부피 보존)만 테스트로 넣고 나머지는 실제 그림으로 확인합니다.
2. 요구 ① — 아무 스태틱 메시나, 물리에 맞게
지금 무엇이 문제인가
| 문제 | 왜 생기나 |
|---|---|
| 조각이 널빤지처럼 각짐 | 무작위 평면으로 통째로 자르기 때문. 실제 파괴는 점 주위로 갈라짐(보로노이) |
| 구멍 뚫린 모델이 이상해짐 | 닫히지 않은 메시는 자른 단면을 못 메움. 부피도 0이라 무게가 틀림 |
| 오목한 물건이 통나무처럼 굴러감 | 충돌 모양이 항상 볼록 껍질(Convex Hull). 컵이 돌덩이가 됨 |
| 맞은 곳이나 안 맞은 곳이나 똑같이 부서짐 | 조각 씨앗이 고르게만 뿌려짐 |
| 부순 단면이 겉면과 같은 색 | 속 재질이 따로 없음 |
어떻게 고치나
- 메시 먼저 진단·수리 (
prepare): 겹친 점 합치기 → 법선 정리 → 열린 테두리 메우기 → 그래도 열려 있으면shell_thickness만큼 두께 주기(Solidify). 결과를closed,volume_m3,repaired로 보고. - 보로노이 조각내기: 씨앗 점 N개를 뿌리고, 각 씨앗마다 가까운 이웃 k개와의 중간 평면으로 잘라 낸다. 이게 진짜 보로노이 셀이라 돌·콘크리트처럼 다각형으로 갈라진다.
- 씨앗 분포 선택 (
pattern):uniform고르게 /impact맞은 곳 촘촘 /radial중심에서 방사 /slabs층층이.focus로 집중도 조절. - 충돌 모양 선택 (
collision):convex빠름 /mesh오목한 모양 그대로 /auto조각 모양을 보고 고름. - 무게는 실제 부피에서: 조각의 닫힌 부피 × 재질 밀도. 부피가 0이면 상자 부피의 절반으로 추정하고 그 사실을 보고.
- 속 재질 (
interior_color): 자른 단면에만 다른 재질을 입힌다. 겉은 매끈, 속은 거칠게. - 부피 보존 검사: 조각 부피 합이 원본의 90~110% 안인지 확인해 결과에 넣는다. 이게 "물리에 맞게"의 숫자 근거.
새 도구: inspect_mesh(모델 건강 진단). destroy 에 추가되는 인자: pattern, focus, collision, interior, shell_thickness, repair, density, friction, bounce, margin.
3. 요구 ② — 물을 마음대로
지금은 "공이 떨어진다" 하나뿐
방향도, 모양도, 점성도, 계속 흐르는 것도 안 됩니다. 새 water 도구로 바꿉니다.
| 인자 | 무엇을 정하나 |
|---|---|
mode | drop 덩어리가 떨어짐 / stream 호스처럼 계속 뿜음 / pool 바닥에 물이 차 있음 / object 내가 만든 메시 모양 그대로가 물이 됨 |
shape | sphere(공) / box(상자) / column(기둥) — 물 덩어리 모양 |
direction_deg, pitch_deg, speed | 어느 쪽으로 몇 도로 초속 몇 m 로 나갈지. 옆으로 쏘기, 위로 뿜기, 비스듬히 다 됨 |
liquid | water / oil / honey / lava / mercury — 점성·표면장력 프리셋 |
viscosity, surface_tension | 프리셋을 덮어쓰는 숫자 |
gravity_scale | 0 이면 무중력에서 떠다니는 물방울 |
obstacles | 물이 부딪힐 물건 목록. 비우면 보이는 메시 전부 |
spray | 물보라·거품 알갱이 켜기 |
domain_size, resolution | 물이 살 수 있는 공간과 정밀도 |
smoothing, particle_radius | 표면을 얼마나 매끈하게 만들지 |
사용자: 건물 왼쪽에서 물을 옆으로 세게 쏴 줘, 꿀처럼 걸쭉하게.
AI:
water(mode="stream", at=[-8,0,4], direction_deg=90, pitch_deg=-10, speed=6, liquid="honey")사용자: 더 묽게, 물보라도.
AI:
water(..., liquid="water", spray=True)splash 는 water(mode="drop") 로 가는 얇은 껍데기로 남겨 기존 사용법을 깨지 않습니다.
4. 요구 ③ — 설정을 전부 열기
구조: 프리셋 이름 하나로 시작하고, 필요한 값만 덮어쓴다. 안 준 값은 프리셋 그대로.
| 새 도구/인자 | 여는 것 |
|---|---|
set_physics | 중력 세기·방향, 물리 하위 단계(substeps), 해석 반복(solver iterations), 전체 속도, fps. 리지드바디 정확도를 직접 조절 |
destroy 확장 | density(밀도), friction(마찰), bounce(튐), margin(충돌 여유), collision, pattern, focus, interior |
explode/fire/smoke 확장 | density(연기 농도), dissolve(사라지는 속도), vorticity(소용돌이), buoyancy(뜨는 힘), noise(디테일), adaptive(도메인 자동 확장) |
particles 확장 | size, size_random, gravity, drag, speed, lifetime, brownian(흔들림) |
set_render (신규) | 샘플 수, 모션블러 켜기·세기, 해상도, 노출, 뷰 변환(필름 룩) |
5. 기존 약점 8개 — 해결 방법
| 약점 | 해결 | 남는 한계 |
|---|---|---|
| 조각이 각짐 | 보로노이 조각내기 | 계산 시간 증가 |
| 접착(glue)이 느림 | glue_neighbors, glue_max 로 제약 수 직접 조절 + 결과에 소요 시간 보고 | 본질적으로 제약이 많으면 느림 |
| 되돌리기가 1단계 | 스냅샷 여러 개 + 되돌리기 직전 상태를 before_restore 로 자동 저장 → 되돌리기도 되돌릴 수 있음 | 여전히 파일 단위 |
| 하늘이 빠른 미리보기에 안 보임 | 하늘이 켜져 있으면 미리보기 품질을 자동으로 올리고 그 사실을 알림 | 그만큼 느려짐 |
| HDRI 다운로드 불가 | 그대로 둠. 파일이 없으면 무엇을 받아 어디에 두라고 안내 | 인터넷 연동 없음 |
| 도구 설명이 한국어뿐 | 모든 도구 설명 첫 줄에 영어 한 문장 추가 | 본문은 한국어 |
| 창문이 판때기 | 벽을 실제로 파내고(움푹) 유리를 안쪽에 넣음 | 실내는 없음 |
| 슬로모션이 파티클에 안 걸림 | set_timing(global_slow=) 로 장면 전체 시간을 늘림. 파티클 포함 전부 느려짐 | 전체 길이가 늘어남 |
| 연기·물을 내보낼 수 없음 | Alembic(.abc) 내보내기 추가. 물 표면과 조각 움직임이 같이 나감 | 연기(볼륨)는 여전히 안 됨 |
6. 작업 순서와 완료 기준
- 메시 수리 + 보로노이 — 완료 기준: 구멍 뚫린 메시를 넣어도 조각 부피 합이 원본의 90~110%, 실제 그림에서 다각형 조각
- 물 도구 — 완료 기준: 옆으로 쏜 물이 실제로 옆으로 날아간 픽셀, 꿀과 물의 결과가 다름
- 설정 개방 (
set_physics,set_render, 각 도구 인자) — 완료 기준: 중력 0에서 조각이 안 떨어짐 - 약점 8개 — 완료 기준: 각각 테스트 또는 실제 그림
- 문서·버전 0.6.0 → 깃허브 공개 (
choisam4u-creator/blender-fx-mcp)
검증은 지금처럼 uv run pytest -q(블렌더를 창 없이 띄워 실제로 계산)와 실제 렌더 그림으로 합니다. 마지막에 블렌더 창을 띄운 소켓 경로로 한 번 더 확인합니다.