我正在尝试在 Unity 的计算着色器中复制我的工作 2d 流体着色器玩具,希望尽快将其移至 3D。当我以同样的方式复制算法时,我得到了一些非常奇怪的行为(在我拍摄的这个视频中看到)。我试图调试我能想到的一切,但我不明白为什么它们不一样。我正在可视化此捕获中的矢量矩阵(与查看我的着色玩具时按 Space 相同)。
我用我用来执行驱动速度矩阵的 Navier-Stokes 方程的代码创建了一个pastebin。模拟的核心归结为:
float4 S(RWTexture2D<float4> target, uint2 id)
{
return target[(id.xy + resolution)%resolution];
}
void Fluid(RWTexture2D<float4> target, uint2 id, float2 offset, float4 values, inout float2 velocity, inout float pressure, inout float divergence, inout float neighbors)
{
float2 v = S(target, id.xy + offset);
float4 s = S(target, id.xy + offset.xy - v);
float2 o= normalize(offset);
velocity += o * (s.w …Run Code Online (Sandbox Code Playgroud)