手指陀螺

主要观点:Fidget 是用于表示、编译和评估大规模数学表达式的库,主要作为隐式曲面的后端,结构上分为前端(构建数学表达式)、后端(快速灵活评估)和演示应用,包含多种算法如渲染、网格化等,有多个演示且在不断发展,未来可能在 GPU 处理、网格化、标准库和高级语言绑定等方面继续拓展。
关键信息

  • 支持隐式曲面表示,如半径为 1 的球体表达式$f(x,y,z)=\sqrt{x^2 + y^2 + z^2} - 1$,可通过评估空间中多点的表达式来渲染。
  • 前端从输入脚本到字节码,包括脚本编写、数学树构建、拓扑排序成单静态分配形式的 SSA 磁带、寄存器分配生成字节码等步骤。
  • 后端通过 traits 与前端解耦,有解释字节码和 JIT 编译两种评估方式,包括批量和 SIMD 评估、前向模式自动微分、区间算术、跟踪评估和简化等。
  • 算法方面有基于区间算术和跟踪的渲染、Manifold Dual Contouring 网格化等,演示包括多种类型,如 Web GUI 等,且存在一些挑战和不足。
  • 未来可能在 GPU 性能、网格化算法、标准库和高级语言绑定等方面进行改进和拓展。
    重要细节
  • 用 Rhai 语言编写脚本构建数学表达式,如各种运算和函数。
  • 字节码评估时寄存器分配使用特定算法,JIT 编译时手工编写汇编代码并映射到物理寄存器。
  • 渲染算法基于区间算术、跟踪和细分,网格化算法存在一些缺陷。
  • Web GUI 演示涉及多种技术,如 TypeScript、CodeMirror、Webpack、web worker 线程等,组合成系统有挑战。
  • 库的许可证为 MPL 2.0,开源且适合 OSS 和商业使用,源代码在 Github 上可通过cargo add fidget添加到 Rust 项目。
阅读 7
0 条评论