10次发布

0.3.2 2023年9月1日
0.3.1 2023年8月31日
0.2.6 2023年4月24日

#15 in 渲染引擎

47 每月下载量

MIT 许可证

220KB
5.5K SLoC

Lumo

crates.io docs.rs Coverage

Lumo是一个基于CPU的多线程渲染引擎。旨在学习Rust和基于物理的渲染 :)

特性

Bust of Nefertiti Cornell box Conference room Circle of spheres

用法

将仓库克隆后,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