GN⁺: 피젯 기술
(mattkeeter.com)소개
- Fidget는 대규모 수학 표현식을 표현, 컴파일, 평가하는 라이브러리로, 주로 암묵적 표면의 백엔드로 설계되었음.
- 다양한 용도로 유연하게 사용할 수 있는 라이브러리임.
암묵적 표면이란?
- 암묵적 표면은 f(x,y,z)→d 형태의 표현식으로, d가 양수면 모델 외부, 음수면 내부에 위치함을 나타냄.
- 예를 들어, 반지름 1의 구는 f(x,y,z)=x²+y²+z²−1로 표현 가능함.
- Fidget는 기본 산술 연산으로 표현식을 구성하는 닫힌 형태의 암묵적 표면에 중점을 둠.
암묵적 표면의 장점
- 암묵적 표면은 간결하고 대규모 병렬 평가에 적합함.
- CSG 연산(합집합, 교집합 등)이 간단하게 처리 가능함.
- 닫힌 형태의 방정식은 최적화에 유리하며, 평가 중 어떤 분기가 선택되는지 추적 가능함.
기원
- 지난 10년간 암묵적 표면의 렌더링과 평가에 대해 연구해왔음.
- Fidget는 개인 연구 프로젝트로, libfive와 같은 기존 커널 대신 Rust로 작성되어 사용이 용이함.
라이브러리 구조
- Fidget는 세 개의 주로 분리된 계층과 데모 애플리케이션으로 구성됨.
프론트엔드: 수학 표현식 구축
- Fidget는 Rhai 스크립팅 언어를 사용하여 수학 표현식을 구축함.
- 수학 트리는 유향 비순환 그래프로 중복 제거됨.
- SSA 테이프는 그래프를 직선 코드로 평탄화함.
백엔드: 빠르고 유연한 평가
- Fidget 백엔드는 프론트엔드와 분리되어 있으며, 다양한 평가 모드를 지원함.
- JIT 컴파일러는 바이트코드를 기계 명령어로 변환하여 성능을 극대화함.
알고리즘
- Fidget는 빠른 평가를 기반으로 다양한 렌더링 및 메싱 알고리즘을 구현함.
- 메싱은 Manifold Dual Contouring을 사용하여 수밀성, 매니폴드성, 날카로운 특징 보존을 보장함.
데모
- Fidget는 다양한 데모를 포함하며, 웹 GUI는 가장 흥미로운 부분임.
- 웹 개발의 최신 기술을 탐구하는 기회로 활용됨.
미래 가능성
- GPU 백엔드 추가, 메싱 개선, 표준 라이브러리 구축, 상위 언어 바인딩 등이 고려되고 있음.
결론
- Fidget는 이제 공개적으로 사용 가능하며, Rust 프로젝트에 쉽게 추가할 수 있음.
- 오픈 소스 및 상업적 사용에 친화적인 라이선스로 제공됨.
Hacker News 의견
-
이 프로젝트는 다양한 컴퓨터 과학 분야를 다루며, 데이터 구조, 알고리즘, 저수준 성능 작업, 컴파일러, 렌더링/컴퓨터 그래픽스, UI/UX 디자인 도구, GPGPU 프로그래밍 등을 포함함
- 소셜 미디어나 블로그 RSS 피드를 통해 추가 업데이트를 받을 수 있음
-
저자는 다른 훌륭한 게시물을 읽고 있었음
-
자신의 암시적 표면 드로어를 작성할 때 이 프로젝트가 매우 유용했을 것이라고 생각함
- 자신의 접근 방식은 일부 유사하지만 최적화가 덜 되어 있으며 GLSL을 직접 생성함
- 이 프로젝트로 대체하고 싶다는 유혹을 느끼고 있음
-
libfive는 대부분 C++로 작성된 40K 라인으로, 원작자에게도 해킹하기 어려움
- 몇 달 동안 컴파일하지 않으면 빌드가 깨지는 경우가 많아 CMake를 수정해야 함
- 빌드 문제가 그렇게 큰 문제인지 놀라움을 표함
-
최고의 코드 기반 CAD 소프트웨어를 찾고 있으며, cad query를 시도했으나 몇 가지 문제가 있었음
- 3D 프린팅을 위한 추천 소프트웨어를 찾고 있음
-
대학 시절 원자력 물리학 시뮬레이터에서 암시적 표면을 기반으로 한 작업을 했음
- R-함수는 모든 곳에서 미분 가능하다는 특성을 가짐
- 여전히 많은 레거시 Fortran 코드를 사용하고 있을 것으로 추정함
-
표면 생성용 추상 트리 작업을 SDF를 사용하여 하고 싶어함
- 목표 메쉬/포인트 클라우드를 사용하여 원하는 모양에 맞는 트리를 찾는 아이디어
-
암시적 표면에 대한 논문과 데모를 본 적이 있으며, 상상력을 발휘하여 모델을 구축할 수 있음
- b-rep 커널에서 가능한 것들을 할 수 있는지 궁금해함
- 빠르고 오픈 소스이며 병렬 처리가 가능한 커널을 보고 싶어함
-
Ian Henry의 프로젝트를 떠올리게 함
-
그래픽 작업을 해본 적 없는 사람으로서 이 프로젝트가 매우 흥미로움
- 더 많은 데모가 있었으면 좋겠다고 생각함
- 웹 에디터에 다양한 프로그램을 시도할 수 있는 드롭다운 메뉴가 있었으면 좋겠다고 제안함