[M3] 学习日志
Log
启动流程
- 参考 mitsuba 0.6
调用链
src\mitsuba\mitsuba.cpp
main()
- 核心模块的启动与注册
- 解析命令行参数
- 不同后端(cuda、llvm)的设置
- 启动渲染流程:
render()
1
MI_INVOKE_VARIANT(mode, render, parsed[0].get(), sensor_i, filename);
render()
- 调用:
integrator->render()
SamplingIntegrator
:MC PT 的抽象基类
- 调用:
src\render\integrator.cpp::render()
1
2MI_VARIANT typename SamplingIntegrator<Float, Spectrum>::TensorXf SamplingIntegrator<Float, Spectrum>
::render(Scene *scene, Sensor *sensor,uint32_t seed,uint32_t spp,bool develop,bool evaluate);- 这里只关注 GPU 部分
- 启动的最大线程数:
0xffffffffu
(4294967295U)- \(\approx 2071\times(1920\times1080)\)
- 定位像素:如果要修改光线的位置(适应性采样)应该在这里
1
2
3
4
5
6
7
8
9// Compute discrete sample position
UInt32 idx = dr::arange<UInt32>((uint32_t) wavefront_size);
// 省略了部分代码
// Compute the position on the image plane
Vector2i pos;
pos.y() = idx / film_size[0];
pos.x() = dr::fnmadd(film_size[0], pos.y(), idx);- 调用
render_sample()
进行 1spp 的 block 内的渲染
src\render\integrator.cpp::render_sample()
- 调用
sample()
进行渲染- 也就是具体的 integrator 的实现
- 调用