| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653 | 
							- {
 
-   "__type__": "cc.EffectAsset",
 
-   "_name": "builtin-3d-trail",
 
-   "_objFlags": 0,
 
-   "_native": "",
 
-   "properties": null,
 
-   "techniques": [
 
-     {
 
-       "name": "add",
 
-       "passes": [
 
-         {
 
-           "rasterizerState": {
 
-             "cullMode": 0
 
-           },
 
-           "blendState": {
 
-             "targets": [
 
-               {
 
-                 "blend": true,
 
-                 "blendSrc": 770,
 
-                 "blendDst": 1,
 
-                 "blendSrcAlpha": 770,
 
-                 "blendDstAlpha": 1
 
-               }
 
-             ]
 
-           },
 
-           "depthStencilState": {
 
-             "depthTest": true,
 
-             "depthWrite": false
 
-           },
 
-           "properties": {
 
-             "mainTexture": {
 
-               "value": "grey",
 
-               "type": 29
 
-             },
 
-             "mainTiling_Offset": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             },
 
-             "frameTile_velLenScale": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             },
 
-             "tintColor": {
 
-               "value": [
 
-                 0.5,
 
-                 0.5,
 
-                 0.5,
 
-                 0.5
 
-               ],
 
-               "inspector": {
 
-                 "type": "color"
 
-               },
 
-               "type": 16
 
-             }
 
-           },
 
-           "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add"
 
-         }
 
-       ]
 
-     },
 
-     {
 
-       "name": "alpha-blend",
 
-       "passes": [
 
-         {
 
-           "rasterizerState": {
 
-             "cullMode": 0
 
-           },
 
-           "blendState": {
 
-             "targets": [
 
-               {
 
-                 "blend": true,
 
-                 "blendSrc": 1,
 
-                 "blendDst": 771,
 
-                 "blendSrcAlpha": 1,
 
-                 "blendDstAlpha": 771
 
-               }
 
-             ]
 
-           },
 
-           "depthStencilState": {
 
-             "depthTest": true,
 
-             "depthWrite": false
 
-           },
 
-           "properties": {
 
-             "mainTexture": {
 
-               "value": "grey",
 
-               "type": 29
 
-             },
 
-             "mainTiling_Offset": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             },
 
-             "frameTile_velLenScale": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             },
 
-             "tintColor": {
 
-               "value": [
 
-                 0.5,
 
-                 0.5,
 
-                 0.5,
 
-                 0.5
 
-               ],
 
-               "inspector": {
 
-                 "type": "color"
 
-               },
 
-               "type": 16
 
-             }
 
-           },
 
-           "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add"
 
-         }
 
-       ]
 
-     },
 
-     {
 
-       "name": "add-multiply",
 
-       "passes": [
 
-         {
 
-           "rasterizerState": {
 
-             "cullMode": 0
 
-           },
 
-           "blendState": {
 
-             "targets": [
 
-               {
 
-                 "blend": true,
 
-                 "blendSrc": 1,
 
-                 "blendDst": 771,
 
-                 "blendSrcAlpha": 1,
 
-                 "blendDstAlpha": 771
 
-               }
 
-             ]
 
-           },
 
-           "depthStencilState": {
 
-             "depthTest": true,
 
-             "depthWrite": false
 
-           },
 
-           "properties": {
 
-             "mainTexture": {
 
-               "value": "grey",
 
-               "type": 29
 
-             },
 
-             "mainTiling_Offset": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             },
 
-             "frameTile_velLenScale": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             },
 
-             "tintColor": {
 
-               "value": [
 
-                 0.5,
 
-                 0.5,
 
-                 0.5,
 
-                 0.5
 
-               ],
 
-               "inspector": {
 
-                 "type": "color"
 
-               },
 
-               "type": 16
 
-             }
 
-           },
 
-           "program": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:multiply"
 
-         }
 
-       ]
 
-     },
 
-     {
 
-       "name": "add-smooth",
 
-       "passes": [
 
-         {
 
-           "rasterizerState": {
 
-             "cullMode": 0
 
-           },
 
-           "blendState": {
 
-             "targets": [
 
-               {
 
-                 "blend": true,
 
-                 "blendSrc": 1,
 
-                 "blendDst": 771,
 
-                 "blendSrcAlpha": 1,
 
-                 "blendDstAlpha": 771
 
-               }
 
-             ]
 
-           },
 
-           "depthStencilState": {
 
-             "depthTest": true,
 
-             "depthWrite": false
 
-           },
 
-           "properties": {
 
-             "mainTexture": {
 
-               "value": "grey",
 
-               "type": 29
 
-             },
 
-             "mainTiling_Offset": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             },
 
-             "frameTile_velLenScale": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             }
 
-           },
 
-           "program": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:addSmooth"
 
-         }
 
