实现 NanoVDB 体积云渲染

完成步骤2:读取 NanoVDB 密度并渲染体积云

修改内容:
1. NanoVDBLoader: 添加 voxel_size 输出用于调试
2. volume.hlsl: 实现完整的 ray marching 体积渲染
   - 初始化 NanoVDB 访问器
   - 密度采样函数
   - 光线步进和累积
3. wireframe.hlsl: 新增边界框线框着色器
4. main.cpp:
   - 移动相机到云的外部
   - 添加独立的常量缓冲区避免冲突
   - 同时渲染体积云和边界框

已知问题:
- 边界框位置计算需要改进
- bunny.nvdb 渲染效果不佳
- 需要进一步优化密度和步进参数
This commit is contained in:
2026-03-11 21:51:50 +08:00
parent 859b851842
commit fa50179d00
4 changed files with 128 additions and 26 deletions

View File

@@ -33,6 +33,9 @@ bool LoadNanoVDB(const char* filePath, NanoVDBData& outData, ID3D12GraphicsComma
outData.worldBBox[i] = bboxData[i];
}
double* voxelSizeData = (double*)((char*)bufferData + 608);
printf("[NanoVDB] Voxel size: [%.6f, %.6f, %.6f]\n", voxelSizeData[0], voxelSizeData[1], voxelSizeData[2]);
outData.cpuData = bufferData;
outData.byteSize = byteSize;
outData.elementCount = elementCount;