4个版本
0.1.3 | 2022年12月16日 |
---|---|
0.1.2 | 2022年12月16日 |
0.1.1 | 2022年12月16日 |
0.1.0 | 2022年12月16日 |
75 在 渲染 中排名
每月下载量 33
575KB
15K SLoC
一个(彻底)并行化的 实验性 Rust矢量图形渲染器,具有软件(CPU)和硬件(GPU)后端,以下目标按顺序排列:
- 可移植性;支持Fuchsia、Linux、macOS、Windows、Android和iOS。
- 性能;利用以计算为重点的流水线,该流水线在指令级别和线程级别都高度并行化。
- 简单性;实现易于理解的4级流水线。
- 大小;最小化依赖项数量,并专注于矢量图形。
它依赖于Rust的SIMD自动向量化/内建函数和Rayon,在CPU上实现良好的性能,同时使用WebGPU (wgpu) 来利用GPU。
入门
将以下内容添加到您的 Cargo.toml
依赖项中
forma = { version = "0.1.0", package = "forma-render" }
4级流水线
1. 曲线展平 | 2. 线段光栅化 | 3. 排序 | 4. 绘制 |
---|---|---|---|
贝塞尔曲线 | 线段 | 像素段 | 排序后的像素段,旧瓦片 |
⬇️⬇️⬇️ | ⬇️⬇️⬇️ | ⬇️⬇️⬇️ | ⬇️⬇️⬇️ |
线段 | 像素段 | 排序后的像素段 | 新鲜绘制的瓦片 |
实现亮点 ✨
以下是几个实现亮点,使forma不同于常用的矢量渲染器。
曲率感知展平
所有高阶三次贝塞尔曲线都通过二次曲线近似,然后根据其曲率并行展平为线段。这种技术是由Raph Levien开发的。
廉价的平移和旋转
平移和旋转可以在不重新展平曲线的情况下进行渲染,同时保持全部质量。
并行像素网格交点
线段通过与像素网格相交转换为像素段。我们开发了一种简单的方法,该方法的计算复杂度为O(1),并且是并行运行的。
高效的排序
我们将crumsort移植到Rust,并使用Rayon进行并行化,在64位随机数据上提供了比pdqsort实现更好的性能。使用排序散列像素段的想法是从Allan MacKinnon在Spinel上的工作获得的灵感。
仅更新更改的瓦片(目前仅限CPU)
我们实现了一个针对每个瓦片的快速失败优化器,该优化器试图完全跳过绘制步骤。类似的方案也可以在GPU上进行测试。
动画在屏幕上的显示效果 | 仅更新的瓦片 |
---|---|
您可以使用以下命令运行上面的演示:
cargo run --release -p demo -- spaceship
类似的项目
forma受到了以下项目的深刻启发:
示例
您可以使用包含的demo
示例来渲染一些示例,其中之一是一个不合规且不完整的SVG渲染器
cargo run --release -p demo -- svg assets/svgs/paris-30k.svg
它以交互式的帧率渲染巨大的SVG文件,甚至在CPU上也能做到:(与您的网络浏览器比较)
(目前)缺失的部分 🧩
由于此项目仍在进行中,API中的损坏虽然不大,但预计会出现。GPU后端的表现也预计将有所提高,特别是在移动设备上,因为性能较差,目前建议使用CPU后端。
除此之外
- 自动层排序
- 笔触
- 更多用于混合和渐变的颜色空间
- 更快的GPU排序器
- 使用
f16
以实现优秀的移动GPU性能
注意
这不是一个官方支持的Google产品。
依赖项
~2–15MB
~182K SLoC