Revision control
++ {
++ "QEN": {
++ "description": "Generates normal mapping effect where texture is used for adding 3D appearance for the source item. This is useful for example to faking the lighting of bumps and dents.",
++ "fragmentCode": [
++ "@main",
++ "{",
++ " vec2 coord = vec2(fract(texCoord * normalMapTextureScale));",
++ " vec4 normalMapTexture = texture(normalMapImage, coord);",
++ " vec3 lightDir = vec3(normalMapLightPosition.xy - texCoord, normalMapLightPosition.z);",
++ " // Aspect ratio correction",
++ " lightDir.x *= iResolution.x / iResolution.y;",
++ " float d = length(lightDir);",
++ " vec3 n = normalize(normalMapTexture.rgb * 2.0 - 1.0);",
++ " vec3 l = normalize(lightDir);",
++ " vec3 normalMapDiffuse = (normalMapLightColor.rgb * normalMapLightColor.a) * max(dot(n, l), 0.0);",
++ " float lightFade = 1.0 / (normalMapLightFade + normalMapLightFade * d + normalMapLightFade * d * d);",
++ " // Fade based on normal map alpha",
++ " lightFade *= pow(normalMapTexture.a, 10.0);",
++ " vec3 normalMap = fragColor.rgb * normalMapDiffuse * lightFade;",
++ " fragColor.rgb = mix(fragColor.rgb, normalMap, normalMapOpacity);",
++ "}"
++ ],
++ "name": "NormalMapping",
++ "properties": [
++ {
++ "defaultValue": "../images/scratches_n.png",
++ "description": "Texture for the normal mapping effect. If scaling is used then this should support seamless tiling.",
++ "name": "normalMapImage",
++ "type": "image"
++ },
++ {
++ "defaultValue": "1",
++ "description": "Scaling of the normal map texture. The default value is 1.0, meaning the texture matches to source item size.",
++ "maxValue": "4",
++ "minValue": "0.2",
++ "name": "normalMapTextureScale",
++ "type": "float"
++ },
++ {
++ "defaultValue": "0.5, 0.5, 0.5",
++ "description": "Position of the point light relative to the item coordinates. Bigger z value means the light if further away from the surface.",
++ "maxValue": "1, 1, 1",
++ "minValue": "0, 0, 0",
++ "name": "normalMapLightPosition",
++ "type": "vec3"
++ },
++ {
++ "defaultValue": "1, 1, 1, 1",
++ "description": "Defines color of the light. The default value is white (1.0, 1.0, 1.0, 1.0).",
++ "name": "normalMapLightColor",
++ "type": "color"
++ },
++ {
++ "defaultValue": "0.5",
++ "description": "Defines the fading rate at which the lighting effect dims the light in proportion to the distance to the light. The default value is 0.5.",
++ "maxValue": "1",
++ "minValue": "0",
++ "name": "normalMapLightFade",
++ "type": "float"
++ },
++ {
++ "defaultValue": "1",
++ "description": "Defines the opacity of the normal map effect. Value 1.0 means full opacity while 0.0 means full transparency. The default value is 1.0.",
++ "maxValue": "1",
++ "minValue": "0",
++ "name": "normalMapOpacity",
++ "type": "float"
++ }
++ ],
++ "version": 1
++ }
++ }