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 次下载
8.5MB
2K SLoC
包含(ZIP文件,5.5MB) examples/lego.zip,(ZIP文件,2.5MB) examples/pegasus.zip
rpt
这是一个用Rust编写的仅CPU的基于物理的渲染引擎。它使用路径追踪来生成3D场景的逼真图像。
特性
- 简单的声明性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();
}
此代码也可以在 examples/sphere.rs
中找到。请注意,由于全局照明,阴影被正确地着色为红色。有关所有功能的信息,请参阅详细的 API文档,并请随时从其他示例中学习!
参考文献
- 基于物理的渲染,第3版
- CS 348B:图像合成技术
- 粗糙表面折射的微facet模型
- Scratchapixel:全局照明和路径追踪
- SIGGRAPH '10 物理基础着色笔记
- 灵感来源:fogleman/pt,hunterloftis/pbr
样本
致谢
本项目由Eric Zhang和Alexander Morozov构建。我们感谢Justin Solomon、袁明辉、李凌霄和德米特里·斯米罗诺夫在麻省理工学院教授了一堂精彩的计算机图形学课程。
一些示例使用了互联网上可用的免费3D模型和图像资源。在源代码的注释中提供了链接,具体使用位置。
依赖关系
~18MB
~160K SLoC