Revision control
Copy as Markdown
{
"QEN": {
"description": "This is an empty node for creating custom effects.",
"fragmentCode": [
"@requires NoiseHelper",
"// Renders a thunder strike line",
"float renderThunderStrike(vec2 p, float d)",
"{",
" // Vertical movement of the strike",
" float w = 0.4;",
" float r = 0.0;",
" float s = 1.0;",
" float sw = 1.0;",
" // Create random line with noise",
" for (int i=0; i<4; i++) {",
" s *= 2.2;",
" sw *= 0.35;",
" r += sw * pseudo3dNoise(vec3(s * 2.0 * p.y, 1.0, 1.0)).x;",
" }",
" w *= r;",
" return smoothstep(d, 0.0, abs(w - p.x));",
"}",
"",
"@main",
"{",
" // Speed of the strikes",
" float t = iTime * 2.0;",
" uint tIndex = uint(floor(t));",
" // Get set of random values per strike",
" vec3 rand3 = _hash13(tIndex);",
" if (rand3.x > (1.0 - thunderStrikeOccurrence)) {",
" // Animater between 0..1..0",
" float sTime = 2.0 * (0.5 - abs((t - tIndex) - 0.5));",
" vec2 uv = 2.0 * texCoord - 1.0;",
" uv.y = 1.0 - uv.y;",
" vec2 uv2 = uv;",
" // Lightning shape",
" uv2.y += tIndex;",
" // Lightning position",
" // Wider so some strikes happen outside the item",
" float px = (rand3.y - 0.5) * 3.0;",
" uv2.x += px;",
"",
" float strikeWidth = (0.5 + rand3.z) * uv.y * 0.006;",
" float strike = renderThunderStrike(uv2, strikeWidth);",
" float glowWidth = 0.5 + 0.5 * sTime;",
" float glow = renderThunderStrike(uv2, glowWidth) * sTime;",
" float lightning = strike * 0.4 * sTime;",
" // Reduce the strike height",
" float strikeHeight = 1.5 - 2.0 * rand3.z;",
" lightning *= smoothstep(strikeHeight, strikeHeight + 0.5, uv.y);",
" lightning += glow * 0.2;",
" float backgroundLight = 0.4 * sTime;",
"",
" float thunderAlpha = backgroundLight + lightning;",
" float thunderStrength = 10.0;",
" vec3 thunder = thunderColor.rgb * thunderAlpha * thunderStrength;",
" fragColor = mix(fragColor, vec4(thunder.rgb, 1.0) * fragColor.a, thunderAlpha * thunderColor.a);",
" }",
"}"
],
"name": "Thunder",
"properties": [
{
"defaultValue": "1, 0.9, 0.8, 0.5",
"description": "Color used for the thunder strikes.",
"name": "thunderColor",
"type": "color"
},
{
"defaultValue": "0.1",
"description": "Defines how often the strikes occur. Values are between 0 (never) and 1 (every time).",
"maxValue": "1",
"minValue": "0",
"name": "thunderStrikeOccurrence",
"type": "float"
}
],
"version": 1
}
}