【问题标题】:Deriving uncertainty values from a noise texture?从噪声纹理中得出不确定性值?
【发布时间】:2014-05-01 02:58:31
【问题描述】:

我正在尝试实现Sketchy Drawings。我参与了需要使用噪声纹理来导出不确定性值的过程的一部分,这些不确定性值将为边缘图提供偏移量。

这是我的圆环边缘图的图片:

这是我按照建议使用 Perlin 函数得到的噪声纹理:

我将它们分别保存为edgeTexture 和noiseTexture 中的纹理。

现在我被困在你必须通过从噪声纹理派生的不确定值来偏移边缘贴图的纹理坐标的部分。这张图片来自书中:

offs = turbulence(s, t); 
offt = turbulence(1 - s, 1 - t);

我暂时忽略了 2x2 矩阵。这是我当前的片段着色器尝试及其产生的结果:

#version 330

out vec4 vFragColor;

uniform sampler2D edgeTexture;
uniform sampler2D noiseTexture;

smooth in vec2 vTexCoords;

float turbulence(float s, float t) 
{
    float sum = 0;
    float scale = 1;
    float s1 = 1;
    vec2 coords = vec2(s,t);

    for (int i=0; i < 10; i++)
    {
        vec4 noise = texture(noiseTexture, 0.25 * s1 * coords);
        sum += scale * noise.x;
        scale = scale / 2;
        s1 = s1 * 2;
    }

    return sum;
}

void main( void )
{
    float off_s = turbulence(vTexCoords.s, vTexCoords.t);
    float off_t = turbulence(1 - vTexCoords.s, 1 - vTexCoords.t);

    vFragColor = texture(edgeTexture, vTexCoords + vec2(off_s, off_t));
}

很明显,我对vTexCoords 的添加已经过时了,但我不明白为什么。我已经尝试了其他几个湍流函数定义,但没有一个接近所需的输出,所以我认为我的整体方法在某个地方存在缺陷。非常感谢这里的任何帮助,如果我不清楚,请发表评论。所需的环面输出看起来就像我想象的一个粗略绘制的圆圈。

【问题讨论】:

    标签: opengl graphics glsl texture-mapping simplex-noise


    【解决方案1】:

    您的湍流函数将返回 (0,1) 范围内的值。首先,您需要更改它以使值以 0 为中心。这应该在函数的循环内完成,否则您最终会得到一个奇怪的分布。所以首先,我认为你应该换行:

    vec4 noise = texture(noiseTexture, 0.25 * s1 * coords);
    

    到

    vec4 noise = texture(noiseTexture, 0.25 * s1 * coords) * 2.0 - 1.0;
    

    然后您需要缩放偏移量,这样您就不会对边缘纹理进行采样,使其离正在绘制的片段太远。变化:

    vFragColor = texture(edgeTexture, vTexCoords + vec2(off_s, off_t));
    

    到

    vFragColor = texture(edgeTexture, vTexCoords + vec2(off_s, off_t) * off_scale);
    

    其中off_scale 是通过实验选择的一些小值(可能约为 0.05)。

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 2015-08-16
      • 2017-09-29
      • 2013-09-16
      • 2018-12-31
      • 1970-01-01
      • 2019-08-17
      • 2018-09-13
      • 2011-03-02
      相关资源
      最近更新 更多