
무슨 일이 있었나요?
3D 모델링을 코드로 해본 적 있으신가요? Matt Keeter가 거리 필드 기반 솔리드 모델링을 위한 실험적 IDE Halfspace를 공개했어요. Matt Keeter는 이 분야에서 꽤 알려진 개발자예요. 함수 표현 기반 CAD 라이브러리 libfive, 복잡한 수식 형상을 GPU로 대량 병렬 렌더링하는 연구(SIGGRAPH 2020 발표), Rust로 만든 수식 평가 엔진 Fidget 등을 만들어왔거든요. Halfspace는 그동안 쌓아온 연구를 '실제로 모델링하는 도구'의 형태로 묶어보는 실험이라고 보면 될 것 같아요.
거리 필드(SDF)가 뭔가요?
이게 핵심이라 천천히 설명해볼게요. 우리가 흔히 아는 3D 모델은 대부분 메시(mesh), 즉 수많은 삼각형을 이어붙인 껍데기예요. 반면 부호 있는 거리 필드(Signed Distance Field, SDF)는 형상을 함수로 표현해요. 공간의 한 점 (x, y, z)를 넣으면 '이 점이 표면에서 얼마나 떨어져 있는지'를 돌려주는 함수죠. 바깥이면 양수, 안쪽이면 음수, 딱 표면 위면 0이에요.
예를 들어 반지름 r인 구는 이 한 줄이면 끝나요.
sphere(x, y, z) = sqrt(xx + yy + z*z) - r
진짜 매력은 도형을 합치는 방법이에요. 두 도형의 합집합은 min, 교집합은 max, 빼기는 max(a, -b)로 끝나거든요. 삼각형 메시끼리 불리언 연산을 하면 경계가 깨지거나 구멍이 생기는 골치 아픈 문제가 자주 생기는데, SDF는 그냥 숫자 비교라서 훨씬 안정적이에요. 함수 값에서 상수를 빼기만 하면 형상 전체가 두꺼워지는 오프셋도 공짜로 얻고, 두 도형을 부드럽게 녹여 붙이는 smooth union 같은 효과도 쉽게 만들 수 있어요.
비유하자면 메시는 '찰흙 조각의 겉면을 빼곡하게 사진 찍어둔 것'이고, SDF는 '찰흙이 어디에 있는지 알려주는 규칙'이에요. 규칙이니까 해상도 걱정이 없고, 수정도 수식 하나만 바꾸면 되죠.
왜 전용 IDE가 필요할까요?
SDF는 이론적으로 우아하지만 실제로 쓰려면 벽이 있어요. 함수를 화면에 보여주려면 공간 곳곳에서 함수를 엄청나게 많이 평가해야 하거든요. 형상이 복잡해질수록 수식이 길어지고, 실시간 미리보기가 점점 버거워져요. Matt Keeter의 이전 연구들이 바로 이 '복잡한 수식을 빠르게 평가하고 렌더링하는 문제'를 다뤄왔고, Halfspace는 그걸 코드 편집과 실시간 미리보기가 붙은 작업 환경으로 풀어보려는 시도예요. 구체적인 스크립트 문법, 지원 기능, 내보내기 형식 같은 세부 사항은 프로젝트 페이지에서 직접 확인해보세요. 이름에 '실험적'이 붙은 만큼 완성품이라기보다는 아이디어를 탐색하는 단계로 보는 게 맞아요.
업계 맥락: 다른 코드 CAD와 비교하면
OpenSCAD는 가장 유명한 코드 CAD로 3D 프린팅 커뮤니티에서 많이 써요. 메시 기반 불리언 연산을 쓰다 보니 모델이 복잡해지면 렌더링이 느려지는 게 단점이에요. CadQuery나 build123d는 파이썬 기반으로, 상용 CAD처럼 B-rep(경계 표현) 방식의 OpenCascade 커널을 써서 정밀한 기계 부품 설계에 강해요. 상용 쪽에서는 nTop이 함수 표현(implicit) 모델링으로 3D 프린팅용 격자 구조 설계 시장을 개척했고, 그래픽 쪽에서는 Inigo Quilez의 작업과 Shadertoy 덕분에 SDF가 이미 익숙한 기법이죠.
SDF의 약점도 분명해요. min이나 max로 합친 결과는 정확한 거리가 아니라 근사치가 되기 때문에 일부 연산의 품질이 떨어질 수 있어요. 특정 모서리 하나만 골라 필렛(둥글게 깎기)을 넣는 식의 작업은 B-rep보다 훨씬 까다롭고요. 최종적으로 3D 프린터나 다른 툴로 넘기려면 마칭 큐브나 듀얼 컨투어링 같은 알고리즘으로 메시를 다시 뽑아내야 해요.
한국 개발자에게 주는 시사점
3D 프린팅이 취미인 개발자라면 OpenSCAD의 대안으로 SDF 모델링을 경험해볼 좋은 기회예요. 유기적인 곡면이나 격자 구조처럼 메시 기반 툴로는 고통스러운 형상에서 차이가 확 느껴질 거예요. 게임이나 그래픽 개발자라면 셰이더에서 쓰던 SDF 지식을 모델링으로 그대로 확장할 수 있어서 흥미로울 거고요. Rust 개발자에게는 Matt Keeter의 코드와 블로그 글이 성능 최적화, JIT 컴파일, GPU 활용을 공부하기에 아주 좋은 자료예요. 친절하고 깊이 있는 글로 유명하거든요.
마무리
핵심 한줄: Halfspace는 형상을 함수로 다루는 SDF 모델링을 실제 작업 환경으로 끌어오려는 실험이고, 코드 CAD의 다음 모습을 엿볼 수 있는 프로젝트예요.
여러분은 3D 모델링을 할 때 마우스로 그리는 GUI CAD와 코드로 짜는 CAD 중 어느 쪽이 편하신가요? 코드 CAD가 언젠가 주류가 될 수 있을까요?
🔗 출처: Hacker News