[1,0,0,[["cc.EffectAsset",["_name","shaders","techniques"],0]],[[0,0,1,2,4]],[[0,"../anim/water-wave",[{"hash":3136788792,"name":"../anim/water-wave|vs:vert|fs:frag","blocks":[{"name":"WaterEffectVS","stageFlags":1,"binding":0,"members":[{"name":"waveAmplitude","type":13,"count":1},{"name":"waveFrequency","type":13,"count":1},{"name":"waveSpeed","type":13,"count":1},{"name":"edgeDamping","type":13,"count":1},{"name":"time","type":13,"count":1},{"name":"randomSeed","type":13,"count":1}],"defines":[]}],"samplerTextures":[{"name":"mainTexture","type":28,"count":1,"stageFlags":16,"sampleType":0,"binding":1,"defines":[]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[],"attributes":[{"name":"a_position","format":32,"location":0,"defines":[]},{"name":"a_texCoord","format":21,"location":1,"defines":[]},{"name":"a_color","format":44,"location":2,"defines":[]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"descriptors":[{"rate":0,"blocks":[],"samplerTextures":[],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":1,"blocks":[{"name":"WaterEffectVS","stageFlags":1,"binding":0,"members":[{"name":"waveAmplitude","type":13,"count":1},{"name":"waveFrequency","type":13,"count":1},{"name":"waveSpeed","type":13,"count":1},{"name":"edgeDamping","type":13,"count":1},{"name":"time","type":13,"count":1},{"name":"randomSeed","type":13,"count":1}],"defines":[]}],"samplerTextures":[{"name":"mainTexture","type":28,"count":1,"stageFlags":16,"sampleType":0,"binding":1,"defines":[]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":2,"blocks":[],"samplerTextures":[],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":3,"blocks":[{"name":"CCGlobal","stageFlags":1,"tags":{"builtin":"global"},"members":[{"name":"cc_time","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_screenSize","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_nativeSize","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_probeInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_debug_view_mode","typename":"vec4","type":16,"count":1,"precision":"mediump "}],"defines":[]},{"name":"CCCamera","stageFlags":1,"tags":{"builtin":"global"},"members":[{"name":"cc_matView","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matViewInv","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matProj","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matProjInv","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matViewProj","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matViewProjInv","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_cameraPos","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_surfaceTransform","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_screenScale","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_exposure","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_mainLitDir","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_mainLitColor","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_ambientSky","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_ambientGround","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_fogColor","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_fogBase","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_fogAdd","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_nearFar","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_viewPort","typename":"vec4","type":16,"count":1,"precision":"mediump "}],"defines":[]}],"samplerTextures":[],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]}],"glsl3":{"vert":"\nprecision highp float;\nlayout(std140) uniform CCGlobal {\n  highp   vec4 cc_time;\n  mediump vec4 cc_screenSize;\n  mediump vec4 cc_nativeSize;\n  mediump vec4 cc_probeInfo;\n  mediump vec4 cc_debug_view_mode;\n};\nlayout(std140) uniform CCCamera {\n  highp   mat4 cc_matView;\n  highp   mat4 cc_matViewInv;\n  highp   mat4 cc_matProj;\n  highp   mat4 cc_matProjInv;\n  highp   mat4 cc_matViewProj;\n  highp   mat4 cc_matViewProjInv;\n  highp   vec4 cc_cameraPos;\n  mediump vec4 cc_surfaceTransform;\n  mediump vec4 cc_screenScale;\n  mediump vec4 cc_exposure;\n  mediump vec4 cc_mainLitDir;\n  mediump vec4 cc_mainLitColor;\n  mediump vec4 cc_ambientSky;\n  mediump vec4 cc_ambientGround;\n  mediump vec4 cc_fogColor;\n  mediump vec4 cc_fogBase;\n  mediump vec4 cc_fogAdd;\n  mediump vec4 cc_nearFar;\n  mediump vec4 cc_viewPort;\n};\nlayout(std140) uniform WaterEffectVS {\n    highp float waveAmplitude;\n    highp float waveFrequency;\n    highp float waveSpeed;\n    highp float edgeDamping;\n    highp float time;\n    highp float randomSeed;\n};\nin vec3 a_position;\nin vec2 a_texCoord;\nin vec4 a_color;\nout vec4 v_color;\nout vec2 v_texCoord;\nout float v_waveAmplitude;\nfloat calcY() {\n    float centerX = (a_texCoord.x - 0.5) * 2.0;\n    float edgeFactor = 1.0 - pow(abs(centerX), edgeDamping);\n    float upperMask = smoothstep(0.45, 0.55, a_texCoord.y);\n    float lowerMask = 1.0 - upperMask;\n    float wave = sin(a_texCoord.y * waveFrequency + time * waveSpeed) *\n               cos((a_texCoord.x + randomSeed) * waveFrequency * 0.5) * waveAmplitude;\n    float upperDeform = wave * upperMask * edgeFactor;\n    upperDeform = max(0.0, upperDeform);\n    float lowerDeform = wave * lowerMask * edgeFactor;\n    return  (upperDeform + lowerDeform) * 2.0;\n}\nvec4 vert() {\n    vec4 pos = vec4(a_position, 1.0);\n    if (waveAmplitude > 0.1) {\n        pos.y += calcY();\n    }\n    gl_Position = cc_matViewProj * pos;\n    v_texCoord = a_texCoord;\n    v_color = a_color;\n    return gl_Position;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nin vec4 v_color;\nin vec2 v_texCoord;\nuniform sampler2D mainTexture;\nvec4 frag() {\n    vec4 texColor = texture(mainTexture, v_texCoord);\n    vec4 finalColor = v_color;\n    finalColor.a = texColor.a;\n    return finalColor;\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"},"glsl1":{"vert":"\nprecision highp float;\nuniform highp mat4 cc_matViewProj;\n     uniform highp float waveAmplitude;\n     uniform highp float waveFrequency;\n     uniform highp float waveSpeed;\n     uniform highp float edgeDamping;\n     uniform highp float time;\n     uniform highp float randomSeed;\nattribute vec3 a_position;\nattribute vec2 a_texCoord;\nattribute vec4 a_color;\nvarying vec4 v_color;\nvarying vec2 v_texCoord;\nvarying float v_waveAmplitude;\nfloat calcY() {\n    float centerX = (a_texCoord.x - 0.5) * 2.0;\n    float edgeFactor = 1.0 - pow(abs(centerX), edgeDamping);\n    float upperMask = smoothstep(0.45, 0.55, a_texCoord.y);\n    float lowerMask = 1.0 - upperMask;\n    float wave = sin(a_texCoord.y * waveFrequency + time * waveSpeed) *\n               cos((a_texCoord.x + randomSeed) * waveFrequency * 0.5) * waveAmplitude;\n    float upperDeform = wave * upperMask * edgeFactor;\n    upperDeform = max(0.0, upperDeform);\n    float lowerDeform = wave * lowerMask * edgeFactor;\n    return  (upperDeform + lowerDeform) * 2.0;\n}\nvec4 vert() {\n    vec4 pos = vec4(a_position, 1.0);\n    if (waveAmplitude > 0.1) {\n        pos.y += calcY();\n    }\n    gl_Position = cc_matViewProj * pos;\n    v_texCoord = a_texCoord;\n    v_color = a_color;\n    return gl_Position;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nvarying vec4 v_color;\nvarying vec2 v_texCoord;\nuniform sampler2D mainTexture;\nvec4 frag() {\n    vec4 texColor = texture2D(mainTexture, v_texCoord);\n    vec4 finalColor = v_color;\n    finalColor.a = texColor.a;\n    return finalColor;\n}\nvoid main() { gl_FragColor = frag(); }"},"builtins":{"globals":{"blocks":[{"name":"CCGlobal","defines":[]},{"name":"CCCamera","defines":[]}],"samplerTextures":[],"buffers":[],"images":[]},"locals":{"blocks":[],"samplerTextures":[],"buffers":[],"images":[]},"statistics":{"CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS":48,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":0}},"defines":[]}],[{"passes":[{"program":"../anim/water-wave|vs:vert|fs:frag","blendState":{"targets":[{"blend":true,"blendSrc":2,"blendDst":4,"blendDstAlpha":4}]},"depthStencilState":{"depthTest":false,"depthWrite":false},"properties":{"waveAmplitude":{"type":13,"value":[10]},"waveFrequency":{"type":13,"value":[50]},"waveSpeed":{"type":13,"value":[5]},"edgeDamping":{"type":13,"value":[1]},"time":{"type":13,"value":[0]},"randomSeed":{"type":13,"value":[0]},"mainTexture":{"value":"white","type":28}}}]}]]],0,0,[],[],[]]
