- main.cu
- main函数,最外层的流程
- testbed.cu
- 封装类
- testbed_image.cu
- testbed_nerf.cu
- testbed_sdf.cu
- testbed_volume.cu
- 最关键的函数:testbed.frame:训练,渲染,绘制gui窗口
- imgui.cpp与imgui_xxx.cpp
- 基于opengl的窗口系统
- 其他组件
- camera_path.cu
- dlss.cu
- marching_cubes.cu
- nerf_loader.cu
- render_buffer.cu
- tinyexr_wrapper.cu
- triangle_bvh.cu
- 启动选项
testbed --mode nerf --scene data\nerf\fox\transforms.json
testbed --mode nerf --scene C:\Users\MoMing\Desktop\nerf-pytorch\data\nerf_synthetic\lego\transforms_train.json --no-gui --snapshot C:\Users\MoMing\Desktop\nerf-pytorch\data\nerf_synthetic\lego\transforms_train_base.msgpack
- mode: 'nerf', 'sdf', or 'image' or 'volume'。 数据类型。
- network/config
- no-gui
- no-train
- scene训练数据
- snapshot加载之前训练过的模型
- height界面宽度
- version
- help
- 加载数据
Testbed testbed{mode}; testbed.load_training_data(scene_path.str());
- 加载预训练的模型或者直接创建模型
testbed.load_snapshot(snapshot_path.str()); testbed.reload_network_from_file(network_config_path.str());
- 判断已经加载gui
if (gui) { testbed.init_window(width_flag ? get(width_flag) : 1920, height_flag ? get(height_flag) : 1080); }
- 渲染/训练/gui绘制循环
while (testbed.frame()) { if (!gui) { tlog::info() << "iteration=" << testbed.m_training_step << " loss=" << testbed.m_loss_scalar.val(); } }
- begin_frame_and_handle_user_input()
- imgui():定义gui界面各种控件
- train_and_render(skip_rendering);
- train(m_training_batch_size)
- render_frame()
- draw_gui();
- ImGui::Render()
- 用cuda编程
- 用依赖库imgui实现了一套基于opengl的gui框架
- 用依赖库tiny-cuda-nn实现神经网络
- 支持实时交互渲染
- 支持更多数据格式