1 个不稳定版本
0.1.0 | 2020年4月13日 |
---|
在 图形API 中排名第511
184 个星标 & 4 个关注者
19MB
5.5K SLoC
Rayt
这是Peter Shirley的出色书籍《一个周末的射线追踪》、《射线追踪:下一周》和《射线追踪:余生》中射线追踪器的Rust实现。
这绝对不是一个功能齐全的射线追踪器。相反,这是我为了学习Rust和射线追踪而构建的。我分享它是为了帮助其他尝试同样事情的人。
功能
Rayt使用yaml文件以自己的格式存储和读取场景数据。这些只是相应Rust对象的yaml序列化。
下一节将更详细地描述两种操作模式。
generate
将根据代码中的预设生成场景的yaml文件render
将渲染给定的yaml文件中的场景
提供了书中各种示例场景。可以使用 generate
模式在代码中对它们进行更改后快速重新生成配置文件,但对于小型场景,也可以直接编辑文件。
如何运行
本代码使用Rust 1.42
开发和测试,但它没有使用语言的任何前沿特性,因此任何相对较新的稳定版本都足以编译。
在您的本地环境中安装二进制文件
cargo install --path ${PATH_TO_THIS_REPO}
帮助
rayt --help
rayt generate --help
rayt render --help
生成Cornell box场景yaml文件
rayt --config config/cornell_box.yaml generate --scene CornellBox
渲染Cornell box
rayt --config config/cornell_box.yaml \
render --width 512 --rays 1000 --threads 8 --output output/cornell_box.png
某些场景使用纹理作为资源,例如《Ray Tracing: The Next Week
》一书的最终场景。这些资源可以使用--asset
传入。
rayt --config config/next_week_final.yaml \
render --width 512 --rays 1000 --threads 8 --asset assets/earth.jpg --output output/next_week_final.png
--threads
选项可用于控制渲染器应使用多少线程,而--rays
选项将确定每个像素将采取多少射线(样本)。大约1000个样本应该足以生成一个带有一些噪声的 decent 图像,但对于清晰图像则需要更多。渲染时间将随着所选样本数量和图像大小显著增加。在我的机器上,使用5000个样本和1024像素宽度的next_week_final.yaml
渲染大约需要9小时。相反,带有1000个样本和512像素宽度的cornell_box.yaml
只需几分钟即可完成。
包含一些方便目标的Makefile
make regenerate-scenes
将创建所有场景配置yaml文件make render-test
将以适中的分辨率和数量渲染所有场景,并将生成的图像放入output/test
make cornell-test
与make render-test
相同,但仅针对Cornell boxmake regenerate-samples
将创建Cornell box和第2本书的最终图像的高分辨率/高射线计版本,并将它们放入output/samples
样本
samples
目录包含使用大量射线生成的图像,具体为每个像素5000条射线,以展示rayt可以渲染的图像类型。
资源
包含的资源来自以下来源
- blue_marble.jpg - NASA Visible Earth
- earth.jpg - NASA Visible Earth
- earth_night.jpg - NASA Visible Earth
- jupiter.jpg - NASA Cassini
- mars.jpg - USGS
- moon.jpg - USGS
许可证
请参阅与此存储库一起包含的LICENSE文件。
依赖项
~20–31MB
~290K SLoC