-       ]
 
-     },
 
-     {
 
-       "name": "premultiply-blend",
 
-       "passes": [
 
-         {
 
-           "rasterizerState": {
 
-             "cullMode": 0
 
-           },
 
-           "blendState": {
 
-             "targets": [
 
-               {
 
-                 "blend": true,
 
-                 "blendSrc": 1,
 
-                 "blendDst": 771,
 
-                 "blendSrcAlpha": 1,
 
-                 "blendDstAlpha": 771
 
-               }
 
-             ]
 
-           },
 
-           "depthStencilState": {
 
-             "depthTest": true,
 
-             "depthWrite": false
 
-           },
 
-           "properties": {
 
-             "mainTexture": {
 
-               "value": "grey",
 
-               "type": 29
 
-             },
 
-             "mainTiling_Offset": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             },
 
-             "frameTile_velLenScale": {
 
-               "value": [
 
-                 1,
 
-                 1,
 
-                 0,
 
-                 0
 
-               ],
 
-               "type": 16
 
-             }
 
-           },
 
-           "program": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:premultiplied"
 
-         }
 
-       ]
 
-     }
 
-   ],
 
-   "shaders": [
 
-     {
 
-       "hash": 2929688198,
 
-       "glsl3": {
 
-         "vert": "\nprecision mediump float;\nuniform Constants{\n    vec4 mainTiling_Offset;\n    vec4 frameTile_velLenScale;\n    vec4 scale;\n};\nuniform CCGlobal {\n  mat4 cc_matView;\n  mat4 cc_matViewInv;\n  mat4 cc_matProj;\n  mat4 cc_matProjInv;\n  mat4 cc_matViewProj;\n  mat4 cc_matViewProjInv;\n  vec4 cc_cameraPos;\n  vec4 cc_time;\n  mediump vec4 cc_screenSize;\n  mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n  mat4 cc_matWorld;\n  mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n    out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n    highp vec4 pos = vec4(a_position, 1);\n    vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n    pos = cc_matWorld * pos;\n    velocity = cc_matWorld * velocity;\n#endif\n    float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n    vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n    pos.xyz += camUp * vertOffset;\n    pos = cc_matViewProj * pos;\n    uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n    color = a_color;\n#if CC_DRAW_WIRE_FRAME\n    vBarycentric = a_texCoord2;\n#endif\n    return pos;\n}\nvoid main() { gl_Position = vs_main(); }",
 
-         "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n  #if OUTPUT_TO_GAMMA\n    color.rgb = sqrt(color.rgb);\n  #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\n#if CC_DRAW_WIRE_FRAME\n  in vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform FragConstants {\n  vec4 tintColor;\n};\nvec4 add () {\n  vec4 col = 2.0 * color * tintColor * texture(mainTexture, uv);\n  #if CC_DRAW_WIRE_FRAME\n      if (any(lessThan(vBarycentric, vec3(0.02)))) {\n          col = vec4(0., 1., 1., 1.);\n      }\n  #endif\n  return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = add(); }"
 
-       },
 
-       "glsl1": {
 
-         "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n    varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n    highp vec4 pos = vec4(a_position, 1);\n    vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n    pos = cc_matWorld * pos;\n    velocity = cc_matWorld * velocity;\n#endif\n    float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n    vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n    pos.xyz += camUp * vertOffset;\n    pos = cc_matViewProj * pos;\n    uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n    color = a_color;\n#if CC_DRAW_WIRE_FRAME\n    vBarycentric = a_texCoord2;\n#endif\n    return pos;\n}\nvoid main() { gl_Position = vs_main(); }",
 
-         "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n  #if OUTPUT_TO_GAMMA\n    color.rgb = sqrt(color.rgb);\n  #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\n#if CC_DRAW_WIRE_FRAME\n  varying vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform vec4 tintColor;\nvec4 add () {\n  vec4 col = 2.0 * color * tintColor * texture2D(mainTexture, uv);\n  #if CC_DRAW_WIRE_FRAME\n      if (any(lessThan(vBarycentric, vec3(0.02)))) {\n          col = vec4(0., 1., 1., 1.);\n      }\n  #endif\n  return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = add(); }"
 
-       },
 
-       "builtins": {
 
-         "globals": {
 
-           "blocks": [
 
-             {
 
-               "name": "CCGlobal",
 
-               "defines": []
 
-             }
 
-           ],
 
-           "samplers": []
 
-         },
 
-         "locals": {
 
-           "blocks": [
 
-             {
 
-               "name": "CCLocal",
 
-               "defines": []
 
-             }
 
-           ],
 
-           "samplers": []
 
-         }
 
-       },
 
-       "defines": [
 
-         {
 
-           "name": "CC_DRAW_WIRE_FRAME",
 
-           "type": "boolean",
 
-           "defines": []
 
-         },
 
-         {
 
-           "name": "CC_USE_WORLD_SPACE",
 
-           "type": "boolean",
 
-           "defines": []
 
-         },
 
-         {
 
-           "name": "OUTPUT_TO_GAMMA",
 
-           "type": "boolean",
 
-           "defines": []
 
-         }
 
-       ],
 
-       "blocks": [
 
-         {
 
-           "name": "Constants",
 
-           "members": [
 
-             {
 
-               "name": "mainTiling_Offset",
 
-               "type": 16,
 
-               "count": 1
 
-             },
 
-             {
 
-               "name": "frameTile_velLenScale",
 
-               "type": 16,
 
-               "count": 1
 
-             },
 
-             {
 
-               "name": "scale",
 
-               "type": 16,
 
-               "count": 1
 
-             }
 
-           ],
 
-           "defines": [],
 
-           "binding": 0
 
-         },
 
-         {
 
-           "name": "FragConstants",
 
-           "members": [
 
-             {
 
-               "name": "tintColor",
 
-               "type": 16,
 
-               "count": 1
 
-             }
 
-           ],
 
-           "defines": [],
 
-           "binding": 1
 
-         }
 
-       ],
 
-       "samplers": [
 
-         {
 
-           "name": "mainTexture",
 
-           "type": 29,
 
-           "count": 1,
 
-           "defines": [],
 
-           "binding": 30
 
-         }
 
-       ],
 
-       "record": null,
 
-       "name": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:add"
 
-     },
 
-     {
 
-       "hash": 4224037318,
 
-       "glsl3": {
 
-         "vert": "\nprecision mediump float;\nuniform Constants{\n    vec4 mainTiling_Offset;\n    vec4 frameTile_velLenScale;\n    vec4 scale;\n};\nuniform CCGlobal {\n  mat4 cc_matView;\n  mat4 cc_matViewInv;\n  mat4 cc_matProj;\n  mat4 cc_matProjInv;\n  mat4 cc_matViewProj;\n  mat4 cc_matViewProjInv;\n  vec4 cc_cameraPos;\n  vec4 cc_time;\n  mediump vec4 cc_screenSize;\n  mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n  mat4 cc_matWorld;\n  mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n    out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n    highp vec4 pos = vec4(a_position, 1);\n    vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n    pos = cc_matWorld * pos;\n    velocity = cc_matWorld * velocity;\n#endif\n    float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n    vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n    pos.xyz += camUp * vertOffset;\n    pos = cc_matViewProj * pos;\n    uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n    color = a_color;\n#if CC_DRAW_WIRE_FRAME\n    vBarycentric = a_texCoord2;\n#endif\n    return pos;\n}\nvoid main() { gl_Position = vs_main(); }",
 
-         "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n  #if OUTPUT_TO_GAMMA\n    color.rgb = sqrt(color.rgb);\n  #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\n#if CC_DRAW_WIRE_FRAME\n  in vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform FragConstants {\n  vec4 tintColor;\n};\nvec4 multiply () {\n  vec4 col;\n  vec4 texColor = texture(mainTexture, uv);\n  col.rgb = tintColor.rgb * texColor.rgb * color.rgb * vec3(2.0);\n  col.a = (1.0 - texColor.a) * (tintColor.a * color.a * 2.0);\n  #if CC_DRAW_WIRE_FRAME\n      if (any(lessThan(vBarycentric, vec3(0.02)))) {\n          col = vec4(0., 1., 1., col.a);\n      }\n  #endif\n  return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = multiply(); }"
 
-       },
 
-       "glsl1": {
 
-         "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n    varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n    highp vec4 pos = vec4(a_position, 1);\n    vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n    pos = cc_matWorld * pos;\n    velocity = cc_matWorld * velocity;\n#endif\n    float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n    vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n    pos.xyz += camUp * vertOffset;\n    pos = cc_matViewProj * pos;\n    uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n    color = a_color;\n#if CC_DRAW_WIRE_FRAME\n    vBarycentric = a_texCoord2;\n#endif\n    return pos;\n}\nvoid main() { gl_Position = vs_main(); }",
 
-         "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n  #if OUTPUT_TO_GAMMA\n    color.rgb = sqrt(color.rgb);\n  #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\n#if CC_DRAW_WIRE_FRAME\n  varying vec3 vBarycentric;\n#endif\nuniform sampler2D mainTexture;\nuniform vec4 tintColor;\nvec4 multiply () {\n  vec4 col;\n  vec4 texColor = texture2D(mainTexture, uv);\n  col.rgb = tintColor.rgb * texColor.rgb * color.rgb * vec3(2.0);\n  col.a = (1.0 - texColor.a) * (tintColor.a * color.a * 2.0);\n  #if CC_DRAW_WIRE_FRAME\n      if (any(lessThan(vBarycentric, vec3(0.02)))) {\n          col = vec4(0., 1., 1., col.a);\n      }\n  #endif\n  return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = multiply(); }"
 
-       },
 
-       "builtins": {
 
-         "globals": {
 
-           "blocks": [
 
-             {
 
-               "name": "CCGlobal",
 
-               "defines": []
 
-             }
 
-           ],
 
-           "samplers": []
 
-         },
 
-         "locals": {
 
-           "blocks": [
 
-             {
 
-               "name": "CCLocal",
 
-               "defines": []
 
-             }
 
-           ],
 
-           "samplers": []
 
-         }
 
-       },
 
-       "defines": [
 
-         {
 
-           "name": "CC_DRAW_WIRE_FRAME",
 
-           "type": "boolean",
 
-           "defines": []
 
-         },
 
-         {
 
-           "name": "CC_USE_WORLD_SPACE",
 
-           "type": "boolean",
 
-           "defines": []
 
-         },
 
-         {
 
-           "name": "OUTPUT_TO_GAMMA",
 
-           "type": "boolean",
 
-           "defines": []
 
-         }
 
-       ],
 
-       "blocks": [
 
-         {
 
-           "name": "Constants",
 
-           "members": [
 
-             {
 
-               "name": "mainTiling_Offset",
 
-               "type": 16,
 
-               "count": 1
 
-             },
 
-             {
 
-               "name": "frameTile_velLenScale",
 
-               "type": 16,
 
-               "count": 1
 
-             },
 
-             {
 
-               "name": "scale",
 
-               "type": 16,
 
-               "count": 1
 
-             }
 
-           ],
 
-           "defines": [],
 
-           "binding": 0
 
-         },
 
-         {
 
-           "name": "FragConstants",
 
-           "members": [
 
-             {
 
-               "name": "tintColor",
 
-               "type": 16,
 
-               "count": 1
 
-             }
 
-           ],
 
-           "defines": [],
 
-           "binding": 1
 
-         }
 
-       ],
 
-       "samplers": [
 
-         {
 
-           "name": "mainTexture",
 
-           "type": 29,
 
-           "count": 1,
 
-           "defines": [],
 
-           "binding": 30
 
-         }
 
-       ],
 
-       "record": null,
 
-       "name": "builtin-3d-trail|particle-trail:vs_main|tinted-fs:multiply"
 
-     },
 
-     {
 
-       "hash": 1704877102,
 
-       "glsl3": {
 
-         "vert": "\nprecision mediump float;\nuniform Constants{\n    vec4 mainTiling_Offset;\n    vec4 frameTile_velLenScale;\n    vec4 scale;\n};\nuniform CCGlobal {\n  mat4 cc_matView;\n  mat4 cc_matViewInv;\n  mat4 cc_matProj;\n  mat4 cc_matProjInv;\n  mat4 cc_matViewProj;\n  mat4 cc_matViewProjInv;\n  vec4 cc_cameraPos;\n  vec4 cc_time;\n  mediump vec4 cc_screenSize;\n  mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n  mat4 cc_matWorld;\n  mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n    out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n    highp vec4 pos = vec4(a_position, 1);\n    vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n    pos = cc_matWorld * pos;\n    velocity = cc_matWorld * velocity;\n#endif\n    float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n    vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n    pos.xyz += camUp * vertOffset;\n    pos = cc_matViewProj * pos;\n    uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n    color = a_color;\n#if CC_DRAW_WIRE_FRAME\n    vBarycentric = a_texCoord2;\n#endif\n    return pos;\n}\nvoid main() { gl_Position = vs_main(); }",
 
-         "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n  #if OUTPUT_TO_GAMMA\n    color.rgb = sqrt(color.rgb);\n  #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\nuniform sampler2D mainTexture;\nvec4 addSmooth () {\n  vec4 col = color * texture(mainTexture, uv);\n  col.rgb *= col.a;\n  return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = addSmooth(); }"
 
-       },
 
-       "glsl1": {
 
-         "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n    varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n    highp vec4 pos = vec4(a_position, 1);\n    vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n    pos = cc_matWorld * pos;\n    velocity = cc_matWorld * velocity;\n#endif\n    float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n    vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n    pos.xyz += camUp * vertOffset;\n    pos = cc_matViewProj * pos;\n    uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n    color = a_color;\n#if CC_DRAW_WIRE_FRAME\n    vBarycentric = a_texCoord2;\n#endif\n    return pos;\n}\nvoid main() { gl_Position = vs_main(); }",
 
-         "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n  #if OUTPUT_TO_GAMMA\n    color.rgb = sqrt(color.rgb);\n  #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\nuniform sampler2D mainTexture;\nvec4 addSmooth () {\n  vec4 col = color * texture2D(mainTexture, uv);\n  col.rgb *= col.a;\n  return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = addSmooth(); }"
 
-       },
 
-       "builtins": {
 
-         "globals": {
 
-           "blocks": [
 
-             {
 
-               "name": "CCGlobal",
 
-               "defines": []
 
-             }
 
-           ],
 
-           "samplers": []
 
-         },
 
-         "locals": {
 
-           "blocks": [
 
-             {
 
-               "name": "CCLocal",
 
-               "defines": []
 
-             }
 
-           ],
 
-           "samplers": []
 
-         }
 
-       },
 
-       "defines": [
 
-         {
 
-           "name": "CC_DRAW_WIRE_FRAME",
 
-           "type": "boolean",
 
-           "defines": []
 
-         },
 
-         {
 
-           "name": "CC_USE_WORLD_SPACE",
 
-           "type": "boolean",
 
-           "defines": []
 
-         },
 
-         {
 
-           "name": "OUTPUT_TO_GAMMA",
 
-           "type": "boolean",
 
-           "defines": []
 
-         }
 
-       ],
 
-       "blocks": [
 
-         {
 
-           "name": "Constants",
 
-           "members": [
 
-             {
 
-               "name": "mainTiling_Offset",
 
-               "type": 16,
 
-               "count": 1
 
-             },
 
-             {
 
-               "name": "frameTile_velLenScale",
 
-               "type": 16,
 
-               "count": 1
 
-             },
 
-             {
 
-               "name": "scale",
 
-               "type": 16,
 
-               "count": 1
 
-             }
 
-           ],
 
-           "defines": [],
 
-           "binding": 0
 
-         }
 
-       ],
 
-       "samplers": [
 
-         {
 
-           "name": "mainTexture",
 
-           "type": 29,
 
-           "count": 1,
 
-           "defines": [],
 
-           "binding": 30
 
-         }
 
-       ],
 
-       "record": null,
 
-       "name": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:addSmooth"
 
-     },
 
-     {
 
-       "hash": 2717357054,
 
-       "glsl3": {
 
-         "vert": "\nprecision mediump float;\nuniform Constants{\n    vec4 mainTiling_Offset;\n    vec4 frameTile_velLenScale;\n    vec4 scale;\n};\nuniform CCGlobal {\n  mat4 cc_matView;\n  mat4 cc_matViewInv;\n  mat4 cc_matProj;\n  mat4 cc_matProjInv;\n  mat4 cc_matViewProj;\n  mat4 cc_matViewProjInv;\n  vec4 cc_cameraPos;\n  vec4 cc_time;\n  mediump vec4 cc_screenSize;\n  mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n  mat4 cc_matWorld;\n  mat4 cc_matWorldIT;\n};\nout vec2 uv;\nout vec4 color;\nin vec3 a_position;\nin vec4 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n    out vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n    highp vec4 pos = vec4(a_position, 1);\n    vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n    pos = cc_matWorld * pos;\n    velocity = cc_matWorld * velocity;\n#endif\n    float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n    vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n    pos.xyz += camUp * vertOffset;\n    pos = cc_matViewProj * pos;\n    uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n    color = a_color;\n#if CC_DRAW_WIRE_FRAME\n    vBarycentric = a_texCoord2;\n#endif\n    return pos;\n}\nvoid main() { gl_Position = vs_main(); }",
 
-         "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n  #if OUTPUT_TO_GAMMA\n    color.rgb = sqrt(color.rgb);\n  #endif\n\treturn color;\n}\nin vec2 uv;\nin vec4 color;\nuniform sampler2D mainTexture;\nvec4 premultiplied () {\n  vec4 col = color * texture(mainTexture, uv) * color.a;\n  return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = premultiplied(); }"
 
-       },
 
-       "glsl1": {
 
-         "vert": "\nprecision mediump float;\nuniform vec4 mainTiling_Offset;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nattribute vec3 a_position;\nattribute vec4 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_DRAW_WIRE_FRAME\n    varying vec3 vBarycentric;\n#endif\nvec4 vs_main() {\n    highp vec4 pos = vec4(a_position, 1);\n    vec4 velocity = vec4(a_texCoord1.xyz, 0);\n#if !CC_USE_WORLD_SPACE\n    pos = cc_matWorld * pos;\n    velocity = cc_matWorld * velocity;\n#endif\n    float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;\n    vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));\n    pos.xyz += camUp * vertOffset;\n    pos = cc_matViewProj * pos;\n    uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;\n    color = a_color;\n#if CC_DRAW_WIRE_FRAME\n    vBarycentric = a_texCoord2;\n#endif\n    return pos;\n}\nvoid main() { gl_Position = vs_main(); }",
 
-         "frag": "\nprecision mediump float;\nvec4 CCFragOutput (vec4 color) {\n  #if OUTPUT_TO_GAMMA\n    color.rgb = sqrt(color.rgb);\n  #endif\n\treturn color;\n}\nvarying vec2 uv;\nvarying vec4 color;\nuniform sampler2D mainTexture;\nvec4 premultiplied () {\n  vec4 col = color * texture2D(mainTexture, uv) * color.a;\n  return CCFragOutput(col);\n}\nvoid main() { gl_FragColor = premultiplied(); }"
 
-       },
 
-       "builtins": {
 
-         "globals": {
 
-           "blocks": [
 
-             {
 
-               "name": "CCGlobal",
 
-               "defines": []
 
-             }
 
-           ],
 
-           "samplers": []
 
-         },
 
-         "locals": {
 
-           "blocks": [
 
-             {
 
-               "name": "CCLocal",
 
-               "defines": []
 
-             }
 
-           ],
 
-           "samplers": []
 
-         }
 
-       },
 
-       "defines": [
 
-         {
 
-           "name": "CC_DRAW_WIRE_FRAME",
 
-           "type": "boolean",
 
-           "defines": []
 
-         },
 
-         {
 
-           "name": "CC_USE_WORLD_SPACE",
 
-           "type": "boolean",
 
-           "defines": []
 
-         },
 
-         {
 
-           "name": "OUTPUT_TO_GAMMA",
 
-           "type": "boolean",
 
-           "defines": []
 
-         }
 
-       ],
 
-       "blocks": [
 
-         {
 
-           "name": "Constants",
 
-           "members": [
 
-             {
 
-               "name": "mainTiling_Offset",
 
-               "type": 16,
 
-               "count": 1
 
-             },
 
-             {
 
-               "name": "frameTile_velLenScale",
 
-               "type": 16,
 
-               "count": 1
 
-             },
 
-             {
 
-               "name": "scale",
 
-               "type": 16,
 
-               "count": 1
 
-             }
 
-           ],
 
-           "defines": [],
 
-           "binding": 0
 
-         }
 
-       ],
 
-       "samplers": [
 
-         {
 
-           "name": "mainTexture",
 
-           "type": 29,
 
-           "count": 1,
 
-           "defines": [],
 
-           "binding": 30
 
-         }
 
-       ],
 
-       "record": null,
 
-       "name": "builtin-3d-trail|particle-trail:vs_main|no-tint-fs:premultiplied"
 
-     }
 
-   ]
 
- }
 
 
  |