Skip to content

Latest commit

 

History

History
77 lines (72 loc) · 2.21 KB

3.读ngp官方cuda代码.md

File metadata and controls

77 lines (72 loc) · 2.21 KB

读ngp官方cuda代码

一. 核心文件

  1. main.cu
    • main函数,最外层的流程
  2. testbed.cu
    • 封装类
    • testbed_image.cu
    • testbed_nerf.cu
    • testbed_sdf.cu
    • testbed_volume.cu
    • 最关键的函数:testbed.frame:训练,渲染,绘制gui窗口
  3. imgui.cpp与imgui_xxx.cpp
    • 基于opengl的窗口系统
  4. 其他组件
    • camera_path.cu
    • dlss.cu
    • marching_cubes.cu
    • nerf_loader.cu
    • render_buffer.cu
    • tinyexr_wrapper.cu
    • triangle_bvh.cu

二.主流程(main.cu)

  1. 启动选项
    • 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
  2. 加载数据
    Testbed testbed{mode};
    testbed.load_training_data(scene_path.str());
    
  3. 加载预训练的模型或者直接创建模型
    testbed.load_snapshot(snapshot_path.str());
    testbed.reload_network_from_file(network_config_path.str());
    
  4. 判断已经加载gui
    if (gui) {
        testbed.init_window(width_flag ? get(width_flag) : 1920, height_flag ? get(height_flag) : 1080);
    }
    
  5. 渲染/训练/gui绘制循环
    while (testbed.frame()) {
        if (!gui) {
            tlog::info() << "iteration=" << testbed.m_training_step << " loss=" << testbed.m_loss_scalar.val();
        }
    }
    

三. 渲染/训练/gui绘制循环(testbed.frame)

  1. begin_frame_and_handle_user_input()
    • imgui():定义gui界面各种控件
  2. train_and_render(skip_rendering);
    • train(m_training_batch_size)
    • render_frame()
  3. draw_gui();
    • ImGui::Render()

四.总结

  1. 用cuda编程
  2. 用依赖库imgui实现了一套基于opengl的gui框架
  3. 用依赖库tiny-cuda-nn实现神经网络
  4. 支持实时交互渲染
  5. 支持更多数据格式