【问题标题】:How to fix blocky artifacts in Perlin Noise如何修复 Perlin Noise 中的块状伪影
【发布时间】:2017-12-05 15:50:10
【问题描述】:

我尝试使用 Rust 语言制作 2D Perlin 噪音,如下所述:https://en.wikipedia.org/wiki/Perlin_noise

我的随机梯度函数如下:

fn random_gradient_vector(rng : &mut rand::Rng) -> (f64, f64)
{
    let theta = rng.next_f64() * 2.0 * 3.1415926536;

    return (theta.cos(), theta.sin());
}

我的插值函数:

fn interpolate(a : f64, b : f64, x : f64) -> f64
{
    let mut w = x*x*x*(x*(x*6.0 - 15.0) + 10.0);
    return a * (1.0-w) + b * (w);
}

结果,充其量:

我做错了什么导致清晰可见的网格线?我想到了三种解决方法:

1) 我的代码中有一个错误我需要找到。 2)尝试在噪声中添加不同的八度音阶,也许每个八度音阶都经过变换以消除伪影。 3) 尝试不同的噪声算法。

史蒂夫

【问题讨论】:

    标签: perlin-noise


    【解决方案1】:

    如果距离矢量计算不正确,则会出现“块状伪影”。他们应该从角落指向点:

    var d0 = vec2.dot(vx0, [u,v]);
    var d1 = vec2.dot(vx1, [u-1,v]);
    var d2 = vec2.dot(vx2, [u,v-1]);
    var d3 = vec2.dot(vx3, [u-1,v-1]);
    

    正确结果:https://jsfiddle.net/f65w5jqa/

    块状工件(uv 和那些交换):https://jsfiddle.net/p17fh1qp/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多