Halfspace - 거리장 기반 솔리드 모델링을 위한 실험적 IDE
요약
Halfspace는 Fidget 기하 커널 기반의 실험적 IDE로, 거리장(Signed Distance Field)을 활용하여 솔리드 모델링을 수행합니다. 기본 도형과 스크립트 조합 외에 거리장 자체를 시각화하여 표면의 불연속성이나 법선 문제를 확인할 수 있게 합니다. 웹/네이티브 환경 모두에서 높은 렌더링 속도를 제공하며, 점진적 모델 구성 방식을 지원하는 것이 특징입니다.
핵심 포인트
- 거리장 기반 솔리드 모델링을 위한 실험적 IDE입니다.
- 표면의 불연속성 및 법선 문제를 거리장 시각화를 통해 확인 가능합니다.
- 작은 표준 라이브러리와 점진적 모델 구성을 함께 지원합니다.
- 웹과 네이티브 환경 모두에서 GPU 가속 렌더링 속도를 확보했습니다.
Halfspace 는 Fidget 기하 커널 위에서 기본 도형과 스크립트로 모델을 만들고, 이미지나 삼각형 메시로 내보내는 실험적 IDE임
도형을 조합하는 데 그치지 않고 거리장 자체를 시각화 해, 표면의 부호만으로는 드러나지 않는 불연속과 잘못된 법선 문제를 확인할 수 있음
작은 표준 라이브러리와 점진적 모델 구성 을 함께 지원하며, 복잡한 모델을 작은 조각으로 나눠 각각 매개변수화하고 시각화할 수 있음
웹과 네이티브를 함께 지원하며, 래스터화와 후처리를 GPU에서 처리 하도록 Fidget을 개선해 두 환경 모두에서 네이티브 수준의 렌더링 속도를 확보함
MPLv2 오픈소스 이지만 적극적인 변경과 호환성 파괴를 감수하는 실험 단계로, 중요한 용도로 사용하는 것은 권장하지 않음
모델링 도구로서의 목표
Halfspace 는 거리장 기반 솔리드 모델링 IDE이자 Fidget 커널 의 기능을 보여주는 애플리케이션임
GUI에서 이미지를 거의 실시간으로 래스터화하며, 모델을 이미지 또는 삼각형 메시로 내보낼 수 있음
웹 데모 는 컴퓨터에서 사용하는 것이 좋음
모바일 Safari에는 WebGPU 관련 문제가 있고, 이동/기울이기/확대/축소 조작은 아직 멀티터치를 고려해 설계하지 않았음
바이브 코딩으로 만든 프로젝트가 아님
2025년 4월 부터 직접 코드를 작성해 왔으며, LLM 사용 방침 을 공개함
기반 커널 Fidget의 개발은 2022년 으로 거슬러 올라감
개발자의 경험은 암시적 표면 커널 작성에 가장 많이 쌓였고, GUI 개발과 실제 모델링 경험은 그보다 적음
일상에서 솔리드 모델링이 필요한 경우가 많지 않아, 만든 모델 대부분은 커널 사용법을 보여주는 데모나 예제임
추상화와 점진적 구성을 함께 지원
저수준 암시적 표면 을 다루는 일은 어셈블리 작성과 비슷하게 강력하지만 번거로움
x
, y
, z
변수만으로 원하는 모든 도형을 직접 구성해야 하면 작업이 고통스러울 수 있음
일반적인 해결책은 고수준 추상화 를 쌓는 것으로, 모델링에서는 sphere
, box
, translate
, scale
같은 도형과 변환의 표준 라이브러리에 해당함
다른 방법은 저수준 작업 자체를 덜 힘들게 만드는 것임
Halfspace는 두 접근을 함께 사용함
작지만 확장 중인 표준 라이브러리 를 제공함
복잡한 모델을 작은 부분으로 나누고, 각각 매개변수화하고 시각화하면서 점진적으로 구성 할 수 있음
솔리드 모델링과 암시적 표면
솔리드 모델링 은 공간의 어느 점을 선택하든 모델 내부인지 외부인지 판별할 수 있는 물체를 다룸
게임 모델 에는 삼각형으로 구성한 두께 없는 텍스처 벽이 흔하지만, 모든 모델링이 내부와 외부의 구분을 필요로 하지는 않음
Halfspace는 3D 프린팅을 중심으로 한 CAD/CAM 경험에 기반하며, 실제로 제작할 수 있는 모델을 지향함
일반적인 CAD에서는 경계 표현 기반 기하 커널 이 여러 개별 표면을 이어 솔리드 물체를 만듦
매우 어려운 문제이며, 두 NURBS 표면의 교차는 닫힌 형태의 해가 없을 수도 있음
암시적 표면 기반 커널 은 한 사람이나 소규모 팀이 작성하고 전체를 이해할 수 있다는 장점이 있어, 개인 규모의 제작 소프트웨어에 적합함
석사 논문 때부터 이어진 이 접근을 Halfspace에서도 사용하며, Fidget 위에 GUI를 구성함
사전 정의된 기본 도형과 직접 작성한 스크립트를 조합해 모델을 설계함
거리장을 직접 보여주는 이유
Fidget을 구성적 솔리드 기하(CSG) 수준에서만 사용한다면 구, 큐브, 원기둥 등을 합집합/교집합/차집합으로 조합할 수 있지만, Halfspace는 그 아래의 거리장을 전면에 드러냄
부호가 같은 두 거리장 도 값의 변화 양상은 다를 수 있음
톱니파 예제에서는 내부와 외부를 파란색과 주황색으로, 값이 0인 경계를 흰색으로 표시함
옅은 등고선은 일정한 간격의 거리장 값을 보여줌
첫 번째 톱니파 거리장에는 수직 경계에서 0을 거치지 않고 내부에서 외부로 바뀌는 점프 불연속 이 있음
Fidget은 자동 미분으로 법선을 계산하므로, 이 경계의 법선이 올바른 방향을 가리키지 않음
3D에서는 법선으로 음영을 계산하기 때문에 오두막 지붕널에 잘못된 음영이 생김
이 점프 불연속 사례는 연속성에 관한 이전 글 에서도 확인할 수 있음
거리장을 직접 보면 이런 문제를 진단하고, 대각선 부분에 등고선이 몰리지 않도록 기울기 크기를 모든 곳에서 1로 조정 할 수도 있음
균일한 기울기는 여러 알고리듬의 동작을 개선함
Fidget의 정확성에 필수 조건은 아니지만, 메시 품질을 개선할 가능성이 있음
실험 단계와 웹/네이티브 기술 스택
Halfspace는 중요한 작업을 맡기기에는 실험적인 상태 임
Fidget은 암시적 커널에 적합한 API를 찾기 위해 큰 호환성 변경도 허용함
Halfspace는 최종 사용자에게 API를 제공하지 않지만, 상당한 규모의 크로스플랫폼 애플리케이션을 만들면서 적극적인 반복 개발과 변경을 감수함
웹과 네이티브 를 모두 대상으로 함
공급망 공격이 있는 환경에서 코드를 직접 컴파일하고 실행하도록 요청하는 대신 웹 링크를 공유할 수 있다는 점은 첫 사용과 가벼운 체험에 유용함
핵심 구현 스택은 다음과 같음
각 계층에 불만은 있지만, 전체 스택은 함께 동작하고 있음
실제 애플리케이션이 이끈 Fidget 개선
Halfspace의 또 다른 목표는 실질적인 애플리케이션에서 Fidget을 사용하며 커널을 개선 하는 것임
가장 큰 성과는 fidget-wgpu
개발임
네이티브 빌드는 충분히 빨랐지만, WebAssembly를 거치는 CPU 래스터화는 상호작용이 불가능할 정도로 느렸음
Fidget 개선을 통해 래스터화와 음영 등의 후처리 를 CPU와 왕복하지 않고 전부 GPU에서 실행할 수 있게 됨
이 변경으로 성능과 아키텍처가 함께 개선 됨
웹과 네이티브 모두에서 네이티브 수준의 렌더링 속도를 확보함
기존에는 렌더링 로직이 CPU에서 실행되는 Fidget과 CPU/GPU 코드가 섞인 Halfspace에 분산돼 있었음
이제 Fidget이 기준 렌더링 로직을 구현하고, Halfspace는 RGBA 텍스처를 그리는 얇은 셰이더만 사용함
2D 렌더링 파이프라인 도 완전히 GPU 가속으로 전환했지만, Halfspace 쪽 셰이더는 조금 더 복잡함
사용 권고와 개발 계획
Halfspace를 체험해 볼 수 있지만, 중요한 애플리케이션에는 사용하지 않는 것이 좋음
문제가 생기면 GitHub에 이슈를 등록하거나 토론을 시작할 수 있음
프로젝트에서 더 배울 것이 없어질 때까지 개발을 계속할 계획임
소스 코드 는 MPLv2 라이선스 로 공개돼 있음
댓글과 토론
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기