[toc]

# 环境搭建

  1. pbrt 主仓库: https://github.com/mmp/pbrt-v4 直接 Cmake
  2. pbrt 场景主仓库: https://github.com/mmp/pbrt-v4-scenes
  3. 下载 rtev 的 release 版本: https://github.com/Tom94/tev
  4. 执行 shell
  5. V4web 书: https://pbr-book.org/4ed/contents
1
pbrt --display-server localhost:14158 scene.pbrt

# 光线追踪的基本研究问题

  1. 相机
  2. 射线与物体的交点
  3. 光源
  4. 可见性
  5. 表面光散射
  6. 间接光传输
  7. 射线传播

其中,上述图中的可能在相机上成像的空间称之为 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 ()