v0.6 기획 — 아무 메시나 부수고, 물을 마음대로

2026-09-20 · 요구 3가지 + 기존 약점 8가지를 어떻게 풀지, 무엇으로 확인할지

결론

세 가지를 고칩니다. ① 조각내기를 진짜 보로노이 방식으로 바꾸고 메시를 먼저 수리합니다. ② 물을 "떨어지는 공"에서 방향·속도·모양·점성을 정하는 물로 바꿉니다. ③ 숨겨 둔 값(마찰, 중력, 계산 정밀도, 연기 농도 등)을 전부 인자로 꺼냅니다. 그다음 남은 약점 8개를 정리하고 깃허브(choisam4u-creator)에 올립니다.

1. 먼저, 이 계획의 약점

  1. 보로노이는 느립니다. 조각 하나마다 이웃 8개와 잘라야 해서, 지금 방식보다 계산이 5~10배 늘어납니다. 조각 200개에서 몇 초가 걸릴 수 있습니다. 완화책은 이웃 수 제한과 미리보기용 저조각 모드입니다.
  2. 망가진 메시는 완벽히 못 고칩니다. 인터넷에서 받은 모델은 구멍이 뚫려 있거나 면이 뒤집혀 있습니다. 자동 수리(구멍 메움, 두께 주기)는 대부분을 살리지만 전부는 아닙니다. 그래서 수리 결과를 숫자로 보고해서 AI가 사용자에게 알리게 합니다.
  3. 물은 해상도가 전부입니다. 방향·속도를 아무리 잘 줘도 해상도가 낮으면 뭉툭합니다. "바로바로"와 "예쁘게"는 상충합니다. 미리보기는 낮게, 최종은 높게 두 단계로 나눕니다.
  4. 설정을 다 열면 AI가 헷갈립니다. 인자가 20개 넘는 도구는 AI가 엉뚱한 값을 넣습니다. 그래서 프리셋 + 덮어쓰기 구조로 갑니다. 기본은 이름 하나(material="concrete"), 세밀 조정은 별도 인자.
  5. 슬로모션을 전체에 걸면 길이가 바뀝니다. 파티클까지 느리게 하려면 장면 전체 시간을 늘려야 하고, 그러면 렌더 프레임 수가 늘어납니다. 구간 슬로모션과는 다른 도구로 분리합니다.
  6. 검증이 어렵습니다. "물리적으로 맞다"는 눈으로만 압니다. 숫자로 잡을 수 있는 것(무게 = 부피×밀도, 조각 부피 합 = 원본 부피, 물 부피 보존)만 테스트로 넣고 나머지는 실제 그림으로 확인합니다.

2. 요구 ① — 아무 스태틱 메시나, 물리에 맞게

지금 무엇이 문제인가

문제왜 생기나
조각이 널빤지처럼 각짐무작위 평면으로 통째로 자르기 때문. 실제 파괴는 점 주위로 갈라짐(보로노이)
구멍 뚫린 모델이 이상해짐닫히지 않은 메시는 자른 단면을 못 메움. 부피도 0이라 무게가 틀림
오목한 물건이 통나무처럼 굴러감충돌 모양이 항상 볼록 껍질(Convex Hull). 컵이 돌덩이가 됨
맞은 곳이나 안 맞은 곳이나 똑같이 부서짐조각 씨앗이 고르게만 뿌려짐
부순 단면이 겉면과 같은 색속 재질이 따로 없음

어떻게 고치나

  1. 메시 먼저 진단·수리 (prepare): 겹친 점 합치기 → 법선 정리 → 열린 테두리 메우기 → 그래도 열려 있으면 shell_thickness 만큼 두께 주기(Solidify). 결과를 closed, volume_m3, repaired 로 보고.
  2. 보로노이 조각내기: 씨앗 점 N개를 뿌리고, 각 씨앗마다 가까운 이웃 k개와의 중간 평면으로 잘라 낸다. 이게 진짜 보로노이 셀이라 돌·콘크리트처럼 다각형으로 갈라진다.
  3. 씨앗 분포 선택 (pattern): uniform 고르게 / impact 맞은 곳 촘촘 / radial 중심에서 방사 / slabs 층층이. focus 로 집중도 조절.
  4. 충돌 모양 선택 (collision): convex 빠름 / mesh 오목한 모양 그대로 / auto 조각 모양을 보고 고름.
  5. 무게는 실제 부피에서: 조각의 닫힌 부피 × 재질 밀도. 부피가 0이면 상자 부피의 절반으로 추정하고 그 사실을 보고.
  6. 속 재질 (interior_color): 자른 단면에만 다른 재질을 입힌다. 겉은 매끈, 속은 거칠게.
  7. 부피 보존 검사: 조각 부피 합이 원본의 90~110% 안인지 확인해 결과에 넣는다. 이게 "물리에 맞게"의 숫자 근거.

새 도구: inspect_mesh(모델 건강 진단). destroy 에 추가되는 인자: pattern, focus, collision, interior, shell_thickness, repair, density, friction, bounce, margin.

3. 요구 ② — 물을 마음대로

지금은 "공이 떨어진다" 하나뿐

방향도, 모양도, 점성도, 계속 흐르는 것도 안 됩니다. 새 water 도구로 바꿉니다.

인자무엇을 정하나
modedrop 덩어리가 떨어짐 / stream 호스처럼 계속 뿜음 / pool 바닥에 물이 차 있음 / object 내가 만든 메시 모양 그대로가 물이 됨
shapesphere(공) / box(상자) / column(기둥) — 물 덩어리 모양
direction_deg, pitch_deg, speed어느 쪽으로 몇 도로 초속 몇 m 로 나갈지. 옆으로 쏘기, 위로 뿜기, 비스듬히 다 됨
liquidwater / oil / honey / lava / mercury — 점성·표면장력 프리셋
viscosity, surface_tension프리셋을 덮어쓰는 숫자
gravity_scale0 이면 무중력에서 떠다니는 물방울
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. 작업 순서와 완료 기준

  1. 메시 수리 + 보로노이 — 완료 기준: 구멍 뚫린 메시를 넣어도 조각 부피 합이 원본의 90~110%, 실제 그림에서 다각형 조각
  2. 물 도구 — 완료 기준: 옆으로 쏜 물이 실제로 옆으로 날아간 픽셀, 꿀과 물의 결과가 다름
  3. 설정 개방 (set_physics, set_render, 각 도구 인자) — 완료 기준: 중력 0에서 조각이 안 떨어짐
  4. 약점 8개 — 완료 기준: 각각 테스트 또는 실제 그림
  5. 문서·버전 0.6.0 → 깃허브 공개 (choisam4u-creator/blender-fx-mcp)

검증은 지금처럼 uv run pytest -q(블렌더를 창 없이 띄워 실제로 계산)와 실제 렌더 그림으로 합니다. 마지막에 블렌더 창을 띄운 소켓 경로로 한 번 더 확인합니다.