37 lines
2.0 KiB
GLSL
37 lines
2.0 KiB
GLSL
vec2 getOverlayNoise(float sideIntensity, bool noLightCheck, bool decreaseWithDepth, float meltingRadius, int pixelSize, vec3 worldPos, float noiseTransparency, float removeIntensity) {
|
|
float overlayNoiseVariable;
|
|
float topCheck = abs(clamp01(dot(normal, upVec))); // normal check for top surfaces
|
|
if (topCheck > 0.5) {
|
|
overlayNoiseVariable = 0.0;
|
|
overlayNoiseVariable += topCheck;
|
|
} else {
|
|
overlayNoiseVariable = sideIntensity;
|
|
}
|
|
|
|
//noise
|
|
int noiseSize = 0;
|
|
noiseSize = pixelSize;
|
|
float noise = float(hash33(floor(mod(worldPos, vec3(100.0)) * noiseSize + 0.03) * noiseSize)) * 0.25; // pixel-locked procedural noise
|
|
|
|
//make patches of terrain that don't have noise
|
|
float removeNoise1 = 1.0 - Noise3D(worldPos * 0.0005) * removeIntensity * 1.2;
|
|
float removeNoise2 = 1.0 - Noise3D(worldPos * 0.005) * removeIntensity;
|
|
float removeNoise3 = Noise3D(worldPos * 0.02) * removeIntensity;
|
|
float removeNoise = clamp01(2.0 * removeNoise1 + 0.70 * removeNoise2 + 0.2 * removeNoise3);
|
|
overlayNoiseVariable *= removeNoise;
|
|
|
|
// light check so noise is not in caves (near light sources)
|
|
overlayNoiseVariable = clamp01(overlayNoiseVariable); // to prevent stuff breaking, like the fucking bamboo sapling!!!!
|
|
if (!noLightCheck) {
|
|
overlayNoiseVariable *= (1.0 - pow(lmCoord.x, 1.0 / meltingRadius * 2.5) * 4.3) * pow(lmCoord.y, 14.0); // first part to turn off at light sources, second part to turn off if under blocks
|
|
}
|
|
float depthTransparency = 1.0;
|
|
if (decreaseWithDepth) {
|
|
depthTransparency = 10.0 / abs(min(worldPos.y, 0.001)) - 0.3 + clamp(removeNoise * 1.3, 0.0, 0.1); // increase transparency beginning at y=0 at increasing with decreasing y level
|
|
}
|
|
overlayNoiseVariable = clamp(overlayNoiseVariable, 0.0, depthTransparency); // to prevent artifacts near light sources
|
|
|
|
vec2 result = vec2(overlayNoiseVariable, noise);
|
|
return result;
|
|
}
|