Revision control

++ {
++ "QEN": {
++ "description": "Adds RGB or unified noise to the source item.",
++ "fragmentCode": [
++ "@requires NoiseHelper",
++ "@main",
++ "{",
++ "#if (NOISE_USE_RGB == 1)",
++ "#if (NOISE_USE_RANDOM == 1)",
++ " uvec2 noiseCoord = uvec2(fragCoord) + HASH_BOX_SIZE * uint(iTime * 60);",
++ " vec3 noiseColor = _hash13(noiseCoord.x + HASH_BOX_SIZE * noiseCoord.y);",
++ "#else",
++ " vec3 noiseColor = hash23(fragCoord);",
++ "#endif // NOISE_USE_RANDOM",
++ "#else",
++ "#if (NOISE_USE_RANDOM == 1)",
++ " uvec2 noiseCoord = uvec2(fragCoord) + HASH_BOX_SIZE * uint(iTime * 60);",
++ " vec3 noiseColor = vec3(_hash21(noiseCoord));",
++ "#else",
++ " vec3 noiseColor = vec3(hash21(fragCoord));",
++ "#endif // NOISE_USE_RANDOM",
++ "#endif // NOISE_USE_RGB",
++ "",
++ " fragColor.rgb = mix(fragColor.rgb, noiseColor * fragColor.a, noiseAmount);",
++ "}"
++ ],
++ "name": "Noise",
++ "properties": [
++ {
++ "defaultValue": "1",
++ "description": "When this is set to 1, the noise affects all RGB color channels separately. When this is set to 0, noise affects all channels similarly.",
++ "name": "NOISE_USE_RGB",
++ "type": "define"
++ },
++ {
++ "defaultValue": "1",
++ "description": "When set to 1, noise animates randomly. When set to 0, noise remains static.",
++ "name": "NOISE_USE_RANDOM",
++ "type": "define"
++ },
++ {
++ "defaultValue": "0",
++ "description": "The amount of noise applied to the source.",
++ "maxValue": "1",
++ "minValue": "0",
++ "name": "noiseAmount",
++ "type": "float"
++ }
++ ],
++ "version": 1
++ }
++ }