{ "QEN": { "description": "Generates snowing effect.", "fragmentCode": [ "@main", "{", " float snowing = 0.0;", " float time = iTime * 0.8;", " for (int i = 1; i < (1 + snowingLayers); i++) {", " // Divide layer into cells", " float cellAmount = 2.0 + (float(i) * 3.0);", " vec2 uv = vec2(texCoord.x, texCoord.y - time * snowingGravity * (1.0 / float(i)));", " vec2 uvStep = (ceil(uv * cellAmount - vec2(0.5, 0.5)) / cellAmount);", " float discardFlake = fract(sin(dot(uvStep.xy, vec2(32.4691, 94.615))) * 31572.1684);", " if (discardFlake < 0.3) {", " // Random positions inside the cell", " float x = fract(sin(dot(uvStep, vec2(12.9898, 78.233))) * 43758.5453) - 0.5;", " float y = fract(sin(dot(uvStep, vec2(62.2364, 94.674))) * 62159.8432) - 0.5;", " float maxMag = snowingVariation / (1.0 + snowingFlakeSize);", " float mag1 = maxMag / cellAmount * cos(time * 3.0);", " float mag2 = maxMag / cellAmount * sin(time * 3.0);", " float d = (2.0 / snowingFlakeSize) * distance((uvStep.xy + vec2(x , sin(y)) * mag1 + vec2(y, x) * mag2), uv);", " float snowd = (x + 1.0) * 0.5 * clamp((1.5 - d * (10.0 + (x * 5.0)) * cellAmount), 0.0, 1.0);", " snowing +=snowd;", " }", " }", " vec4 snowingColor = vec4(1.0, 1.0, 1.0, snowing);", " fragColor = mix(fragColor, snowingColor * fragColor.a, snowing);", "}" ], "name": "Snowing", "properties": [ { "defaultValue": "4", "description": "The amount of snow layers. Increasing the layers adds variation to the snowing effect, but also requires more processing power. The default value is 4 and practical range is between 1 and 10.", "maxValue": "10", "minValue": "1", "name": "snowingLayers", "type": "int" }, { "defaultValue": "1", "description": "Size of a single snowflake. The default value is 1.0 and practical range is between 0.2 and 2.0.", "maxValue": "2", "minValue": "0.2", "name": "snowingFlakeSize", "type": "float" }, { "defaultValue": "1", "description": "Defines gravity of the snowing effect so how fast the snowflakes fall down. The default value is 1.0 and practical range is between 0.2 and 2.0.", "maxValue": "2", "minValue": "0.2", "name": "snowingGravity", "type": "float" }, { "defaultValue": "0.5", "description": "Defines how much snowflakes positions vary while they are coming down. The default value is 0.5 and the range is between 0.0 and 1.0.", "maxValue": "1", "minValue": "0", "name": "snowingVariation", "type": "float" } ], "version": 1 } }