微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

值求和过程中无分支的单纯形噪声

如何解决值求和过程中无分支的单纯形噪声

我一直在研究没有分支的单纯形噪声的实现 值求和过程中。

几乎一切都运行顺利,这是我唯一遇到的问题 是因为一些人工制品可以看到单纯形点阵。 这些人工制品来自权重的计算方式: 首先,我从 the book of shaders: noise 获取了一些代码

噪音很少,人工制品很少

几乎没有人工制品的噪声(当前状态)

夸张的人工制品

带有夸张人工制品的噪音(故意让您可以清楚地看到问题)

   //don't kNow how this works
    vec3 simplexGrid (vec2 st) {
        vec3 xyz = vec3(0.0);
    
        vec2 p = fract(skew(st));
        if (p.x > p.y) {
            xyz.xy = 1.0-vec2(p.x,p.y-p.x);
            xyz.z = p.y;
        } else {
            xyz.yz = 1.0-vec2(p.x-p.y,p.y);
            xyz.x = p.x;
        }
        return fract(xyz);
    }

这个函数返回每个角的影响,通过使用它作为权重的基础,然后我得到它们的平方值来平滑它们我使用与他的三平面映射技术相同的技巧 sabastian lague 并将它们简单地除以他们的总和。这样我就不必使用五次平滑函数了。

这种方法有两个问题:

  • 我刚刚谈到的人工制品。
  • frac 函数的使用

为了解决它们(同样,几乎解决了第一个问题)我使用了一个 map 函数,它的工作原理类似于 arduino 的 map 函数(与数组没有任何关系)。

map(float val,float min,float max){return (val-min)/(max-min);}

通过手动搜索每个重量的最小值和最大值,我读取了压裂并大大减少了人工制品的大小。 但这仍然不够,因为人工制品在地形网格上更加明显。 我很确定问题出在我想出的最小值和最大值上。 因此,如果你们中的任何人有任何建议或问题来摆脱这些人工制品,请随时发布 这是HLSL中的代码screenshot of code

如果您想自己尝试,这里是整个着色器的 link

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。