10次发布
0.3.2 | 2023年9月1日 |
---|---|
0.3.1 | 2023年8月31日 |
0.2.6 | 2023年4月24日 |
#15 in 渲染引擎
47 每月下载量
220KB
5.5K SLoC
Lumo
Lumo是一个基于CPU的多线程渲染引擎。旨在学习Rust和基于物理的渲染 :)
特性
- 基于MIS的路径追踪和双向路径追踪
- Cook-Torrance微facet BSDF,结合Beckmann和GGX
- .obj和.mtl文件解析
- 基于表面积层次结构的kD树
画廊
用法
将仓库克隆后,examples/
文件夹包含场景。要运行hello_sphere.rs
示例,执行以下命令
cargo run --example hello_sphere
渲染器可以通过示例中的setter方法或部分通过CLI进行配置
Usage: hello_sphere [-s <samples>] [-t <threads>] [-d] [-b]
Optional CLI configuration of renderer. Renderer setter methods have priority.
Options:
-s, --samples number of samples per pixel (defaults to 1)
-t, --threads number of threads used (defaults to all)
-d, --direct use direct light integrator instead of path tracing
-b, --bdpt use bidirectional path tracing instead of path tracing
--help display usage information
API示例
hello_sphere.rs
示例编写如下
use lumo::tracer::*;
use lumo::*;
fn main() -> Result<(), png::EncodingError> {
let camera = Camera::default(1280, 720);
let mut scene = Scene::default();
scene.add(Plane::new(
Vec3::NEG_Y,
Vec3::Y,
Material::diffuse(Texture::Solid(Color::new(190, 200, 210))),
));
scene.add_light(Sphere::new(
8.0 * Vec3::Y + 1.5 * Vec3::NEG_Z,
4.0,
Material::Light(Texture::Solid(Color::WHITE)),
));
scene.add(
Sphere::new(
Vec3::ZERO,
1.0,
Material::diffuse(Texture::Solid(Color::new(0, 0, 255))),
)
.scale(0.3, 0.3, 0.3)
.translate(0.0, -0.7, -1.5),
);
let mut renderer = Renderer::new(scene, camera);
renderer.set_samples(36);
renderer.render().save("hello.png")
}
参考资料
依赖项
~16–28MB
~475K SLoC