完善体积云渲染:添加旋转和参数优化

新增功能:
- 添加云的旋转动画(绕 Y 轴)
- 修复 HDDA 在旋转坐标系中的坐标转换问题

参数优化:
- tmax: 1000 → 5000(修复远处云消失的问题)
- MaxSteps: 500 → 2000
- StepSize: 0.5 → 2.0
- DensityScale: 0.05 → 0.1
- 相机位置调整到 z=-1200

已知问题:
- 缺少光照计算(phase_function 和 volumetric_shadow)
- 渲染结果比 Unity 版本更亮
This commit is contained in:
2026-03-11 23:05:43 +08:00
parent 3cf818e27b
commit 81469f157e
2 changed files with 24 additions and 11 deletions

View File

@@ -176,7 +176,7 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
DirectX::XMMATRIX projectionMatrix=DirectX::XMMatrixPerspectiveFovLH(
(45.0f*3.141592f)/180.0f,1280.0f/720.0f,0.1f,1000.0f);
DirectX::XMMATRIX viewMatrix = DirectX::XMMatrixLookAtLH(
DirectX::XMVectorSet(-10.0f, 73.0f, -800.0f, 1.0f),
DirectX::XMVectorSet(-10.0f, 73.0f, -1200.0f, 1.0f),
DirectX::XMVectorSet(-10.0f, 73.0f, 0.0f, 1.0f),
DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 1.0f));
DirectX::XMMATRIX modelMatrix = DirectX::XMMatrixTranslation(0.0f,0.0f,5.0f);
@@ -294,17 +294,18 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
memcpy(volumeCBData, &invViewProjMat, sizeof(float) * 16);
volumeCBData[16] = -10.0f;
volumeCBData[17] = 73.0f;
volumeCBData[18] = -800.0f;
volumeCBData[19] = 0.05f; // DensityScale
volumeCBData[18] = -1200.0f;
volumeCBData[19] = 0.1f; // DensityScale
volumeCBData[20] = (float)nanoVDBData.worldBBox[0];
volumeCBData[21] = (float)nanoVDBData.worldBBox[1];
volumeCBData[22] = (float)nanoVDBData.worldBBox[2];
volumeCBData[23] = 0.5f; // StepSize
volumeCBData[23] = 2.0f; // StepSize
volumeCBData[24] = (float)nanoVDBData.worldBBox[3];
volumeCBData[25] = (float)nanoVDBData.worldBBox[4];
volumeCBData[26] = (float)nanoVDBData.worldBBox[5];
volumeCBData[27] = 500;
UpdateConstantBuffer(volumeCB, volumeCBData, sizeof(float) * 28);
volumeCBData[27] = 2000;
volumeCBData[28] = timeSinceAppStartInSecond * 0.3f; // RotationY
UpdateConstantBuffer(volumeCB, volumeCBData, sizeof(float) * 29);
if (frameCount == 1) {
printf("Volume BBox: [%.2f, %.2f, %.2f] - [%.2f, %.2f, %.2f]\n",
volumeCBData[20], volumeCBData[21], volumeCBData[22],