4个版本 (2个重大变更)

0.3.0 2024年2月19日
0.2.0 2021年6月10日
0.1.1 2021年5月27日
0.1.0 2021年5月27日

#9 in 渲染引擎

LGPL-3.0

1MB
5K SLoC

Crystal Ball

Latest Version API Documentation

Crystal Ball 是一个用Rust编写的路径追踪库。

它使用 rayon 进行并行化,并且可以通过 image 包将渲染的图像保存到各种格式。

请注意,Crystal Ball是一个兴趣爱好项目,未来版本很可能会看到很多API变更。

功能

  • 多线程CPU渲染
  • 将渲染的图像保存到各种格式
  • 环境纹理
  • 通用PBR材料
  • 形状:球体和三角形网格
  • 轻松创建自己的纹理、材料和形状
  • 加载glTF文件
  • 景深
  • 边界体积层次结构
  • 可选使用Open Image Denoise进行去噪

用法

基本示例

一个基本示例,渲染两个球体。

use std::default::Default;
use std::sync::Arc;

use crystal_ball::prelude::*;

fn main() -> Result<(), Error> {
    let objects = vec![
        Object::new(
            Arc::new(Sphere::new()),
            Arc::new(PbrMaterial {
                base_color: Color::new(1.0, 0.45, 0.31),
                ..Default::default()
            }),
        ),
        Object::new(
            Arc::new(
                Sphere::new()
                    .translate(Vec3::new(0.0, -101.0, 0.0))
                    .scale_xyz(Vec3::splat(100.0)),
            ),
            Arc::new(PbrMaterial::default()),
        ),
    ];

    let scene = Scene {
        objects,
        camera: Camera::default().translate(Vec3::new(0.0, 0.0, 5.0)),
        ..Default::default()
    };

    let engine = RenderEngine::default();
    let image = engine.render(&scene);

    image.write("basic.png")?;

    Ok(())
}

这会产生以下图像

有许多其他示例展示了Crystal Ball的能力,演示了如何使用不同的功能。

坐标系

Crystal Ball使用右手坐标系,其中

  • +X向右指
  • +Y向上指
  • +Z指向屏幕

去噪

Crystal ball可以可选地使用Rust绑定Open Image Denoise进行去噪。

要使用此功能,您需要安装Open Image Denoise并设置环境变量OIDN_DIR为Open Image Denoise安装的根目录。

在您的Cargo.toml中启用oidn功能

[dependencies.crystal_ball]
version = "0.3.0"
features = ["oidn"]

现在您可以在Rust代码中使用去噪方法。

fn main() -> Result<(), Error> {
    // ...
    let mut image = engine.render(&scene);
    image.denoise()?;
    image.write("image_denoised.png")?;
}

优化

编译器优化将极大地提高您的路径追踪代码的性能,但代价是更长的编译时间。为了方便地在快速编译和高度优化的代码生成之间切换,您可以将以下行放入您的Cargo.toml。有关此操作详细说明,请参阅Cargo手册

[package]
# ...

[profile.dev]
opt-level = 3

[profile.release]
# Reduce binary size
#panic = "abort"
#strip = "symbols"

# Improve performance but increase compile time
lto = "fat"
codegen-units = 1

功能标志

可选功能

名称 描述
oidn 使用Open Image Denoise进行图像去噪

参考/资源

依赖项

~10–18MB
~214K SLoC