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

MIT/Apache

105KB
2.5K SLoC

Maray

使用基本数学进行 JIT 光线追踪

chess

此图像由 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