You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity Compute Shader输出异常:预期红色纹理却得到蓝色

问题原因及解决办法

你的问题出在全局变量Iterations的初始化方式和HLSL的编译规则上:

  1. 在Unity Compute Shader基于的HLSL中,普通全局变量的初始值是未定义的——编译器不会保证它会被设置成你写的1000。也就是说,Iterations实际是个随机的垃圾值,大概率小于0,导致循环条件i < Iterations直接不成立,循环根本没执行,就跳到了后面的蓝色赋值。

  2. 另外你加的[unroll(1000)]指令需要循环迭代次数是编译期常量,而普通全局变量不是常量,这个unroll指令会被编译器直接忽略,起不到任何作用。

修复代码

把Iterations改成常量即可:

const int Iterations = 1000;

[numthreads(8,8,1)]
void CSMain (uint3 id : SV_DispatchThreadID)
{
    // 因为Iterations是常量,编译器会自动优化,unroll可以加也可以不加
    for (int i = 0; i < Iterations; i++)
    {
        Result[id.xy] = float4(1, 0, 0, 1.0);
        return;
    }
    Result[id.xy] = float4(0, 0, 1, 1.0);
}

改完之后,Iterations的值会被编译器确定为1000,循环条件成立,第一次循环就会执行return,输出全红色纹理。

内容的提问来源于stack exchange,提问作者Cake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:46:14