SimplexNoise重新缩放fbm内部的渐变

问题描述 投票:0回答:1

我需要如何在fbm循环中修改梯度矢量?

问题是我无法使用此代码正确计算法线...他们只是指向正确的方向,这会导致奇怪的照明。

这里是法向矢量的计算:

    float3 grad;
    float noise = getNoiseValue(TriPos, grad);
    float3 nTriPos = normalize(TriPos);
    grad = grad / (noise);
    float3 h = grad - dot(grad, nTriPos) * nTriPos;
    float3 n = nTriPos - (h);

编辑:我稍微修改了Normal计算。并删除频率。现在看起来还可以。有没有办法插入频率?

    float getNoiseValue(float3 TriPos, out float3 gradient)
    {    
        float strength = 0.45f;
        float octaves = 15;
        float Persistence = 0.53333f;
        float BaseRoughness = 0.71f;
        float Roughness = 1.81f;
        float MinNoiseValue = 1.4f;

        float noiseValue = 0.f;
        float frequency = BaseRoughness;
        float amplitude = 1.f;
        TriPos = TriPos / 40000.f;
        for (int i = 0; i < octaves; i++)
        {
            float v = (sdnoise3(TriPos, gradient) + 1.f) * 0.5f;
            gradient += gradient * amplitude;
            noiseValue += v * amplitude;
            frequency *= Roughness;
            amplitude *= Persistence;
        }
        noiseValue = max(0.f, noiseValue - MinNoiseValue);
        return noiseValue;
    }

更新:

所以现在一切正常,但是当我将频率添加到循环中时,我又得到了奇怪的照明...

    for (int i = 0; i < octaves; i++)
    {
        float v = (sdnoise3(normalize(TriPos) * frequency, gradient) + 1.f) * 0.5f;
        gradient = gradient + (gradient * amplitude * frequency);
        noiseValue = noiseValue + (v * amplitude);
        frequency *= Roughness;
        amplitude *= Persistence;
    }

任何人都可以告诉我这里有什么问题吗?

shader hlsl normals simplex-noise
1个回答
0
投票

我发现了问题。某些逻辑错误...

    float3 grad;
    for (int i = 0; i < octaves; i++)
    {
        float v = (sdnoise3(TriPos * frequency, gradient) + 1.f) * 0.5f;
        grad += (gradient * amplitude);
        noiseValue += (v * amplitude);
        frequency = frequency * Roughness;
        amplitude = amplitude * Persistence;
    }

I used the gradient variable as out parameter of sdnoise3 function so it got overriden every iteration.
© www.soinside.com 2019 - 2024. All rights reserved.