错误: Compute shader (VSMFreeInvalidatedPages): Property (_DynamicInvalidationMasks) is not set
修复:
// 添加字段
private ComputeBuffer dynamicInvalidationMasksBuffer;
// 初始化
dynamicInvalidationMasksBuffer = new ComputeBuffer(VSMConstants.CASCADE_COUNT, sizeof(uint));
uint[] emptyMasks = new uint[VSMConstants.CASCADE_COUNT];
dynamicInvalidationMasksBuffer.SetData(emptyMasks);
// 在 BookkeepingPhase 中设置
freeInvalidatedPagesShader.SetBuffer(kernel, "_DynamicInvalidationMasks", dynamicInvalidationMasksBuffer);错误: Compute shader (VSMBuildHPB): Property (_SourceHPB) is not set
修复:
// 在 mip level 0 时也设置一个 dummy 纹理
if (i == 0)
{
buildHPBShader.SetTexture(buildKernel, "_VirtualPageTable", virtualPageTable);
buildHPBShader.SetTexture(buildKernel, "_SourceHPB", virtualPageTable); // Dummy
}错误: The destination buffer in CopyComputeBufferCount is not of type Raw or IndirectArguments
修复:
// 改用 Raw 类型
allocationCounterBuffer = new ComputeBuffer(2, sizeof(uint), ComputeBufferType.Raw);以下是性能警告,不影响功能:
Shader warning: integer modulus may be much slower, try using uints if possible
说明:
- 这些是性能提示,不是错误
- 使用
int除法/模运算比uint慢 - 可以优化,但不影响当前功能
如果想优化:
// 从
int x = value % 32;
// 改为
uint x = value % 32u;Shader warning: signed/unsigned mismatch, unsigned assumed
说明:
- HLSL 自动转换
- 不影响功能
- 可以通过显式类型转换消除
✅ DynamicInvalidationMasks buffer 已创建并设置 ✅ HPB SourceHPB 参数已设置 ✅ allocationCounterBuffer 改为 Raw 类型 ✅ 所有 buffer 都在 Cleanup 中正确释放
| 类型 | 用途 | CopyCount支持 |
|---|---|---|
| Default | 普通结构化数据 | ❌ |
| Raw | 原始字节数据 | ✅ |
| Append | 追加buffer | ❌ |
| Counter | 带计数器 | 部分 |
| IndirectArguments | GPU绘制参数 | ✅ |
- Input System 错误
- Shader 兼容性
- GUID 错误
- Depth Texture 问题
- Compute Shader 缺失参数
- Buffer 类型错误
- 性能警告 (int vs uint)
- 类型转换警告
在 Unity 中:
- 刷新项目 (
Ctrl + R) - 点击 Play
- 检查是否还有错误
预期: 应该能看到场景运行,虽然阴影可能还需要调试。
Shader 警告不会阻止运行! 它们只是性能优化建议。 🚀