diff --git a/src/basics/NoiseFunctionSimplex.cpp b/src/basics/NoiseFunctionSimplex.cpp index fc8b4dc..4f42cae 100644 --- a/src/basics/NoiseFunctionSimplex.cpp +++ b/src/basics/NoiseFunctionSimplex.cpp @@ -517,14 +517,14 @@ const Texture2D *NoiseFunctionSimplex::getNormalTexture() { // TODO Make texture tileable double dx = to_double(x) / to_double(width); double dz = to_double(z) / to_double(height); - double vcenter = noiseSimplexGet2DValue(scale * dx, scale * dz) - 0.5; - double vsouth = noiseSimplexGet2DValue(scale * dx, scale * dz + offset) - 0.5; - double veast = noiseSimplexGet2DValue(scale * dx + offset, scale * dz) - 0.5; + double vcenter = noiseSimplexGet2DValue(scale * dx, scale * dz); + double vsouth = noiseSimplexGet2DValue(scale * dx, scale * dz + offset); + double veast = noiseSimplexGet2DValue(scale * dx + offset, scale * dz); Vector3 normal = Geometry::getNormalFromTriangle( Vector3(0.0, vcenter, 0.0), Vector3(0.0, vsouth, offset), Vector3(offset, veast, 0.0)); - _normalTexture->setPixel(x, z, Color(normal.x + 0.5, normal.y + 0.5, normal.z + 0.5)); + _normalTexture->setPixel(x, z, Color(normal.x * 0.5 + 0.5, normal.y * 0.5 + 0.5, normal.z * 0.5 + 0.5)); } } } diff --git a/src/render/opengl/shaders/noise.frag b/src/render/opengl/shaders/noise.frag index d466fc6..61be54f 100644 --- a/src/render/opengl/shaders/noise.frag +++ b/src/render/opengl/shaders/noise.frag @@ -11,7 +11,13 @@ vec3 noiseNormal2d(float[4] data, vec2 location, float detail) { // TODO offsets // TODO parametrized texture scaling - normal += texture(simplexSampler, location * scaling / 15.0).xyz - vec3(0.5); + float factor; + if (height * step_height <= detail) { + factor = (height - detail) / (height - height * step_height); + } else { + factor = 1.0; + } + normal += (texture(simplexSampler, location * scaling / 15.0).xyz * 2.0 - 1.0) * factor; scaling *= step_scaling; height *= step_height; }