[toc]
# 环境搭建
- pbrt 主仓库: https://github.com/mmp/pbrt-v4 直接 Cmake
- pbrt 场景主仓库: https://github.com/mmp/pbrt-v4-scenes
- 下载 rtev 的 release 版本: https://github.com/Tom94/tev
- 执行 shell
- V4web 书: https://pbr-book.org/4ed/contents
1 | pbrt --display-server localhost:14158 scene.pbrt |
# 光线追踪的基本研究问题
- 相机
- 射线与物体的交点
- 光源
- 可见性
- 表面光散射
- 间接光传输
- 射线传播
其中,上述图中的可能在相机上成像的空间称之为 Viewing volume
# 代码结构
# pbrt 的 main 函数
pbrt 的主执行文件的入口在 cmd/pbrt.cpp
文件中定义。主要流程如下:
1. 将命令行参数转换为字符串向量
2. 为解析的命令行声明变量
3. 处理命令行参数
4. 初始化 pbrt
5. 解析提供的场景描述文件
6. 渲染场景
7. 渲染场景后清理 pbrt 首先先将参数转换为 string 列表:
1 | std::vector<std::string> args = GetCommandLineArguments (argv); |
在后续的解析阶段,会对参数列表进行解析,然后规范化成 pbrt 需要的设置参数:
1 | PBRTOptions options; |
解析的方法就是很常见的逐字段读取 处理完之后会进入 pbrt 初始化阶段 InitPBRT(options)
初始化完 PBRT 之后会进行场景数据的解析,在之后就进入了正式的渲染,RenderCPU ()/RenderWavefront () 在最后清理一下 PBRT 的内存占用: CleanupPBRT ()