4个版本 (2个破坏性更新)

0.2.1 2021年2月26日
0.2.0 2021年2月26日
0.1.0 2020年12月6日
0.0.0 2020年11月29日

#30 in 渲染引擎

每月 25 次下载

MIT/Apache

8.5MB
2K SLoC

包含(ZIP文件,5.5MB) examples/lego.zip,(ZIP文件,2.5MB) examples/pegasus.zip

rpt

Latest Version API Documentation

这是一个用Rust编写的仅CPU的基于物理的渲染引擎。它使用路径追踪来生成3D场景的逼真图像。

Demo renders Demo video

特性

  • 简单的声明性API,100%安全的Rust
  • 支持.OBJ、.MTL和.STL文件格式
  • 使用无偏路径追踪进行基于物理的光传输
  • 使用具有多个重要性采样的微facet BSDF模型
  • 使用kd树加速光线相交
  • 支持直接光线采样和自发光材料
  • 支持HDR环境贴图
  • 支持景深
  • 支持迭代渲染、方差估计和萤火虫减少
  • 支持具有数值积分器和粒子系统的物理模拟
  • 同时使用所有CPU核心,线性扩展到96个核心

快速入门

首先,克隆仓库。包含路径追踪代码的库位于 src/ 内。示例代码和场景位于 examples/。要编译和运行 examples/basic.rs,使用以下命令

cargo run --example basic

要运行测试,使用

cargo test

库使用

要将 rpt 作为库使用,请将以下内容添加到您的 Cargo.toml

[dependencies]
rpt = "0.2"

以下是一个演示API基本功能的简单场景。

use rpt::*;

fn main() {
    let mut scene = Scene::new();

    scene.add(Object::new(sphere())); // default red material
    scene.add(
        Object::new(plane(glm::vec3(0.0, 1.0, 0.0), -1.0))
            .material(Material::diffuse(hex_color(0xAAAAAA))),
    );
    scene.add(Light::Object(
        Object::new(
            sphere()
                .scale(&glm::vec3(2.0, 2.0, 2.0))
                .translate(&glm::vec3(0.0, 12.0, 0.0)),
        )
        .material(Material::light(hex_color(0xFFFFFF), 40.0)),
    ));

    let camera = Camera::look_at(
        glm::vec3(-2.5, 4.0, 6.5),
        glm::vec3(0.0, -0.25, 0.0),
        glm::vec3(0.0, 1.0, 0.0),
        std::f64::consts::FRAC_PI_4,
    );

    Renderer::new(&scene, camera)
        .width(960)
        .height(540)
        .max_bounces(2)
        .num_samples(100)
        .render()
        .save("output.png")
        .unwrap();
}

Example output

此代码也可以在 examples/sphere.rs 中找到。请注意,由于全局照明,阴影被正确地着色为红色。有关所有功能的信息,请参阅详细的 API文档,并请随时从其他示例中学习!

参考文献

样本

Dragon Cornell box Pegasus Lego plane Fractal spheres Rustacean Wine glass Spheres

致谢

本项目由Eric ZhangAlexander Morozov构建。我们感谢Justin Solomon、袁明辉、李凌霄和德米特里·斯米罗诺夫在麻省理工学院教授了一堂精彩的计算机图形学课程。

一些示例使用了互联网上可用的免费3D模型和图像资源。在源代码的注释中提供了链接,具体使用位置。

依赖关系

~18MB
~160K SLoC