梯度是新的区间:高效渲染复杂SDF模型的新方法

2025-05-31

本文介绍了一种基于Lipschitz属性的SDF分层树剪枝方法,该方法高效渲染复杂模型。该方法利用距离场的梯度限制,通过单点评估获取类似区间的结果,并结合传统区间算法的技巧,实现了显著的性能提升。与传统的区间算法相比,该方法避免了区间运算的保守性,并能更好地处理复杂的变换。虽然在处理非Lipschitz连续的距离场时需要额外的归一化步骤,但整体效率依然显著高于传统方法,为交互式可视化复杂模型提供了新的思路。

阅读更多
开发 Lipschitz

Prospero挑战:极致性能的隐式曲面渲染

2025-03-24
Prospero挑战:极致性能的隐式曲面渲染

一个名为Prospero的挑战赛吸引了众多开发者,目标是用最快速度渲染一个由7866个数学表达式定义的隐式曲面。参赛者使用Python、Numpy、CUDA、JIT编译器等工具进行优化,探索了多种技术,包括预解析表达式、Numba加速、GPU计算、LLVM编译等,以提高渲染速度和降低内存占用。一些优秀方案将渲染时间缩短至毫秒级别,并有效降低了内存消耗。挑战赛鼓励开发者探索不同优化策略,并分享实验结果,推动隐式曲面渲染技术的进步。

阅读更多
开发

通过测试套件的美丽来指导:一个Rust编写的Uxn虚拟机的故事

2025-01-21

作者在去年发布了Raven,一个独立实现的Uxn CPU和Varavara协调器。最近,为了提升稳定性和性能,作者构建了一套完善的测试基础设施,包括GitHub Actions持续集成、快照测试、静态恐慌预防和模糊测试。这篇文章详细描述了作者在构建这些测试过程中遇到的挑战和解决方案,例如GitHub Actions的Windows和ARM运行器的可靠性问题,以及在静态证明无恐慌和模糊测试中遇到的陷阱。最终,作者成功地提升了Raven的性能和可靠性,并保证了其在不同平台上的可移植性。

阅读更多
开发

Fidget:用Rust构建的用于大型数学表达式的高性能库

2025-01-08

Fidget是一个用Rust编写的库,用于表示、编译和评估大型数学表达式。它主要设计用于隐式曲面,但其灵活性足以用于许多不同的用途。Fidget采用分层设计,包括前端(将脚本转换为字节码)、后端(快速灵活的评估)和算法(渲染和网格化)。其核心创新在于结合区间算术和轨迹简化,从而高效地处理大型表达式,并支持JIT编译以进一步提升性能。Fidget提供了多种演示,包括一个基于Web的GUI,并支持自动微分和区间算术。

阅读更多

3D 旋转设计

2024-11-06

本文探讨了三种常见的3D模型旋转系统:转盘式、摇臂式和轨迹球式。转盘式旋转绕全局Z轴和局部X轴旋转,无法从任意角度查看模型。摇臂式旋转绕局部X轴和Y轴旋转,允许任意角度旋转,但缺乏路径独立性。轨迹球式旋转将屏幕坐标映射到虚拟球体,可以旋转模型,但最大旋转角度为180º。文章总结了三种旋转方式的优缺点,并建议根据模型是否有关联的真实世界轴来选择合适的旋转系统。

阅读更多
未分类 3D旋转

击败编译器

2024-07-12

本文作者为了提高Uxn CPU解释器的速度,选择使用汇编语言重写了解释器。通过将关键数据存储在寄存器中、使用线程代码消除调度循环等优化,汇编版本的解释器比用Rust编写的解释器速度提升了30%。作者还尝试了其他优化方法,例如扩展RAM存储空间、使所有操作码实现大小相同等,但都没有带来性能提升。

阅读更多
未分类

不要嘲弄快乐有趣的分支预测器

2024-07-03

本文探讨了在AArch64汇编中优化代码时,不当使用分支指令可能导致性能下降的问题。作者通过一个简单的数组求和示例,展示了如何通过减少分支指令数量来提高代码效率。文章还解释了分支预测器的工作原理,以及为什么不匹配的bl/ret指令对会导致性能下降。最后,作者提供了几种优化代码的方法,包括内联函数、使用SIMD指令和手动循环展开。

阅读更多
未分类 AArch64汇编