Introducción
- Fidget es una librería para representar, compilar y evaluar expresiones matemáticas de gran escala, diseñada principalmente como backend para superficies implícitas.
- Es una librería flexible que puede utilizarse de muchas formas.
¿Qué es una superficie implícita?
- Una superficie implícita se expresa como una expresión del tipo f(x,y,z)→d, donde d positivo indica que el punto está fuera del modelo y d negativo que está dentro.
- Por ejemplo, una esfera de radio 1 se puede representar como f(x,y,z)=x²+y²+z²−1.
- Fidget se centra en superficies implícitas cerradas que se componen mediante operaciones aritméticas básicas.
Ventajas de las superficies implícitas
- Las superficies implícitas son compactas y adecuadas para evaluación paralela masiva.
- Las operaciones CSG (unión, intersección, etc.) se pueden manejar fácilmente.
- Las ecuaciones de forma cerrada son favorables para la optimización y permiten rastrear qué rama se elige durante la evaluación.
Origen
- Se han investigado durante los últimos 10 años el renderizado y la evaluación de superficies implícitas.
- Fidget nació como un proyecto de investigación personal y está escrito en Rust para que su uso sea más sencillo en lugar de un núcleo existente como libfive.
Estructura de la librería
- Fidget está compuesto por tres capas claramente separadas y una aplicación de demostración.
Frontend: construcción de expresiones matemáticas
- Fidget usa el lenguaje de scripting Rhai para construir expresiones matemáticas.
- El árbol matemático reduce duplicados en un grafo dirigido acíclico.
- La cinta SSA aplana el grafo en código lineal.
Backend: evaluación rápida y flexible
- El backend de Fidget está separado del frontend y admite diversos modos de evaluación.
- El compilador JIT convierte bytecode en instrucciones de máquina para maximizar el rendimiento.
Algoritmos
- Fidget implementa distintos algoritmos de renderizado y mallado basados en evaluación rápida.
- El mallado usa Manifold Dual Contouring para garantizar estanqueidad, manifoldidad y preservación de detalles afilados.
Demo
- Fidget incluye varias demos, y la GUI web es la parte más interesante.
- Se aprovechó como una oportunidad para explorar tecnologías modernas de desarrollo web.
Potencial futuro
- Se considera agregar un backend de GPU, mejorar el mallado, construir una biblioteca estándar y enlaces con lenguajes de alto nivel.
Conclusión
- Fidget ahora está disponible públicamente y se puede integrar fácilmente en proyectos de Rust.
- Se distribuye con una licencia amigable tanto para uso open source como comercial.
1 comentarios
Opinión en Hacker News
Este proyecto abarca diversas áreas de la informática, incluyendo estructuras de datos, algoritmos, optimización de bajo nivel, compiladores, renderizado/gráficos por computadora, herramientas de diseño UI/UX y programación GPGPU.
El autor estaba leyendo otra publicación excelente.
Pienso que este proyecto habría sido de mucha utilidad al escribir su propio dibujante de superficies implícitas.
libfive está escrito en su mayoría en C++ con unas 40K líneas, lo que lo vuelve difícil de hackear incluso para el autor original.
Estoy buscando el mejor software CAD basado en código, y probé cad query pero tuve algunos problemas.
En la universidad trabajé con un simulador de física nuclear basado en superficies implícitas.
Me gustaría trabajar árboles abstractos para generación de superficies usando SDF.
He visto papers y demos de superficies implícitas y es posible construir modelos soltando la imaginación.
Me recuerda al proyecto de Ian Henry.
Como alguien que nunca ha trabajado en gráficos, este proyecto me parece realmente interesante.