小编Tur*_*olt的帖子

从我的工作着色器转换为统一计算着色器时,流体模拟中的奇怪行为

我正在尝试在 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)

shader unity-game-engine compute-shader fluid-dynamics

7
推荐指数
1
解决办法
420
查看次数