7 个版本
0.3.2 | 2024 年 6 月 28 日 |
---|---|
0.3.1 | 2024 年 6 月 28 日 |
0.2.1 | 2024 年 6 月 27 日 |
0.1.1 | 2024 年 6 月 24 日 |
#110 在 图形 API 中
105KB
2.5K SLoC
Maray
使用基本数学进行 JIT 光线追踪
此图像由 Maray 从 "data/chess.maray" 渲染。
安装方法
>cargo install--example maray maray
运行方法
>maray--cpu 数量8 --输入"data/chess.maray" --输出"test.png"
简写版本
>maray-c8 -i"data/chess.maray" -o"test.png"
纹理
您可以使用 --textures
或 -t
来指定一系列图像。
> maray -c 8 -i "input.maray" -o "output.png" -t "texture0.png" "texture1.png"
Maray 设置了一个默认的运行时,其中包括颜色通道(RGB)和图像宽高。
有关获取函数 id
的公式的信息,请参阅 textures
模块。
当将 Maray 作为库使用时,您可以自定义运行时。
作为库使用 Maray
Maray 有一个 Cargo 默认功能标志 "render",可以关闭。当只需要库来生成内容时,这很有用。
关于 Maray
Maray 是一种用于光线追踪场景的二进制格式,它使用基本的数学表达式。它可以用于 2D 和 3D。渲染器使用即时编译(JIT)到 WASM。
Maray 还可以用作 Rust 库来生成光线追踪内容或对数学公式进行语义分析。通过库,您还可以使用 Rayon 和解释器进行渲染,这比 JIT 渲染器慢约 10-20 倍。
二进制格式使用 bincode 序列化 maray::Expr
,大小为 [u32; 2]
,因此渲染器知道图像的分辨率。该格式设计为在不添加任何额外参数的情况下精确重现渲染。要更改大小,需要生成一个新的文件。浮点数精度为 f64
,以保证高质量的数值精度。
特性
Maray 比其他光线追踪软件包含的特性要少得多。在 Maray 中,您可以使用基础数学来构建东西,因此您需要外部编程语言或工具来生成数据。然而,除了这个限制外,人们在生成内容方面没有任何限制。结果在所有平台上都可以确定性重现,并且代码可以在大多数硬件上运行。使用基础数学有助于研究人员构建适用于 Maray 中生成所有内容的工具。
Maray 可用作 Rust 库
- 生成存储数学表达式的二进制文件
- 数学公式的自动压缩器
- 渲染并导出为 PNG 文件
- 使用 Rayon 和解释器进行并行渲染
- 使用 wasmer 通过 JIT 进行并行渲染
Semantics
特性用于执行语义分析
使用 Maray 时,通常首先内联一切,并使用自动压缩来减少操作。
设计
Maray 的构建块集合非常有限
x
(X 坐标)y
(Y 坐标)τ
(tau = 2π)𝐞
(欧拉常数)ℕ
(自然数常数)-
(一元减号)1/
(倒数,一元除法)abs
(绝对值)sqrt
(平方根)step
(如果 >= 0,则为 1,否则为 0)sin
(正弦)exp
(e^)ln
(自然对数)+
(加法)*
(乘法)max
(最大值)min
(最小值)app
(调用外部函数)
没有内置的循环或递归、向量或矩阵。要使用纹理,请参阅 Runtime
。
Maray 支持变量,例如
x + a
where
a = 2 + y
在内联一切之后,您可以执行数学公式的部分评估和自动压缩。这优化了公式的渲染。
Maray 的一个好处是研究人员可以对表达式进行语义分析,并构建适用于 Maray 中生成所有内容的工具。
依赖关系
~0.7–13MB
~176K SLoC