Fix perlin and simplex noises to return normalized value to range 0-1
#3154
This commit is contained in:
@@ -114,7 +114,7 @@ namespace
|
|||||||
Float2 fade_xy = PerlinNoiseFade(Float2(Pf));
|
Float2 fade_xy = PerlinNoiseFade(Float2(Pf));
|
||||||
Float2 n_x = Float2::Lerp(Float2(n00, n01), Float2(n10, n11), fade_xy.X);
|
Float2 n_x = Float2::Lerp(Float2(n00, n01), Float2(n10, n11), fade_xy.X);
|
||||||
float n_xy = Math::Lerp(n_x.X, n_x.Y, fade_xy.Y);
|
float n_xy = Math::Lerp(n_x.X, n_x.Y, fade_xy.Y);
|
||||||
return Math::Saturate(2.3f * n_xy);
|
return Math::Saturate(n_xy * 2.136f + 0.5f); // Rescale to [0;1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ float Noise::SimplexNoise(const Float2& p)
|
|||||||
float gx = a0.X * x0.X + h.X * x0.Y;
|
float gx = a0.X * x0.X + h.X * x0.Y;
|
||||||
Float2 gyz = Float2(a0.Y, a0.Z) * Float2(x12.X, x12.Z) + Float2(h.Y, h.Z) * Float2(x12.Y, x12.W);
|
Float2 gyz = Float2(a0.Y, a0.Z) * Float2(x12.X, x12.Z) + Float2(h.Y, h.Z) * Float2(x12.Y, x12.W);
|
||||||
Float3 g(gx, gyz.X, gyz.Y);
|
Float3 g(gx, gyz.X, gyz.Y);
|
||||||
return Math::Saturate(130.0f * Float3::Dot(m, g));
|
return Math::Saturate(Float3::Dot(m, g) * 71.428f + 0.5f); // Rescale to [0;1]
|
||||||
}
|
}
|
||||||
|
|
||||||
Float2 Noise::WorleyNoise(const Float2& p)
|
Float2 Noise::WorleyNoise(const Float2& p)
|
||||||
|
|||||||
@@ -58,15 +58,13 @@ namespace FlaxEngine.Utilities
|
|||||||
/// <param name="x">The x coordinate.</param>
|
/// <param name="x">The x coordinate.</param>
|
||||||
/// <param name="y">The y coordinate.</param>
|
/// <param name="y">The y coordinate.</param>
|
||||||
/// <returns>The noise value.</returns>
|
/// <returns>The noise value.</returns>
|
||||||
public float Sample(int x, int y)
|
public float Sample(float x, float y)
|
||||||
{
|
{
|
||||||
float noise = 0.0f;
|
float noise = 0.0f;
|
||||||
|
|
||||||
if (NoiseScale > Mathf.Epsilon)
|
if (NoiseScale > Mathf.Epsilon)
|
||||||
{
|
{
|
||||||
x = Math.Abs(x);
|
x = Mathf.Abs(x);
|
||||||
y = Math.Abs(y);
|
y = Mathf.Abs(y);
|
||||||
|
|
||||||
for (int octave = 0; octave < Octaves; octave++)
|
for (int octave = 0; octave < Octaves; octave++)
|
||||||
{
|
{
|
||||||
float octaveShift = 1 << octave;
|
float octaveShift = 1 << octave;
|
||||||
@@ -74,7 +72,6 @@ namespace FlaxEngine.Utilities
|
|||||||
noise += PerlinNoise2D(x * octaveScale, y * octaveScale) / octaveShift;
|
noise += PerlinNoise2D(x * octaveScale, y * octaveScale) / octaveShift;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Base + noise * NoiseAmount;
|
return Base + noise * NoiseAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ float3 rand3dTo3d(float3 value)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float PerlinNoiseImpl(float4 Pi, float4 Pf)
|
float PerlinNoiseImpl(float4 Pi, float4 Pf)
|
||||||
{
|
{
|
||||||
Pi = Mod289(Pi);
|
Pi = Mod289(Pi);
|
||||||
@@ -124,7 +123,7 @@ float PerlinNoiseImpl(float4 Pi, float4 Pf)
|
|||||||
float2 fade_xy = PerlinNoiseFade(Pf.xy);
|
float2 fade_xy = PerlinNoiseFade(Pf.xy);
|
||||||
float2 n_x = lerp(float2(n00, n01), float2(n10, n11), fade_xy.x);
|
float2 n_x = lerp(float2(n00, n01), float2(n10, n11), fade_xy.x);
|
||||||
float n_xy = lerp(n_x.x, n_x.y, fade_xy.y);
|
float n_xy = lerp(n_x.x, n_x.y, fade_xy.y);
|
||||||
return saturate(2.3 * n_xy);
|
return saturate(n_xy * 2.136f + 0.5f); // Rescale to [0;1]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Classic Perlin noise
|
// Classic Perlin noise
|
||||||
@@ -183,7 +182,7 @@ float SimplexNoise(float2 p)
|
|||||||
float gx = a0.x * x0.x + h.x * x0.y;
|
float gx = a0.x * x0.x + h.x * x0.y;
|
||||||
float2 gyz = a0.yz * x12.xz + h.yz * x12.yw;
|
float2 gyz = a0.yz * x12.xz + h.yz * x12.yw;
|
||||||
float3 g = float3(gx, gyz);
|
float3 g = float3(gx, gyz);
|
||||||
return saturate(130.0f * dot(m, g));
|
return saturate(dot(m, g) * 71.428f + 0.5f); // Rescale to [0;1]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Worley noise (cellar noise with standard 3x3 search window for F1 and F2 values)
|
// Worley noise (cellar noise with standard 3x3 search window for F1 and F2 values)
|
||||||
|
|||||||
Reference in New Issue
Block a user