3 puntos por GN⁺ 2025-01-09 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2025-01-09
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.

    • Se pueden recibir actualizaciones adicionales a través de redes sociales o feeds RSS de blogs.
  • 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.

    • Mi enfoque es en parte similar, pero está menos optimizado y genera GLSL directamente.
    • Me siento tentado a reemplazarlo con este proyecto.
  • 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.

    • A menudo hay que arreglar CMake porque la compilación se rompe si no compilas durante varios meses.
    • Me sorprende que los problemas de compilación sean un inconveniente tan grande.
  • Estoy buscando el mejor software CAD basado en código, y probé cad query pero tuve algunos problemas.

    • Busco software recomendado para impresión 3D.
  • En la universidad trabajé con un simulador de física nuclear basado en superficies implícitas.

    • La función R es diferenciable en todas partes.
    • Supongo que todavía se usa mucho código legado de Fortran.
  • Me gustaría trabajar árboles abstractos para generación de superficies usando SDF.

    • La idea de encontrar un árbol que se ajuste a una malla/nube de puntos objetivo.
  • He visto papers y demos de superficies implícitas y es posible construir modelos soltando la imaginación.

    • Me gustaría saber si se puede hacer todo lo que sea posible en un kernel b-rep.
    • Me gustaría ver un kernel rápido, open source y con paralelismo.
  • Me recuerda al proyecto de Ian Henry.

  • Como alguien que nunca ha trabajado en gráficos, este proyecto me parece realmente interesante.

    • Me gustaría que hubiera muchas más demos.
    • Sugiero un menú desplegable en el editor web para probar distintos programas.