메타볼은 구를 여러 개 겹쳐 그리는 게 아니라, 3D 공간 전체에 "밀도" 값을 채우고 그 값이 일정 기준(isolation)을 넘는 경계만 표면으로 뽑아내는 방식입니다. 이 데모가 쓰는 three/addons/objects/MarchingCubes.js는 공간을 해상도(resolution)만큼 잘게 나눈 격자(복셀)마다 밀도를 저장해 두고, 매 프레임 mc.reset()으로 격자를 비운 뒤 mc.addBall(x, y, z, strength, subtract)를 여러 번 불러 "이 위치에 이만큼 강한 밀도 방울을 더한다"를 누적합니다.
두 방울이 가까워지면 그 사이 격자의 밀도가 겹쳐 합산되고, 합산된 값이 기준을 넘는 순간 두 표면이 하나로 이어집니다 — 이게 메타볼 특유의 "액체처럼 뭉쳤다 떨어지는" 모양의 정체입니다. mc.update()를 부르면 그 밀도 격자를 실제 삼각형 메시로 변환하는 마칭 큐브 알고리즘(격자의 각 셀마다 경계가 어느 모서리를 지나는지 조회 테이블로 찾는 고전적인 기법)이 돌아갑니다.
addBall의 좌표는 필드 공간(대략 0~1)을 기준으로 하고, strength·subtract 값으로 방울의 "부피감"과 뭉쳤을 때 얼마나 매끄럽게 이어지는지를 조절합니다. resolution을 높이면 표면이 매끈해지지만 격자 칸 수가 세제곱으로 늘어나 매 프레임 계산 비용도 급격히 커지므로, 실시간 애니메이션에서는 32 안팎이 실용적인 상한선입니다.
언제 쓰나
슬라임·액체 금속 캐릭터, 화학/분자 시각화, 유기적으로 합쳐지는 로고 애니메이션에.