首页 > 解决方案 > 如何在 Shadertoy 上编写光谱反应扩散求解器?

问题描述

即使使用20 点拉普拉斯算子,仍然存在具有圆对称种子的坐标系伪影。

在此处输入图像描述

这是尝试频谱求解器的原因之一。

上面提到的带有前向欧拉求解器的最简单的拉普拉斯算子的主要代码是:

#define A(U) texture(iChannel0,(U)/iResolution.xy)
void mainImage( out vec4 Q, in vec2 U )
{
    // Lookup Field 
    Q = A(U);
    // Mean Field 
    // Two way: horizontal, vertical
    vec4 sum2 = A(U+vec2(0,1))+A(U+vec2(1,0))+A(U-vec2(0,1))+A(U-vec2(1,0));
    vec4 mean2 = 1./4.*(sum2);
    // Laplacian 
    vec4 laplacian2 = (mean2 - Q);
    
    // Diffuse each variable differently : 
    Q += laplacian2 * vec4(1, .4, 1, 1);
    // Compute reactions:
    Q.x = Q.x * .99 + 0.01 * Q.y;
    Q.y = Q.y + .05 * Q.y * (1. - Q.y) - .03 * Q.x - 1e-3;
    
    // Prevent Negative Values (depends on system):
    Q = max(Q, 0.);
}

如何将其重写为 Shadertoy 上的光谱求解器?

标签: numerical-methodsfragment-shaderspectral

解决方案


推荐阅读