{ "stage": [ { "type": "ImageActor", "name": "Image1", "position": [ 0.40461349487305, 0.9150390625, 0.0 ], "parentOrigin": [0.5, 0.5, 0.5], "widthResizePolicy":"FILL_TO_PARENT", "heightResizePolicy":"DIMENSION_DEPENDENCY", "effect": "Ripple2D", "image": { "filename": "{DEMO_IMAGE_DIR}gallery-medium-25.jpg", "width": 400, "height": 400, "loadPolicy": "IMMEDIATE", "releasePolicy": "NEVER" }, "signals": [ { "name": "onStage", "action": "play", "animation": "Animation_1" } ] } ], "paths": {}, "animations": { "Animation_1": { "loop":true, "properties": [ { "actor": "Image1", "property": "uTime", "value": 36.0, "alphaFunction": "LINEAR", "timePeriod": { "delay": 0, "duration": 20.0 }, "guiBuilderTimelineColor": "#8dc0da" } ] } }, "shaderEffects": { "Ripple2D": { "program": { "vertexPrefix": "", "vertex": "void main(void)\n{\n gl_Position = uMvpMatrix * vec4(aPosition, 1.0);\n vTexCoord = mix( sTextureRect.xy, sTextureRect.zw, aTexCoord );\n}\n\n", "fragmentPrefix": "", "fragment": "precision mediump float;\nuniform float uAmplitude; // 0.02; (< 1)\nuniform float uTime;\nvoid main()\n{\n highp vec2 textureSize = sTextureRect.zw - sTextureRect.xy;\n highp vec2 pos = -1.0 + 2.0 * vTexCoord.st/textureSize;\n highp float len = length(pos);\n highp vec2 texCoord = vTexCoord.st/textureSize + pos/len * sin( len * 12.0 - uTime * 4.0 ) * uAmplitude; \n gl_FragColor = texture2D(sTexture, texCoord) * uColor;\n}\n\n\n", "geometryType": "GEOMETRY_TYPE_IMAGE" }, "geometryHints": "HINT_NONE", "gridDensity": 0, "loop": true, "uAmplitude": 0.02, "uTime": 0.0 } } }