[1,["67ag/8YWlP8JkzmTDtj/Ql","d0lDWvJZBGgJ/CsmJfszjV","ccDibaBNhO5J5U9+X/hZPE","8fUX2OoVNP8JRS9TGVNceG","5cTv/S/sZLu6T956CTH4Uq","9aRrwrRaBNQKyd6oUi/otO","c0jYDfK+RPEIOMjLA4SwB8","9aEJi9dkBMtZSssc2BmDb6","21+TUKAFxLEbU8shMUhumn","04w34WljRKkY11cJ8Y1wlY@c6ffc","77n+yI371GMZr6k15nCNIA","04w34WljRKkY11cJ8Y1wlY@f4bc1","bbkEfdTyZM0b+WBnd86gll","04w34WljRKkY11cJ8Y1wlY@07989","58M2fHH8VJRYUmgISoLNxq","04w34WljRKkY11cJ8Y1wlY@fb6a0","ceeaB+FxhLMLYhBU/vgzLr","04w34WljRKkY11cJ8Y1wlY@9ea6c","04w34WljRKkY11cJ8Y1wlY@49e25","04w34WljRKkY11cJ8Y1wlY@888aa","67WPnP2zhOoZ4kzLLiju4v","04w34WljRKkY11cJ8Y1wlY@10257","04w34WljRKkY11cJ8Y1wlY@2ef26","edn2GHPKRH4p/GE0ZTm7RR","04w34WljRKkY11cJ8Y1wlY@0938d","04w34WljRKkY11cJ8Y1wlY@1d23e","04w34WljRKkY11cJ8Y1wlY@a6163","fapzLH+CBMmJEnxCHfEK3F","04w34WljRKkY11cJ8Y1wlY@2db4e","04w34WljRKkY11cJ8Y1wlY@fbc5f","04w34WljRKkY11cJ8Y1wlY@bab3c","04w34WljRKkY11cJ8Y1wlY@aec0a","55pBqh6pFOfonUFL1/TDGt","04w34WljRKkY11cJ8Y1wlY@153d5","c7IQ9rY71FVpiCCsqd1WpX","04w34WljRKkY11cJ8Y1wlY@99905","04w34WljRKkY11cJ8Y1wlY@c1251","04w34WljRKkY11cJ8Y1wlY@fc72b","04w34WljRKkY11cJ8Y1wlY@6611d","04w34WljRKkY11cJ8Y1wlY@82a40","04w34WljRKkY11cJ8Y1wlY@31115","04w34WljRKkY11cJ8Y1wlY@63f9f","04w34WljRKkY11cJ8Y1wlY@ec08b","04w34WljRKkY11cJ8Y1wlY@0a20a","04w34WljRKkY11cJ8Y1wlY@68165","04w34WljRKkY11cJ8Y1wlY@cf72f","5dhceCzt1D4ZqAQ+j4NjC8","04w34WljRKkY11cJ8Y1wlY@6caa7","47QG/najNI77dNv6ASeQML","04w34WljRKkY11cJ8Y1wlY@7353f","52TKaBh5NN4YwE9fXQRonL","04w34WljRKkY11cJ8Y1wlY@ca11c","930YLuhG9DPryc9A1r6oNh","04w34WljRKkY11cJ8Y1wlY@bdfac","62Uie04NhH7LpbaRZMsP49","04w34WljRKkY11cJ8Y1wlY@2cbba","5fQ2Mb/OpK3qOAO4cRWA12","04w34WljRKkY11cJ8Y1wlY@fb6f6","b5UOshVBJL4KtT5YXbnUjT","04w34WljRKkY11cJ8Y1wlY@be9f3","9djHyRpMBMAYHudgginy9d","04w34WljRKkY11cJ8Y1wlY@4bf55","18/StUdHBMEKQFZ32FIQOG","04w34WljRKkY11cJ8Y1wlY@81afa","5awKe/8RdGqqf2/cZjem3K","04w34WljRKkY11cJ8Y1wlY@16cea","04w34WljRKkY11cJ8Y1wlY@72b19","04w34WljRKkY11cJ8Y1wlY@51c81","04w34WljRKkY11cJ8Y1wlY@7c4d9","a4DmdUPddJer91O2OjE7w/","04w34WljRKkY11cJ8Y1wlY@dbcb5","04w34WljRKkY11cJ8Y1wlY@7adeb","04w34WljRKkY11cJ8Y1wlY@c8b87","36NA95r+1D7K81Sh+XaAVw","04w34WljRKkY11cJ8Y1wlY@35969","04w34WljRKkY11cJ8Y1wlY@1bb3f","97aQQtRD9HEKlYMGmenjhS","04w34WljRKkY11cJ8Y1wlY@1cba3","cdzvFoEPZJfLrMBndTsGck","12Y9dMgWdJKJGmTiZyQR9H@2e76e","09ByGExB1AKID1ik57IqN2","2evrPU/p1N8qd+O/cRVFJ4","feXk8Hf1BFXKkhGsxLjuAo@2feb1","ceDrNTaZNKyra9xeiz1c0b@6c48a","a3zQCfCrBCDZJ4uf2rk5u8","04+fBkmIZCqLhWSvDz40Iq@6c48a","ccButUMDtJeYqwpMqxDxFs"],["node","_mesh","root","_parent","_effectAsset","data","asset","_defaultClip","mainTexture","causticTexture"],[["cc.Node",["_name","_objFlags","__editorExtras__","_prefab","_lpos","_parent","_components","_lrot","_euler","_children","_lscale"],0,4,5,1,9,5,5,2,5],["cc.Node",["_name","_parent","_prefab","_children","_components","_lrot","_euler"],2,1,4,12,12,5,5],["cc.MeshRenderer",["_name","node","__prefab","_materials","bakeSettings","_mesh"],2,1,4,3,4,6],["cc.Prefab",["_name"],2],["179ddFAIx5KmbAUOFsg4Fb6",["node","__prefab"],3,1,4],["cc.CompPrefabInfo",["fileId"],2],["242eeUeDAdHGYQE+LdhABfI",["node","__prefab"],3,1,4],["cc.PrefabInfo",["fileId","instance","targetOverrides","root","asset","nestedPrefabInstanceRoots"],0,1,1,2],["cc.PrefabInfo",["fileId","instance","targetOverrides","nestedPrefabInstanceRoots","root","asset"],-1,1,1],["cc.PrefabInfo",["fileId","targetOverrides","nestedPrefabInstanceRoots","root","instance","asset"],0,1,4,6],["cc.TargetInfo",["localID"],2],["cc.PrefabInstance",["fileId","prefabRootNode","mountedComponents","propertyOverrides"],2,1,9,9],["cc.MountedComponentsInfo",["targetInfo","components"],3,4,2],["CCPropertyOverrideInfo",["value","propertyPath","targetInfo"],1,1],["CCPropertyOverrideInfo",["propertyPath","targetInfo","value"],2,1,8],["cc.ModelBakeSettings",[],3],["cc.MeshCollider",["node","__prefab"],3,1,4],["cc.Animation",["playOnLoad","__prefab","_clips"],2,4,3],["cc.Material",["_name","_states","_defines","_props"],0,12],["cc.EffectAsset",["_name","shaders","techniques"],0]],[[5,0,2],[8,0,1,2,3,4,5,5],[15,1],[2,1,2,3,4,5,1],[0,0,5,6,3,4,7,8,2],[16,0,1,1],[14,0,1,2,2],[10,0,2],[18,0,1,2,3,4],[3,0,2],[0,0,9,6,3,2],[0,0,9,3,4,7,8,2],[0,0,5,3,4,2],[0,1,2,5,3,3],[0,0,5,6,3,4,7,10,8,2],[1,0,1,3,2,2],[1,0,1,4,2,5,6,2],[4,0,1,1],[6,0,1,1],[7,0,1,2,3,4,5,4],[9,0,1,2,3,4,5,4],[11,0,1,2,3,2],[12,0,1,1],[13,0,1,2,3],[2,0,1,2,3,4,5,2],[17,0,1,2,2],[19,0,1,2,4]],[[[[9,"Map"],[10,"Map",[-5],[[17,-3,[0,"c9Hjm8/zNISaqEFYM2aPwY"]],[18,-4,[0,"a1kxDNcmdOXqoT15G0poWP"]]],[19,"f1qVEFxHVN+qfof4vePU4O",null,null,-2,0,[-1]]],[11,"terrain",[-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-35,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-48,-49,-50,-51,-52,-53],[1,"491Yr0DLxHJ6E2BFb2fUw2",null,null,null,1,0],[1,-0.97,-4.5,-84.959],[3,-0.7071068407911907,0,0,0.7071067215818994],[1,-90.0000096593463,0,0]],[7,["95OdTfV0RZ8Ld6rxqbikMH"]],[15,"map",1,[[2,[12,"build",-54,[1,"b7thU1L+RND5LfD402Gj5c",null,null,null,1,0],[1,-49.771,-4.5,-104.743]],-55],1,4,1],[1,"b3pBXUwpZOt6sP0tAycjhw",null,null,null,1,0]],[13,0,{},4,[20,"95OdTfV0RZ8Ld6rxqbikMH",null,null,-57,[21,"0aMZ8OGNpMIJmYdrmfTEZt",1,[[22,[7,["b69MH/ybhYQZKs+nJ1Gv9Z"]],[-56]]],[[23,"circle",["_name"],3],[6,["_lpos"],3,[1,8.528,0,15.281]],[6,["_lrot"],3,[3,0,0,0,1]],[6,["_euler"],3,[1,0,0,0]],[6,["_lscale"],3,[1,2000,1000,2000]]]],96]],[4,"builds",2,[[3,-58,[0,"31vxE4931K246caOyfqTHo"],[0],[2],1],[5,-59,[0,"71psy5PHJL3rzjFRys8ewl"]]],[1,"12NbtmfwNP2YcGs347XlNj",null,null,null,1,0],[1,84.3179931640625,-400.7731628417969,15.438491821289062],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.003",2,[[3,-60,[0,"eel7aFNztIupBEZcjBj4uj"],[2],[2],3],[5,-61,[0,"74hlpzGoRCHKvl0eXaviuL"]]],[1,"febPBfMgFIr6r27lRUqZpX",null,null,null,1,0],[1,73.31974792480469,-357.0320739746094,11.040817260742188],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.004",2,[[3,-62,[0,"72YwG7ZV1PwJJYrMYICW8X"],[4],[2],5],[5,-63,[0,"cb+B0OZZ5CSo4lO8st++IL"]]],[1,"afL82FikBOiql0/RxHOMiv",null,null,null,1,0],[1,71.47970581054688,-342.54022216796875,11.195205688476562],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.005",2,[[3,-64,[0,"53uikMrmpE64O7o9gqVqiT"],[6],[2],7],[5,-65,[0,"cb4M2Q39VBhrrDF8RD40cH"]]],[1,"f5cYjditdKJomgSOnfh+02",null,null,null,1,0],[1,71.68008422851562,-351.5260314941406,9.040817260742188],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.006",2,[[3,-66,[0,"daLN/uTslBxJ+Oc9Fm7kUO"],[8],[2],9],[5,-67,[0,"10N/dhhyRKzrp6iZe1DdqD"]]],[1,"6elbxalX1DbJX8QuVWRBX7",null,null,null,1,0],[1,79.11935424804688,-361.881591796875,12.2039794921875],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.008",2,[[3,-68,[0,"bfajChd4pJEoruPTPIEU3C"],[10],[2],11],[5,-69,[0,"97LG21zsNDsZkCsvFiti83"]]],[1,"a8anDqF7lEC7/NPCEXIhJP",null,null,null,1,0],[1,59.34819412231445,-300.1280517578125,12.547027587890625],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.009",2,[[3,-70,[0,"ecp5ML60lPXonUfefo1cN/"],[12],[2],13],[5,-71,[0,"43mxkDU8lL9rW5jGkfhT3E"]]],[1,"835OP7dK1FJIB0Uk7pMjv4",null,null,null,1,0],[1,47.682865142822266,-248.3169708251953,8.053909301757812],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.010",2,[[3,-72,[0,"e2+5UGdOtOVrjlbvrbaVe9"],[14],[2],15],[5,-73,[0,"4c7G0tsrdDW4XgZlCL56kn"]]],[1,"60fDDbUxFAsa/NjPD+SM2d",null,null,null,1,0],[1,48.285282135009766,-250.8259735107422,9.761444091796875],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.011",2,[[3,-74,[0,"efnvPZCl5G9bvmJ24M2MT5"],[16],[2],17],[5,-75,[0,"8fm5Zns95CRIU3iS1eOSgl"]]],[1,"4dFmU1JIRCsqBGxeMe53+q",null,null,null,1,0],[1,200.43988037109375,-310.7294921875,8.724014282226562],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.012",2,[[3,-76,[0,"8c3JOGQ2FFdJWEzq6foWMp"],[18],[2],19],[5,-77,[0,"ddydAhpGZO95658+w4FqCw"]]],[1,"d4HMRwXIZOJJLd99NH2b+f",null,null,null,1,0],[1,197.1148681640625,-313.7442321777344,10.548263549804688],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.013",2,[[3,-78,[0,"09vosdW8hGKLkPSF1K72Bw"],[20],[2],21],[5,-79,[0,"beQ+c83alKD4gBLWAywRlz"]]],[1,"33IViNTzpFaapJZ9Xg0Sjy",null,null,null,1,0],[1,-14.134063720703125,-375.1733093261719,11.743148803710938],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.014",2,[[3,-80,[0,"8fc5JrlRlBE5j+qBU3uf/s"],[22],[2],23],[5,-81,[0,"d4byM9MLdI8rJ+R95hpfd7"]]],[1,"56sGTin3BHAYLj8J5c1zEm",null,null,null,1,0],[1,-59.56560516357422,-359.5596618652344,7.1419525146484375],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.015",2,[[3,-82,[0,"a56yQh3zVJ0oS9i51BhB2F"],[24],[2],25],[5,-83,[0,"d1ZhJhgq5G4omUB43X5ZHq"]]],[1,"60w8EgSptD+Ks0HrtpoHZl",null,null,null,1,0],[1,-56.607154846191406,-360.86212158203125,9.314056396484375],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"road.010",2,[[3,-84,[0,"aa8Lvp1adOf5PRN56saqoF"],[26],[2],27],[5,-85,[0,"89RoYZtupKV7lgQTzOm5yL"]]],[1,"cfzYJTSwdAj44kw1jYUDiH",null,null,null,1,0],[1,-53.246604919433594,249.27301025390625,10.884796142578125],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"road.011",2,[[3,-86,[0,"ef/FrqvJZBwqGjHz9tc2aP"],[28],[2],29],[5,-87,[0,"dazI0PUHNLrpzJvaATAUb0"]]],[1,"f4GNZwyUtDp5ZHA3VOYAAu",null,null,null,1,0],[1,-223.39056396484375,-106.3486328125,10.4534912109375],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"road.012",2,[[3,-88,[0,"d80OfUzQtFv6LBfd6hk6ND"],[30],[2],31],[5,-89,[0,"ccOk4jv91NI6/U4X8VTK3j"]]],[1,"2aESxhIYtO3bgko39L1yhP",null,null,null,1,0],[1,322.9152526855469,-174.88943481445312,11.712509155273438],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"floor.005",2,[[3,-90,[0,"2aesN2OTRH3LywUFPAzd1R"],[32],[2],33],[5,-91,[0,"b1xiCgoyxPvJpfWy9OslP7"]]],[1,"9e9c/SGBNLJa5yrkLz0SkA",null,null,null,1,0],[1,-46.029876708984375,268.998046875,10.2783203125],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"floor",2,[[3,-92,[0,"74AXGiATRNXJ3V24SUw2rQ"],[34],[2],35],[5,-93,[0,"ea2/wfvHtNGaqDR/BE1cpa"]]],[1,"f8dngO0/hESZ+WsaLUTgf0",null,null,null,1,0],[1,121.68360900878906,-58.973846435546875,11.643234252929688],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"road.013",2,[[3,-94,[0,"06wbZ9iIxAT6RkFRPxPQWG"],[36],[2],37],[5,-95,[0,"0c4Z7SjoVC6ZphB+qPNf/8"]]],[1,"b3IWssbm5EV5utMYxTIUSE",null,null,null,1,0],[1,208.74911499023438,256.2783203125,11.471420288085938],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"road.014",2,[[3,-96,[0,"f4v3qwPKZLwYuE8Syx6sS7"],[38],[2],39],[5,-97,[0,"f9rocQ159I5bkK7YRHf+Cb"]]],[1,"1dpl9SNopD96ojfqNt08gI",null,null,null,1,0],[1,34.0158576965332,-50.53033447265625,12.90460205078125],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map.026",2,[[3,-98,[0,"1egpPzgqJCbI9O2G4w6MPx"],[40],[2],41],[5,-99,[0,"05Hu/XkW5BcK7t3YC+Yewy"]]],[1,"9f3VtsMBVNh69NckZA0mcX",null,null,null,1,0],[1,-15.28411865234375,274.4716796875,11.575042724609375],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map.019",2,[[3,-100,[0,"a9dLAwWJxJxa5zgS37Nzc0"],[42],[2],43],[5,-101,[0,"49a168UKVJk67JiqAL2WH6"]]],[1,"d8Uglka1NIU4aIE3DDVuIj",null,null,null,1,0],[1,44.5286750793457,-28.343873977661133,13.341751098632812],[3,-0.8915064136832225,-0.16708801315598343,0.07387624516888967,0.4145361391012982],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map.020",2,[[3,-102,[0,"94CN7hly1HkZLkzbZzdfCn"],[44],[2],45],[5,-103,[0,"e5s92NbTNLc65u33fDRTwK"]]],[1,"090e4dfzBExYakQdQkJebe",null,null,null,1,0],[1,-280.114501953125,-305.3103942871094,11.201339721679688],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map.021",2,[[3,-104,[0,"3a86s7/qpK0ZG9n7VcUPlC"],[46],[2],47],[5,-105,[0,"4efSZfGG5LoLjE2LPfDVLl"]]],[1,"84yXn8bJpMxZ/DA1atcjf3",null,null,null,1,0],[1,257.4018859863281,245.78704833984375,11.539947509765625],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map.022",2,[[3,-106,[0,"d88Efw4DxLc4h2EiNiSI9n"],[48],[2],49],[5,-107,[0,"a5w/T4p39LLYOJDeh75XzQ"]]],[1,"16QAEDLp5L16jwXTPYWNBP",null,null,null,1,0],[1,-22.133705139160156,-447.8172607421875,9.8515625],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map.023",2,[[3,-108,[0,"66GxN60kpPoLYCVkF31En2"],[50],[2],51],[5,-109,[0,"f5MHjaHzZFtb5Kh+T3Yb08"]]],[1,"1fD0JVyFlIWLEVWKdj04p9",null,null,null,1,0],[1,-246.37481689453125,-80.20138549804688,12.806930541992188],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map.024",2,[[3,-110,[0,"34PMAG7dtHO7wf3YAX//jw"],[52],[2],53],[5,-111,[0,"65YDTIeaNJHrPI16gixL7T"]]],[1,"89jrdCDbhE8LM5XJzbDQcj",null,null,null,1,0],[1,319.1047668457031,-358.1885070800781,11.432174682617188],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map.025",2,[[3,-112,[0,"5dklSkIjZIy4h99UezG12i"],[54],[2],55],[5,-113,[0,"95AEuMviJIWZIXP5qb0GgD"]]],[1,"e43PRUnQlHbLVWOMKAcwPn",null,null,null,1,0],[1,-241.28030395507812,260.7607421875,7.8596038818359375],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.016",2,[[3,-114,[0,"59l8r3aCpMM70PvzKDxwZB"],[56],[2],57],[5,-115,[0,"f2hN9OHv5PbJQ64UH7z4fI"]]],[1,"57qvT9bdFCir66VZgjh9KO",null,null,null,1,0],[1,80.87252807617188,-409.26446533203125,15.535537719726562],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.017",2,[[3,-116,[0,"adcXi+KTJHkZsdPT4SAVLY"],[58],[2],59],[5,-117,[0,"d7klHha1hMUYY3lFhfctQt"]]],[1,"d4/rFm0DJGu6UiNWgDWC14",null,null,null,1,0],[1,69.13485717773438,-342.0179748535156,11.074203491210938],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.018",2,[[3,-118,[0,"cfVRCcm+FJhaH11Ep9Rksw"],[60],[2],61],[5,-119,[0,"51kOGe8PtMCLsok9+KgDZF"]]],[1,"f7LsGoR3tCaZtn7xWIokok",null,null,null,1,0],[1,73.40159606933594,-357.2532043457031,11.488388061523438],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.019",2,[[3,-120,[0,"eejvlHfmhN+rjhkf0WqrPU"],[62],[2],63],[5,-121,[0,"824iM/Pp5Meoc5hWlwT1D3"]]],[1,"a24BY7PXVGnZjvki8BPjRt",null,null,null,1,0],[1,71.56149291992188,-342.76123046875,11.642929077148438],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.020",2,[[3,-122,[0,"645fht0glOpqSe+rwPVPwI"],[64],[2],65],[5,-123,[0,"73iX6rcdNKVYSXd7/N/mTl"]]],[1,"15IG7iXT5M1phGaaq0jmSj",null,null,null,1,0],[1,71.76188659667969,-351.7470703125,9.488540649414062],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.021",2,[[3,-124,[0,"ccd5YG0VRKOrvGEyAYoGvV"],[66],[2],67],[5,-125,[0,"adBpNwXJtAv6kDO0TWeoXi"]]],[1,"f1QbtsaDhIZ7LpZTYaC2iE",null,null,null,1,0],[1,79.201171875,-362.1026916503906,12.651596069335938],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.022",2,[[3,-126,[0,"87GBUAeflEQKBcqKLO5o6W"],[68],[2],69],[5,-127,[0,"ffWJTW4yNDZZoYHQtYDiih"]]],[1,"c0c8UAk0pA55tfcbyI2Dr+",null,null,null,1,0],[1,74.91069030761719,-375.2351379394531,12.384689331054688],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.023",2,[[3,-128,[0,"f4vJHQN1ZO5Ya3s3+hmRUn"],[70],[2],71],[5,-129,[0,"7bXbYEz6tPYLpgBl7i62ic"]]],[1,"ffP46EPfxLzKy0K4+MJMgB",null,null,null,1,0],[1,82.17652893066406,-401.09649658203125,16.985870361328125],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.024",2,[[3,-130,[0,"d2j9MOVtBCV5GfeI4aMFee"],[72],[2],73],[5,-131,[0,"9b3m4BtOJPcr9fcLRebbYI"]]],[1,"a1pBA/i7ZH2LBQtdyf62Np",null,null,null,1,0],[1,84.39979553222656,-400.99420166015625,15.886215209960938],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.025",2,[[3,-132,[0,"08o76s+MtEyIFx+94YZttI"],[74],[2],75],[5,-133,[0,"88MqHClDlOCLvTEbG3LjCa"]]],[1,"aeih2jEsxDwLb2ujGpZCRs",null,null,null,1,0],[1,84.69197082519531,-407.0866394042969,16.025588989257812],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.026",2,[[3,-134,[0,"fcdAGMvvlNsKso5zpOcDTK"],[76],[2],77],[5,-135,[0,"03dbHQKhlHErt1YiQp4uan"]]],[1,"efZ7lwLLRAro/niyoA4J/5",null,null,null,1,0],[1,59.43000411987305,-300.34906005859375,12.994781494140625],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.027",2,[[3,-136,[0,"b4XKNxnMVFEauWkHDmN5DH"],[78],[2],79],[5,-137,[0,"6bXwvwmIBNUojD9/ZrbJZI"]]],[1,"06jEDnjqBFCoqZnH25lQMb",null,null,null,1,0],[1,47.76466751098633,-248.5380096435547,8.501602172851562],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.028",2,[[3,-138,[0,"0e6M78zipKa5vUc4etwuNv"],[80],[2],81],[5,-139,[0,"05te8W+ixK76T0D1hqukPH"]]],[1,"be31yPJGNK1Lr+Wi85KbOi",null,null,null,1,0],[1,200.52166748046875,-310.9505615234375,9.171829223632812],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.029",2,[[3,-140,[0,"b8LqGwQNtNeIUxpt3R/F4W"],[82],[2],83],[5,-141,[0,"67k8SokkpPXrdHRlPWHeri"]]],[1,"94K4qcvStKKLQ4FWsZ3U+6",null,null,null,1,0],[1,197.19668579101562,-313.96527099609375,10.995986938476562],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.030",2,[[3,-142,[0,"51Djel/v9CaJ0QyySBdbEr"],[84],[2],85],[5,-143,[0,"afE5NKru5KQ5GC+/Jt3t/Z"]]],[1,"33/5Ca2odPwaTw63QGd68j",null,null,null,1,0],[1,-14.052238464355469,-375.3943786621094,12.190887451171875],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.031",2,[[3,-144,[0,"89IhC6UFVPqbR6vqm1ElUI"],[86],[2],87],[5,-145,[0,"b3YFnNhxRDBqiDJ+fGPQVH"]]],[1,"ce/XpbJyNBBokb2GcyqKgO",null,null,null,1,0],[1,-59.483802795410156,-359.7806701660156,7.5895843505859375],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.032",2,[[3,-146,[0,"65actBq4NLYpg3kDU5Zln+"],[88],[2],89],[5,-147,[0,"fazq/pY5dBqq/34ZGzII/5"]]],[1,"2dtxupov5Ju6rbAawCvzX8",null,null,null,1,0],[1,-56.52533721923828,-361.08319091796875,9.76177978515625],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"map",2,[[3,-148,[0,"13yUxxlq1LkKh+IkYPwF3n"],[90],[2],91],[5,-149,[0,"63KB8X1FtBsoXYn/9Mn6jE"]]],[1,"f2MynouWFHt6gXJoVpIDjY",null,null,null,1,0],[1,314.9582214355469,-82.73656463623047,11.184327125549316],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[4,"builds.033",2,[[3,-150,[0,"14y52A9mRJDKjOi+drKpSg"],[92],[2],93],[5,-151,[0,"f2l5aWhBVJ9IpTQXlA1yUI"]]],[1,"32mbbgfR9IxZFtwB/3walQ",null,null,null,1,0],[1,63.953739166259766,-397.46282958984375,13.455084800720215],[3,0.8915064136832225,0.1670880131559834,-0.07387624516888969,-0.41453613910129833],[1,-130.0470356526297,-0.4178243631937634,21.04915904821327]],[14,"water",2,[[24,"Plane<ModelComponent>",-152,[0,"97GAP7CMRLMaZaVVsOospu"],[94],[2],95]],[1,"51WgMfK11BkY7y0w1MwTAR",null,null,null,1,0],[1,0,0,5.9],[3,0.7071067811865475,0,0,0.7071067811865476],[1,1000,1000,1000],[1,90,0,0]],[25,true,[0,"941HAbtfpOBax8KS1p+/jL"],[99]],[16,"Circle",5,[[[3,-153,[0,"d9/l+eOJtaB60jdwz6w4LR"],[97],[2],98],54],4,1],[1,"b69MH/ybhYQZKs+nJ1Gv9Z",null,null,null,1,0],[3,-0.7071068407911908,0,0,0.7071067215818992],[1,-90.00000965934633,0,0]]],0,[0,-1,5,0,2,1,0,0,1,0,0,1,0,-1,4,0,-1,6,0,-2,7,0,-3,8,0,-4,9,0,-5,10,0,-6,11,0,-7,12,0,-8,13,0,-9,14,0,-10,15,0,-11,16,0,-12,17,0,-13,18,0,-14,19,0,-15,20,0,-16,21,0,-17,22,0,-18,23,0,-19,24,0,-20,25,0,-21,26,0,-22,27,0,-23,28,0,-24,29,0,-25,30,0,-26,31,0,-27,32,0,-28,33,0,-29,34,0,-30,35,0,-31,36,0,-32,37,0,-33,38,0,-34,39,0,-35,40,0,-36,41,0,-37,42,0,-38,43,0,-39,44,0,-40,45,0,-41,46,0,-42,47,0,-43,48,0,-44,49,0,-45,50,0,-46,51,0,-47,52,0,-48,53,0,3,4,0,-3,5,0,-1,54,0,2,5,0,0,6,0,0,6,0,0,7,0,0,7,0,0,8,0,0,8,0,0,9,0,0,9,0,0,10,0,0,10,0,0,11,0,0,11,0,0,12,0,0,12,0,0,13,0,0,13,0,0,14,0,0,14,0,0,15,0,0,15,0,0,16,0,0,16,0,0,17,0,0,17,0,0,18,0,0,18,0,0,19,0,0,19,0,0,20,0,0,20,0,0,21,0,0,21,0,0,22,0,0,22,0,0,23,0,0,23,0,0,24,0,0,24,0,0,25,0,0,25,0,0,26,0,0,26,0,0,27,0,0,27,0,0,28,0,0,28,0,0,29,0,0,29,0,0,30,0,0,30,0,0,31,0,0,31,0,0,32,0,0,32,0,0,33,0,0,33,0,0,34,0,0,34,0,0,35,0,0,35,0,0,36,0,0,36,0,0,37,0,0,37,0,0,38,0,0,38,0,0,39,0,0,39,0,0,40,0,0,40,0,0,41,0,0,41,0,0,42,0,0,42,0,0,43,0,0,43,0,0,44,0,0,44,0,0,45,0,0,45,0,0,46,0,0,46,0,0,47,0,0,47,0,0,48,0,0,48,0,0,49,0,0,49,0,0,50,0,0,50,0,0,51,0,0,51,0,0,52,0,0,52,0,0,53,0,0,55,0,5,1,2,3,4,54,0,55,153],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54],[-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,6,-1,1,-1,7],[8,9,10,11,12,13,14,15,16,17,2,18,3,19,20,21,4,22,23,24,5,25,6,26,27,28,1,29,1,30,1,31,32,33,34,35,1,36,1,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,2,66,3,67,4,68,69,70,5,71,6,72,73,74,0,75,76,77,78,79,80,81,82,7,7]],[[[8,"mat_164.009-31",[{"rasterizerState":{},"depthStencilState":{},"blendState":{"targets":[{}]}}],[{"USE_INSTANCING":true,"USE_TEXTURE":true}],[[[{},"mainColor",8,[4,4293388263],"mainTexture",6,0]],11]]],0,0,[0,0],[8,4],[83,84]],[[[26,"../resources/project/game/fps/effect/water/mywater",[{"hash":4012744266,"name":"../resources/project/game/fps/effect/water/mywater|legacy/main-functions/general-vs:vert|unlit-fs:frag","blocks":[{"name":"Water","stageFlags":16,"binding":0,"members":[{"name":"shallowColor","type":16,"count":1},{"name":"causticParams1","type":16,"count":1},{"name":"causticParams2","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"causticTexture","type":28,"count":1,"stageFlags":16,"binding":1,"defines":["USE_CAUSTIC"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[],"attributes":[{"name":"a_position","format":32,"location":0,"defines":[]},{"name":"a_normal","format":32,"location":1,"defines":[]},{"name":"a_texCoord","format":21,"location":2,"defines":[]},{"name":"a_tangent","format":44,"location":3,"defines":[]},{"name":"a_joints","location":4,"defines":["CC_USE_SKINNING"]},{"name":"a_weights","format":44,"location":5,"defines":["CC_USE_SKINNING"]},{"name":"a_jointAnimInfo","format":44,"isInstanced":true,"location":6,"defines":["USE_INSTANCING","CC_USE_BAKED_ANIMATION"]},{"name":"a_matWorld0","format":44,"isInstanced":true,"location":7,"defines":["USE_INSTANCING"]},{"name":"a_matWorld1","format":44,"isInstanced":true,"location":8,"defines":["USE_INSTANCING"]},{"name":"a_matWorld2","format":44,"isInstanced":true,"location":9,"defines":["USE_INSTANCING"]},{"name":"a_lightingMapUVParam","format":44,"isInstanced":true,"location":10,"defines":["USE_INSTANCING","CC_USE_LIGHTMAP"]},{"name":"a_localShadowBiasAndProbeId","format":44,"isInstanced":true,"location":11,"defines":["USE_INSTANCING"]},{"name":"a_reflectionProbeData","format":44,"isInstanced":true,"location":12,"defines":["USE_INSTANCING","CC_USE_REFLECTION_PROBE"]},{"name":"a_sh_linear_const_r","format":44,"isInstanced":true,"location":13,"defines":["USE_INSTANCING","CC_USE_LIGHT_PROBE"]},{"name":"a_sh_linear_const_g","format":44,"isInstanced":true,"location":14,"defines":["USE_INSTANCING","CC_USE_LIGHT_PROBE"]},{"name":"a_sh_linear_const_b","format":44,"isInstanced":true,"location":15,"defines":["USE_INSTANCING","CC_USE_LIGHT_PROBE"]},{"name":"a_vertexId","format":11,"location":16,"defines":["CC_USE_MORPH"]},{"name":"a_color","format":44,"location":17,"defines":[]},{"name":"a_texCoord1","format":21,"location":18,"defines":["HAS_SECOND_UV"]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"descriptors":[{"rate":0,"blocks":[{"name":"CCMorph","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_displacementWeights","typename":"vec4","type":16,"count":15,"isArray":true},{"name":"cc_displacementTextureInfo","typename":"vec4","type":16,"count":1}],"defines":["CC_USE_MORPH"]},{"name":"CCSkinningTexture","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_jointTextureInfo","typename":"vec4","type":16,"count":1,"precision":"highp "}],"defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinningAnimation","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_jointAnimInfo","typename":"vec4","type":16,"count":1,"precision":"highp "}],"defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinning","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_joints","typename":"vec4","type":16,"count":0,"precision":"highp ","isArray":true}],"defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","!CC_USE_REAL_TIME_JOINT_TEXTURE"]},{"name":"CCLocal","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_matWorld","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matWorldIT","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_lightingMapUVParam","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_localShadowBias","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_reflectionProbeData1","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_reflectionProbeData2","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_reflectionProbeBlendData1","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_reflectionProbeBlendData2","typename":"vec4","type":16,"count":1,"precision":"highp "}],"defines":["!USE_INSTANCING"]}],"samplerTextures":[{"name":"cc_PositionDisplacements","typename":"sampler2D","type":28,"count":1,"stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_POSITION"]},{"name":"cc_NormalDisplacements","typename":"sampler2D","type":28,"count":1,"stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_NORMAL"]},{"name":"cc_TangentDisplacements","typename":"sampler2D","type":28,"count":1,"stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_TANGENT"]},{"name":"cc_jointTexture","typename":"sampler2D","type":28,"count":1,"precision":"highp ","stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"cc_realtimeJoint","typename":"sampler2D","type":28,"count":1,"precision":"highp ","stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","CC_USE_REAL_TIME_JOINT_TEXTURE"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":1,"blocks":[{"name":"Water","stageFlags":16,"binding":0,"members":[{"name":"shallowColor","type":16,"count":1},{"name":"causticParams1","type":16,"count":1},{"name":"causticParams2","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"causticTexture","type":28,"count":1,"stageFlags":16,"binding":1,"defines":["USE_CAUSTIC"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":2,"blocks":[],"samplerTextures":[],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":3,"blocks":[{"name":"CCGlobal","stageFlags":17,"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":17,"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":[]},{"name":"CCShadow","stageFlags":1,"tags":{"builtin":"global"},"members":[{"name":"cc_matLightView","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matLightViewProj","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_shadowInvProjDepthInfo","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_shadowProjDepthInfo","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_shadowProjInfo","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_shadowNFLSInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_shadowWHPBInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_shadowLPNNInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_shadowColor","typename":"vec4","type":16,"count":1,"precision":"lowp "},{"name":"cc_planarNDInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "}],"defines":[]},{"name":"CCCSM","stageFlags":1,"tags":{"builtin":"global"},"members":[{"name":"cc_csmViewDir0","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmViewDir1","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmViewDir2","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmAtlas","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_matCSMViewProj","typename":"mat4","type":25,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmProjDepthInfo","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmProjInfo","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmSplitsInfo","typename":"vec4","type":16,"count":1,"precision":"highp "}],"defines":["CC_SUPPORT_CASCADED_SHADOW_MAP"]}],"samplerTextures":[{"name":"cc_shadowMap","typename":"sampler2D","type":28,"count":1,"precision":"highp ","stageFlags":1,"tags":{"builtin":"global"},"defines":["CC_RECEIVE_SHADOW"]},{"name":"cc_spotShadowMap","typename":"sampler2D","type":28,"count":1,"precision":"highp ","stageFlags":1,"tags":{"builtin":"global"},"defines":["CC_RECEIVE_SHADOW"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]}],"glsl1":{"vert":"\nprecision highp float;\n#define QUATER_PI         0.78539816340\n#define HALF_PI           1.57079632679\n#define PI                3.14159265359\n#define PI2               6.28318530718\n#define PI4               12.5663706144\n#define INV_QUATER_PI     1.27323954474\n#define INV_HALF_PI       0.63661977237\n#define INV_PI            0.31830988618\n#define INV_PI2           0.15915494309\n#define INV_PI4           0.07957747155\n#define EPSILON           1e-6\n#define EPSILON_LOWP      1e-4\n#define LOG2              1.442695\n#define EXP_VALUE         2.71828183\n#define FP_MAX            65504.0\n#define FP_SCALE          0.0009765625\n#define FP_SCALE_INV      1024.0\n#define GRAY_VECTOR       vec3(0.299, 0.587, 0.114)\n#define LIGHT_MAP_TYPE_DISABLED 0\n#define LIGHT_MAP_TYPE_ALL_IN_ONE 1\n#define LIGHT_MAP_TYPE_INDIRECT_OCCLUSION 2\n#define REFLECTION_PROBE_TYPE_NONE 0\n#define REFLECTION_PROBE_TYPE_CUBE 1\n#define REFLECTION_PROBE_TYPE_PLANAR 2\n#define REFLECTION_PROBE_TYPE_BLEND 3\n#define REFLECTION_PROBE_TYPE_BLEND_AND_SKYBOX 4\n#define LIGHT_TYPE_DIRECTIONAL 0.0\n#define LIGHT_TYPE_SPHERE 1.0\n#define LIGHT_TYPE_SPOT 2.0\n#define LIGHT_TYPE_POINT 3.0\n#define LIGHT_TYPE_RANGED_DIRECTIONAL 4.0\n#define IS_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_DIRECTIONAL)) < EPSILON_LOWP)\n#define IS_SPHERE_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPHERE)) < EPSILON_LOWP)\n#define IS_SPOT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPOT)) < EPSILON_LOWP)\n#define IS_POINT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_POINT)) < EPSILON_LOWP)\n#define IS_RANGED_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_RANGED_DIRECTIONAL)) < EPSILON_LOWP)\n#define TONE_MAPPING_ACES 0\n#define TONE_MAPPING_LINEAR 1\n#define SURFACES_MAX_TRANSMIT_DEPTH_VALUE 999999.0\n#ifndef CC_SURFACES_DEBUG_VIEW_SINGLE\n  #define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#endif\n#ifndef CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n  #define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#endif\nstruct StandardVertInput {\n  highp vec4 position;\n  vec3 normal;\n  vec4 tangent;\n};\nattribute vec3 a_position;\nattribute vec3 a_normal;\nattribute vec2 a_texCoord;\nattribute vec4 a_tangent;\n#if CC_USE_SKINNING\n    attribute vec4 a_joints;\n  attribute vec4 a_weights;\n#endif\n#if USE_INSTANCING\n  #if CC_USE_BAKED_ANIMATION\n    attribute highp vec4 a_jointAnimInfo;\n  #endif\n  attribute vec4 a_matWorld0;\n  attribute vec4 a_matWorld1;\n  attribute vec4 a_matWorld2;\n  #if CC_USE_LIGHTMAP\n    attribute vec4 a_lightingMapUVParam;\n  #endif\n  #if CC_USE_REFLECTION_PROBE || CC_RECEIVE_SHADOW\n    #if CC_RECEIVE_SHADOW\n    #endif\n    attribute vec4 a_localShadowBiasAndProbeId;\n  #endif\n  #if CC_USE_REFLECTION_PROBE\n    attribute vec4 a_reflectionProbeData;\n  #endif\n  #if CC_USE_LIGHT_PROBE\n    attribute vec4 a_sh_linear_const_r;\n    attribute vec4 a_sh_linear_const_g;\n    attribute vec4 a_sh_linear_const_b;\n  #endif\n#endif\n#if CC_USE_MORPH\n    attribute float a_vertexId;\n    int getVertexId() {\n      return int(a_vertexId);\n    }\n#endif\nhighp float decode32 (highp vec4 rgba) {\n  rgba = rgba * 255.0;\n  highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0;\n  highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0;\n  highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0;\n  return Sign * exp2(Exponent - 23.0) * Mantissa;\n}\n#if CC_USE_MORPH\n  uniform vec4 cc_displacementWeights[15];\n  uniform vec4 cc_displacementTextureInfo;\n  #if CC_MORPH_TARGET_HAS_POSITION\n    uniform sampler2D cc_PositionDisplacements;\n  #endif\n  #if CC_MORPH_TARGET_HAS_NORMAL\n    uniform sampler2D cc_NormalDisplacements;\n  #endif\n  #if CC_MORPH_TARGET_HAS_TANGENT\n    uniform sampler2D cc_TangentDisplacements;\n  #endif\n  vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) {\n    float pixelIndexF = float(pixelIndex);\n    float x = mod(pixelIndexF, textureResolution.x);\n    float y = floor(pixelIndexF / textureResolution.x);\n    return vec2(x, y);\n  }\n  vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) {\n    return (vec2(location.x, location.y) + .5) / textureResolution;\n  }\n  #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n      vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n        int pixelIndex = elementIndex;\n        vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n        vec2 uv = getPixelCoordFromLocation(location, cc_displacementTextureInfo.xy);\n        return texture2D(tex, uv);\n      }\n  #else\n    vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n      int pixelIndex = elementIndex * 4;\n      vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n      vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy);\n      vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy);\n      vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy);\n      return vec4(\n        decode32(texture2D(tex, x)),\n        decode32(texture2D(tex, y)),\n        decode32(texture2D(tex, z)),\n        1.0\n      );\n    }\n  #endif\n  float getDisplacementWeight(int index) {\n    int quot = index / 4;\n    int remainder = index - quot * 4;\n    if (remainder == 0) {\n      return cc_displacementWeights[quot].x;\n    } else if (remainder == 1) {\n      return cc_displacementWeights[quot].y;\n    } else if (remainder == 2) {\n      return cc_displacementWeights[quot].z;\n    } else {\n      return cc_displacementWeights[quot].w;\n    }\n  }\n  vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) {\n  #if CC_MORPH_PRECOMPUTED\n    return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb;\n  #else\n    vec3 result = vec3(0, 0, 0);\n    int nVertices = int(cc_displacementTextureInfo.z);\n    for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) {\n      result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget));\n    }\n    return result;\n  #endif\n  }\n  #if CC_MORPH_TARGET_HAS_POSITION\n  vec3 getPositionDisplacement(int vertexId) {\n      return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId);\n  }\n  #endif\n  #if CC_MORPH_TARGET_HAS_NORMAL\n  vec3 getNormalDisplacement(int vertexId) {\n      return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId);\n  }\n  #endif\n  #if CC_MORPH_TARGET_HAS_TANGENT\n  vec3 getTangentDisplacement(int vertexId) {\n      return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId);\n  }\n  #endif\n  void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n    int vertexId = getVertexId();\n  #if CC_MORPH_TARGET_HAS_POSITION\n    position.xyz = position.xyz + getPositionDisplacement(vertexId);\n  #endif\n  #if CC_MORPH_TARGET_HAS_NORMAL\n    normal.xyz = normal.xyz + getNormalDisplacement(vertexId);\n  #endif\n  #if CC_MORPH_TARGET_HAS_TANGENT\n    tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId);\n  #endif\n  }\n  void applyMorph (inout vec4 position) {\n  #if CC_MORPH_TARGET_HAS_POSITION\n    position.xyz = position.xyz + getPositionDisplacement(getVertexId());\n  #endif\n  }\n#endif\n#if CC_USE_SKINNING\n  #if CC_USE_BAKED_ANIMATION\n    uniform highp vec4 cc_jointTextureInfo;\n    uniform highp vec4 cc_jointAnimInfo;\n    uniform highp sampler2D cc_jointTexture;\n    void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize)\n    {\n      #if USE_INSTANCING\n        highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z;\n      #else\n        highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z;\n      #endif\n      invSize = cc_jointTextureInfo.w;\n      highp float tempY = floor(temp * invSize);\n      x = floor(temp - tempY * cc_jointTextureInfo.x);\n      y = (tempY + 0.5) * invSize;\n    }\n  #else\n    #if CC_USE_REAL_TIME_JOINT_TEXTURE\n      uniform highp sampler2D cc_realtimeJoint;\n    #else\n      uniform highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n    #endif\n  #endif\n  #if CC_USE_BAKED_ANIMATION\n    #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n      mat4 getJointMatrix (float i) {\n        highp float x, y, invSize;\n        CCGetJointTextureCoords(3.0, i, x, y, invSize);\n        vec4 v1 = texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n        vec4 v2 = texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n        vec4 v3 = texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y));\n        return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n      }\n    #else\n      mat4 getJointMatrix (float i) {\n        highp float x, y, invSize;\n        CCGetJointTextureCoords(12.0, i, x, y, invSize);\n        vec4 v1 = vec4(\n          decode32(texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n        );\n        vec4 v2 = vec4(\n          decode32(texture2D(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n        );\n        vec4 v3 = vec4(\n          decode32(texture2D(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 11.5) * invSize, y)))\n        );\n        return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n      }\n    #endif\n  #else\n    #if CC_USE_REAL_TIME_JOINT_TEXTURE\n      #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n        mat4 getJointMatrix (float i) {\n          float x = i;\n          vec4 v1 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n          vec4 v2 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n          vec4 v3 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0));\n          return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n        }\n      #else\n        mat4 getJointMatrix (float i) {\n         float x = 4.0 * i;\n          vec4 v1 = vec4(\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n          );\n          vec4 v2 = vec4(\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n          );\n          vec4 v3 = vec4(\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0)))\n          );\n          return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n        }\n      #endif\n    #else\n      mat4 getJointMatrix (float i) {\n        int idx = int(i);\n        vec4 v1 = cc_joints[idx * 3];\n        vec4 v2 = cc_joints[idx * 3 + 1];\n        vec4 v3 = cc_joints[idx * 3 + 2];\n        return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n      }\n    #endif\n  #endif\n  mat4 skinMatrix () {\n    vec4 joints = vec4(a_joints);\n    return getJointMatrix(joints.x) * a_weights.x\n         + getJointMatrix(joints.y) * a_weights.y\n         + getJointMatrix(joints.z) * a_weights.z\n         + getJointMatrix(joints.w) * a_weights.w;\n  }\n  void CCSkin (inout vec4 position) {\n    mat4 m = skinMatrix();\n    position = m * position;\n  }\n  void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n    mat4 m = skinMatrix();\n    position = m * position;\n    normal = (m * vec4(normal, 0.0)).xyz;\n    tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz;\n  }\n#endif\nvoid CCVertInput(inout StandardVertInput In)\n{\n    In.position = vec4(a_position, 1.0);\n    In.normal = a_normal;\n    In.tangent = a_tangent;\n  #if CC_USE_MORPH\n    applyMorph(In.position, In.normal, In.tangent);\n  #endif\n  #if CC_USE_SKINNING\n    CCSkin(In.position, In.normal, In.tangent);\n  #endif\n}\nuniform highp mat4 cc_matView;\n  uniform highp mat4 cc_matProj;\n  uniform highp vec4 cc_cameraPos;\n  uniform mediump vec4 cc_fogBase;\n  uniform mediump vec4 cc_fogAdd;\n#if !USE_INSTANCING\n  uniform highp mat4 cc_matWorld;\n  uniform highp mat4 cc_matWorldIT;\n#endif\nvoid CCGetWorldMatrixFull(out mat4 matWorld, out mat4 matWorldIT)\n{\n  #if USE_INSTANCING\n    matWorld = mat4(\n      vec4(a_matWorld0.xyz, 0.0),\n      vec4(a_matWorld1.xyz, 0.0),\n      vec4(a_matWorld2.xyz, 0.0),\n      vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0)\n    );\n    vec3 scale = 1.0 / vec3(length(a_matWorld0.xyz), length(a_matWorld1.xyz), length(a_matWorld2.xyz));\n    vec3 scale2 = scale * scale;\n    matWorldIT = mat4(\n      vec4(a_matWorld0.xyz * scale2.x, 0.0),\n      vec4(a_matWorld1.xyz * scale2.y, 0.0),\n      vec4(a_matWorld2.xyz * scale2.z, 0.0),\n      vec4(0.0, 0.0, 0.0, 1.0)\n    );\n  #else\n    matWorld = cc_matWorld;\n    matWorldIT = cc_matWorldIT;\n  #endif\n}\n#if CC_USE_FOG != 4\n  float LinearFog(vec4 pos, vec3 cameraPos, float fogStart, float fogEnd) {\n      vec4 wPos = pos;\n      float cam_dis = distance(cameraPos, wPos.xyz);\n      return clamp((fogEnd - cam_dis) / (fogEnd - fogStart), 0., 1.);\n  }\n  float ExpFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n      vec4 wPos = pos;\n      float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n      float f = exp(-cam_dis * fogDensity);\n      return f;\n  }\n  float ExpSquaredFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n      vec4 wPos = pos;\n      float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n      float f = exp(-cam_dis * cam_dis * fogDensity * fogDensity);\n      return f;\n  }\n  float LayeredFog(vec4 pos, vec3 cameraPos, float fogTop, float fogRange, float fogAtten) {\n      vec4 wPos = pos;\n      vec3 camWorldProj = cameraPos.xyz;\n      camWorldProj.y = 0.;\n      vec3 worldPosProj = wPos.xyz;\n      worldPosProj.y = 0.;\n      float fDeltaD = distance(worldPosProj, camWorldProj) / fogAtten * 2.0;\n      float fDeltaY, fDensityIntegral;\n      if (cameraPos.y > fogTop) {\n          if (wPos.y < fogTop) {\n              fDeltaY = (fogTop - wPos.y) / fogRange * 2.0;\n              fDensityIntegral = fDeltaY * fDeltaY * 0.5;\n          }\n          else {\n              fDeltaY = 0.;\n              fDensityIntegral = 0.;\n          }\n      }\n      else {\n          if (wPos.y < fogTop) {\n              float fDeltaA = (fogTop - cameraPos.y) / fogRange * 2.;\n              float fDeltaB = (fogTop - wPos.y) / fogRange * 2.;\n              fDeltaY = abs(fDeltaA - fDeltaB);\n              fDensityIntegral = abs((fDeltaA * fDeltaA * 0.5) - (fDeltaB * fDeltaB * 0.5));\n          }\n          else {\n              fDeltaY = abs(fogTop - cameraPos.y) / fogRange * 2.;\n              fDensityIntegral = abs(fDeltaY * fDeltaY * 0.5);\n          }\n      }\n      float fDensity;\n      if (fDeltaY != 0.) {\n          fDensity = (sqrt(1.0 + ((fDeltaD / fDeltaY) * (fDeltaD / fDeltaY)))) * fDensityIntegral;\n      }\n      else {\n          fDensity = 0.;\n      }\n      float f = exp(-fDensity);\n      return f;\n  }\n#endif\nvoid CC_TRANSFER_FOG_BASE(vec4 pos, out float factor)\n{\n#if CC_USE_FOG == 0\n\tfactor = LinearFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.y);\n#elif CC_USE_FOG == 1\n\tfactor = ExpFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 2\n\tfactor = ExpSquaredFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 3\n\tfactor = LayeredFog(pos, cc_cameraPos.xyz, cc_fogAdd.x, cc_fogAdd.y, cc_fogAdd.z);\n#else\n\tfactor = 1.0;\n#endif\n}\n#if !CC_USE_ACCURATE_FOG\nvarying mediump float v_fog_factor;\n#endif\nvoid CC_TRANSFER_FOG(vec4 pos) {\n#if !CC_USE_ACCURATE_FOG\n    CC_TRANSFER_FOG_BASE(pos, v_fog_factor);\n#endif\n}\nvarying highp vec4 v_shadowPos;\nuniform highp mat4 cc_matLightViewProj;\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n  #endif\n#ifdef CC_USE_METAL\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\n#if CC_RECEIVE_SHADOW\n  uniform highp sampler2D cc_shadowMap;\n  uniform highp sampler2D cc_spotShadowMap;\n    #define UnpackBitFromFloat(value, bit) (mod(floor(value / pow(10.0, float(bit))), 10.0) > 0.0)\n  #if CC_SUPPORT_CASCADED_SHADOW_MAP\n  #else\n  #endif\n#endif\n#if CC_RECEIVE_SHADOW\n#endif\nattribute vec4 a_color;\n#if HAS_SECOND_UV\n  attribute vec2 a_texCoord1;\n#endif\nvarying vec3 v_position;\nvarying vec3 v_normal;\nvarying vec3 v_tangent;\nvarying vec3 v_bitangent;\nvarying vec2 v_uv;\nvarying vec2 v_uv1;\nvarying vec4 v_color;\nvec4 vert () {\n  StandardVertInput In;\n  CCVertInput(In);\n  mat4 matWorld, matWorldIT;\n  CCGetWorldMatrixFull(matWorld, matWorldIT);\n  vec4 pos = matWorld * In.position;\n  v_position = pos.xyz;\n  v_normal = normalize((matWorldIT * vec4(In.normal, 0.0)).xyz);\n  v_tangent = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz);\n  v_bitangent = cross(v_normal, v_tangent) * In.tangent.w;\n  v_uv = a_texCoord;\n  #if HAS_SECOND_UV\n    v_uv1 = a_texCoord1;\n  #endif\n  v_color = a_color;\n  CC_TRANSFER_FOG(pos);\n  v_shadowPos = cc_matLightViewProj * pos;\n  return cc_matProj * (cc_matView * matWorld) * In.position;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\n#define pi 3.14\n   uniform vec4 shallowColor;\n   uniform vec4 causticParams1;\n   uniform vec4 causticParams2;\nuniform highp vec4 cc_time;\nuniform highp vec4 cc_cameraPos;\n  uniform mediump vec4 cc_fogColor;\n  uniform mediump vec4 cc_fogBase;\n  uniform mediump vec4 cc_fogAdd;\nvec4 CCFragOutput (vec4 color) {\n  return color;\n}\n#if CC_USE_FOG != 4\n  float LinearFog(vec4 pos, vec3 cameraPos, float fogStart, float fogEnd) {\n      vec4 wPos = pos;\n      float cam_dis = distance(cameraPos, wPos.xyz);\n      return clamp((fogEnd - cam_dis) / (fogEnd - fogStart), 0., 1.);\n  }\n  float ExpFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n      vec4 wPos = pos;\n      float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n      float f = exp(-cam_dis * fogDensity);\n      return f;\n  }\n  float ExpSquaredFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n      vec4 wPos = pos;\n      float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n      float f = exp(-cam_dis * cam_dis * fogDensity * fogDensity);\n      return f;\n  }\n  float LayeredFog(vec4 pos, vec3 cameraPos, float fogTop, float fogRange, float fogAtten) {\n      vec4 wPos = pos;\n      vec3 camWorldProj = cameraPos.xyz;\n      camWorldProj.y = 0.;\n      vec3 worldPosProj = wPos.xyz;\n      worldPosProj.y = 0.;\n      float fDeltaD = distance(worldPosProj, camWorldProj) / fogAtten * 2.0;\n      float fDeltaY, fDensityIntegral;\n      if (cameraPos.y > fogTop) {\n          if (wPos.y < fogTop) {\n              fDeltaY = (fogTop - wPos.y) / fogRange * 2.0;\n              fDensityIntegral = fDeltaY * fDeltaY * 0.5;\n          }\n          else {\n              fDeltaY = 0.;\n              fDensityIntegral = 0.;\n          }\n      }\n      else {\n          if (wPos.y < fogTop) {\n              float fDeltaA = (fogTop - cameraPos.y) / fogRange * 2.;\n              float fDeltaB = (fogTop - wPos.y) / fogRange * 2.;\n              fDeltaY = abs(fDeltaA - fDeltaB);\n              fDensityIntegral = abs((fDeltaA * fDeltaA * 0.5) - (fDeltaB * fDeltaB * 0.5));\n          }\n          else {\n              fDeltaY = abs(fogTop - cameraPos.y) / fogRange * 2.;\n              fDensityIntegral = abs(fDeltaY * fDeltaY * 0.5);\n          }\n      }\n      float fDensity;\n      if (fDeltaY != 0.) {\n          fDensity = (sqrt(1.0 + ((fDeltaD / fDeltaY) * (fDeltaD / fDeltaY)))) * fDensityIntegral;\n      }\n      else {\n          fDensity = 0.;\n      }\n      float f = exp(-fDensity);\n      return f;\n  }\n#endif\nvoid CC_TRANSFER_FOG_BASE(vec4 pos, out float factor)\n{\n#if CC_USE_FOG == 0\n\tfactor = LinearFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.y);\n#elif CC_USE_FOG == 1\n\tfactor = ExpFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 2\n\tfactor = ExpSquaredFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 3\n\tfactor = LayeredFog(pos, cc_cameraPos.xyz, cc_fogAdd.x, cc_fogAdd.y, cc_fogAdd.z);\n#else\n\tfactor = 1.0;\n#endif\n}\nvoid CC_APPLY_FOG_BASE(inout vec4 color, float factor) {\n\tcolor = vec4(mix(cc_fogColor.rgb, color.rgb, factor), color.a);\n}\n#if !CC_USE_ACCURATE_FOG\nvarying mediump float v_fog_factor;\n#endif\nvoid CC_APPLY_FOG(inout vec4 color) {\n#if !CC_USE_ACCURATE_FOG\n    CC_APPLY_FOG_BASE(color, v_fog_factor);\n#endif\n}\nvoid CC_APPLY_FOG(inout vec4 color, vec3 worldPos) {\n#if CC_USE_ACCURATE_FOG\n    float factor;\n    CC_TRANSFER_FOG_BASE(vec4(worldPos, 1.0), factor);\n#else\n    float factor = v_fog_factor;\n#endif\n    CC_APPLY_FOG_BASE(color, factor);\n}\n#if USE_CAUSTIC\n  uniform sampler2D causticTexture;\n#endif\nvarying vec2 v_uv;\nvarying vec3 v_position;\n#if USE_CAUSTIC\nvec2 panner(vec2 uv, float direction, float speed, vec2 offset, float tiling)\n{\n    direction = direction * 2. - 1.;\n    vec2 dir = normalize(vec2(cos(pi * direction), sin(pi * direction)));\n    return  (dir * cc_time.x * speed) + offset + (uv * tiling);\n}\nvec3 rgbSplit(float split, sampler2D tex, vec2 uv)\n{\n    vec2 UVR = uv + vec2(split, split);\n    vec2 UVG = uv + vec2(split, -split);\n    vec2 UVB = uv + vec2(-split, -split);\n    float r = texture2D(tex, UVR).r;\n    float g = texture2D(tex, UVG).g;\n    float b = texture2D(tex, UVB).b;\n    return vec3(r,g,b);\n}\nvec3 caustic()\n{\n  vec2 uv = v_position.xz;\n  float strength = causticParams1.x;\n  float split = causticParams1.w * 0.01;\n  float speed = causticParams1.z;\n  float scale = causticParams1.y;\n  vec3 texture1 = rgbSplit(split, causticTexture, panner(uv, 1., speed, vec2(0., 0.), 1./scale));\n  vec3 texture2 = rgbSplit(split, causticTexture, panner(uv, 1., speed, vec2(0., 0.), -1./scale));\n  vec3 textureCombined = min(texture1, texture2);\n  return strength * 10. * textureCombined;\n}\n#endif\nvec4 frag () {\n  vec4 waterColor = shallowColor;\n  vec4 finalFoamColor = vec4(0., 0., 0., 0.);\n  vec4 finalCausticColor = vec4(0., 0., 0., 0.);\n  #if USE_CAUSTIC\n    float causticDepth = causticParams2.x;\n    vec3 causticColor = causticParams2.yzw;\n    finalCausticColor.rgb = caustic() * causticColor.rgb;\n  #endif\n  vec4 finalColor = waterColor + finalFoamColor + finalCausticColor;\n  CC_APPLY_FOG(finalColor, v_position);\n  return CCFragOutput(finalColor);\n}\nvoid main() { gl_FragColor = frag(); }"},"builtins":{"globals":{"blocks":[{"name":"CCGlobal","defines":[]},{"name":"CCCamera","defines":[]},{"name":"CCShadow","defines":[]},{"name":"CCCSM","defines":["CC_SUPPORT_CASCADED_SHADOW_MAP"]}],"samplerTextures":[{"name":"cc_shadowMap","defines":["CC_RECEIVE_SHADOW"]},{"name":"cc_spotShadowMap","defines":["CC_RECEIVE_SHADOW"]}],"buffers":[],"images":[]},"locals":{"blocks":[{"name":"CCMorph","defines":["CC_USE_MORPH"]},{"name":"CCSkinningTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinningAnimation","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinning","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","!CC_USE_REAL_TIME_JOINT_TEXTURE"]},{"name":"CCLocal","defines":["!USE_INSTANCING"]}],"samplerTextures":[{"name":"cc_PositionDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_POSITION"]},{"name":"cc_NormalDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_NORMAL"]},{"name":"cc_TangentDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_TANGENT"]},{"name":"cc_jointTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"cc_realtimeJoint","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","CC_USE_REAL_TIME_JOINT_TEXTURE"]}],"buffers":[],"images":[]},"statistics":{"CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS":131,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":45}},"defines":[{"name":"USE_INSTANCING","type":"boolean"},{"name":"CC_USE_SKINNING","type":"boolean"},{"name":"CC_USE_BAKED_ANIMATION","type":"boolean"},{"name":"CC_USE_LIGHTMAP","type":"boolean"},{"name":"CC_USE_REFLECTION_PROBE","type":"boolean"},{"name":"CC_RECEIVE_SHADOW","type":"boolean"},{"name":"CC_USE_LIGHT_PROBE","type":"boolean"},{"name":"CC_USE_MORPH","type":"boolean"},{"name":"CC_MORPH_TARGET_COUNT","type":"number","range":[2,8]},{"name":"CC_MORPH_TARGET_HAS_POSITION","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_NORMAL","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_TANGENT","type":"boolean"},{"name":"CC_MORPH_PRECOMPUTED","type":"boolean"},{"name":"CC_USE_REAL_TIME_JOINT_TEXTURE","type":"boolean"},{"name":"CC_USE_FOG","type":"number","range":[0,4]},{"name":"CC_USE_ACCURATE_FOG","type":"boolean"},{"name":"CC_SUPPORT_CASCADED_SHADOW_MAP","type":"boolean"},{"name":"HAS_SECOND_UV","type":"boolean"},{"name":"USE_CAUSTIC","type":"boolean"}]},{"hash":4012744266,"name":"../resources/project/game/fps/effect/water/mywater|general-vs:vert|unlit-fs:frag","blocks":[{"name":"Water","stageFlags":16,"binding":0,"members":[{"name":"shallowColor","type":16,"count":1},{"name":"causticParams1","type":16,"count":1},{"name":"causticParams2","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"causticTexture","type":28,"count":1,"stageFlags":16,"binding":1,"defines":["USE_CAUSTIC"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[],"attributes":[{"name":"a_position","format":32,"location":0,"defines":[]},{"name":"a_normal","format":32,"location":1,"defines":[]},{"name":"a_texCoord","format":21,"location":2,"defines":[]},{"name":"a_tangent","format":44,"location":3,"defines":[]},{"name":"a_joints","location":4,"defines":["CC_USE_SKINNING"]},{"name":"a_weights","format":44,"location":5,"defines":["CC_USE_SKINNING"]},{"name":"a_jointAnimInfo","format":44,"isInstanced":true,"location":6,"defines":["USE_INSTANCING","CC_USE_BAKED_ANIMATION"]},{"name":"a_matWorld0","format":44,"isInstanced":true,"location":7,"defines":["USE_INSTANCING"]},{"name":"a_matWorld1","format":44,"isInstanced":true,"location":8,"defines":["USE_INSTANCING"]},{"name":"a_matWorld2","format":44,"isInstanced":true,"location":9,"defines":["USE_INSTANCING"]},{"name":"a_lightingMapUVParam","format":44,"isInstanced":true,"location":10,"defines":["USE_INSTANCING","CC_USE_LIGHTMAP"]},{"name":"a_localShadowBiasAndProbeId","format":44,"isInstanced":true,"location":11,"defines":["USE_INSTANCING"]},{"name":"a_reflectionProbeData","format":44,"isInstanced":true,"location":12,"defines":["USE_INSTANCING","CC_USE_REFLECTION_PROBE"]},{"name":"a_sh_linear_const_r","format":44,"isInstanced":true,"location":13,"defines":["USE_INSTANCING","CC_USE_LIGHT_PROBE"]},{"name":"a_sh_linear_const_g","format":44,"isInstanced":true,"location":14,"defines":["USE_INSTANCING","CC_USE_LIGHT_PROBE"]},{"name":"a_sh_linear_const_b","format":44,"isInstanced":true,"location":15,"defines":["USE_INSTANCING","CC_USE_LIGHT_PROBE"]},{"name":"a_vertexId","format":11,"location":16,"defines":["CC_USE_MORPH"]},{"name":"a_color","format":44,"location":17,"defines":[]},{"name":"a_texCoord1","format":21,"location":18,"defines":["HAS_SECOND_UV"]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"descriptors":[{"rate":0,"blocks":[{"name":"CCMorph","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_displacementWeights","typename":"vec4","type":16,"count":15,"isArray":true},{"name":"cc_displacementTextureInfo","typename":"vec4","type":16,"count":1}],"defines":["CC_USE_MORPH"]},{"name":"CCSkinningTexture","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_jointTextureInfo","typename":"vec4","type":16,"count":1,"precision":"highp "}],"defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinningAnimation","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_jointAnimInfo","typename":"vec4","type":16,"count":1,"precision":"highp "}],"defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinning","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_joints","typename":"vec4","type":16,"count":0,"precision":"highp ","isArray":true}],"defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","!CC_USE_REAL_TIME_JOINT_TEXTURE"]},{"name":"CCLocal","stageFlags":1,"tags":{"builtin":"local"},"members":[{"name":"cc_matWorld","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matWorldIT","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_lightingMapUVParam","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_localShadowBias","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_reflectionProbeData1","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_reflectionProbeData2","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_reflectionProbeBlendData1","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_reflectionProbeBlendData2","typename":"vec4","type":16,"count":1,"precision":"highp "}],"defines":["!USE_INSTANCING"]}],"samplerTextures":[{"name":"cc_PositionDisplacements","typename":"sampler2D","type":28,"count":1,"stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_POSITION"]},{"name":"cc_NormalDisplacements","typename":"sampler2D","type":28,"count":1,"stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_NORMAL"]},{"name":"cc_TangentDisplacements","typename":"sampler2D","type":28,"count":1,"stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_TANGENT"]},{"name":"cc_jointTexture","typename":"sampler2D","type":28,"count":1,"precision":"highp ","stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"cc_realtimeJoint","typename":"sampler2D","type":28,"count":1,"precision":"highp ","stageFlags":1,"tags":{"builtin":"local"},"defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","CC_USE_REAL_TIME_JOINT_TEXTURE"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":1,"blocks":[{"name":"Water","stageFlags":16,"binding":0,"members":[{"name":"shallowColor","type":16,"count":1},{"name":"causticParams1","type":16,"count":1},{"name":"causticParams2","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"causticTexture","type":28,"count":1,"stageFlags":16,"binding":1,"defines":["USE_CAUSTIC"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":2,"blocks":[],"samplerTextures":[],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]},{"rate":3,"blocks":[{"name":"CCGlobal","stageFlags":17,"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":17,"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":[]},{"name":"CCShadow","stageFlags":1,"tags":{"builtin":"global"},"members":[{"name":"cc_matLightView","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_matLightViewProj","typename":"mat4","type":25,"count":1,"precision":"highp "},{"name":"cc_shadowInvProjDepthInfo","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_shadowProjDepthInfo","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_shadowProjInfo","typename":"vec4","type":16,"count":1,"precision":"highp "},{"name":"cc_shadowNFLSInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_shadowWHPBInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_shadowLPNNInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "},{"name":"cc_shadowColor","typename":"vec4","type":16,"count":1,"precision":"lowp "},{"name":"cc_planarNDInfo","typename":"vec4","type":16,"count":1,"precision":"mediump "}],"defines":[]},{"name":"CCCSM","stageFlags":1,"tags":{"builtin":"global"},"members":[{"name":"cc_csmViewDir0","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmViewDir1","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmViewDir2","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmAtlas","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_matCSMViewProj","typename":"mat4","type":25,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmProjDepthInfo","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmProjInfo","typename":"vec4","type":16,"count":4,"precision":"highp ","isArray":true},{"name":"cc_csmSplitsInfo","typename":"vec4","type":16,"count":1,"precision":"highp "}],"defines":["CC_SUPPORT_CASCADED_SHADOW_MAP"]}],"samplerTextures":[{"name":"cc_shadowMap","typename":"sampler2D","type":28,"count":1,"precision":"highp ","stageFlags":1,"tags":{"builtin":"global"},"defines":["CC_RECEIVE_SHADOW"]},{"name":"cc_spotShadowMap","typename":"sampler2D","type":28,"count":1,"precision":"highp ","stageFlags":1,"tags":{"builtin":"global"},"defines":["CC_RECEIVE_SHADOW"]}],"samplers":[],"textures":[],"buffers":[],"images":[],"subpassInputs":[]}],"glsl1":{"vert":"\nprecision highp float;\n#define QUATER_PI         0.78539816340\n#define HALF_PI           1.57079632679\n#define PI                3.14159265359\n#define PI2               6.28318530718\n#define PI4               12.5663706144\n#define INV_QUATER_PI     1.27323954474\n#define INV_HALF_PI       0.63661977237\n#define INV_PI            0.31830988618\n#define INV_PI2           0.15915494309\n#define INV_PI4           0.07957747155\n#define EPSILON           1e-6\n#define EPSILON_LOWP      1e-4\n#define LOG2              1.442695\n#define EXP_VALUE         2.71828183\n#define FP_MAX            65504.0\n#define FP_SCALE          0.0009765625\n#define FP_SCALE_INV      1024.0\n#define GRAY_VECTOR       vec3(0.299, 0.587, 0.114)\n#define LIGHT_MAP_TYPE_DISABLED 0\n#define LIGHT_MAP_TYPE_ALL_IN_ONE 1\n#define LIGHT_MAP_TYPE_INDIRECT_OCCLUSION 2\n#define REFLECTION_PROBE_TYPE_NONE 0\n#define REFLECTION_PROBE_TYPE_CUBE 1\n#define REFLECTION_PROBE_TYPE_PLANAR 2\n#define REFLECTION_PROBE_TYPE_BLEND 3\n#define REFLECTION_PROBE_TYPE_BLEND_AND_SKYBOX 4\n#define LIGHT_TYPE_DIRECTIONAL 0.0\n#define LIGHT_TYPE_SPHERE 1.0\n#define LIGHT_TYPE_SPOT 2.0\n#define LIGHT_TYPE_POINT 3.0\n#define LIGHT_TYPE_RANGED_DIRECTIONAL 4.0\n#define IS_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_DIRECTIONAL)) < EPSILON_LOWP)\n#define IS_SPHERE_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPHERE)) < EPSILON_LOWP)\n#define IS_SPOT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPOT)) < EPSILON_LOWP)\n#define IS_POINT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_POINT)) < EPSILON_LOWP)\n#define IS_RANGED_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_RANGED_DIRECTIONAL)) < EPSILON_LOWP)\n#define TONE_MAPPING_ACES 0\n#define TONE_MAPPING_LINEAR 1\n#define SURFACES_MAX_TRANSMIT_DEPTH_VALUE 999999.0\n#ifndef CC_SURFACES_DEBUG_VIEW_SINGLE\n  #define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#endif\n#ifndef CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n  #define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#endif\nstruct StandardVertInput {\n  highp vec4 position;\n  vec3 normal;\n  vec4 tangent;\n};\nattribute vec3 a_position;\nattribute vec3 a_normal;\nattribute vec2 a_texCoord;\nattribute vec4 a_tangent;\n#if CC_USE_SKINNING\n    attribute vec4 a_joints;\n  attribute vec4 a_weights;\n#endif\n#if USE_INSTANCING\n  #if CC_USE_BAKED_ANIMATION\n    attribute highp vec4 a_jointAnimInfo;\n  #endif\n  attribute vec4 a_matWorld0;\n  attribute vec4 a_matWorld1;\n  attribute vec4 a_matWorld2;\n  #if CC_USE_LIGHTMAP\n    attribute vec4 a_lightingMapUVParam;\n  #endif\n  #if CC_USE_REFLECTION_PROBE || CC_RECEIVE_SHADOW\n    #if CC_RECEIVE_SHADOW\n    #endif\n    attribute vec4 a_localShadowBiasAndProbeId;\n  #endif\n  #if CC_USE_REFLECTION_PROBE\n    attribute vec4 a_reflectionProbeData;\n  #endif\n  #if CC_USE_LIGHT_PROBE\n    attribute vec4 a_sh_linear_const_r;\n    attribute vec4 a_sh_linear_const_g;\n    attribute vec4 a_sh_linear_const_b;\n  #endif\n#endif\n#if CC_USE_MORPH\n    attribute float a_vertexId;\n    int getVertexId() {\n      return int(a_vertexId);\n    }\n#endif\nhighp float decode32 (highp vec4 rgba) {\n  rgba = rgba * 255.0;\n  highp float Sign = 1.0 - (step(128.0, (rgba[3]) + 0.5)) * 2.0;\n  highp float Exponent = 2.0 * (mod(float(int((rgba[3]) + 0.5)), 128.0)) + (step(128.0, (rgba[2]) + 0.5)) - 127.0;\n  highp float Mantissa = (mod(float(int((rgba[2]) + 0.5)), 128.0)) * 65536.0 + rgba[1] * 256.0 + rgba[0] + 8388608.0;\n  return Sign * exp2(Exponent - 23.0) * Mantissa;\n}\n#if CC_USE_MORPH\n  uniform vec4 cc_displacementWeights[15];\n  uniform vec4 cc_displacementTextureInfo;\n  #if CC_MORPH_TARGET_HAS_POSITION\n    uniform sampler2D cc_PositionDisplacements;\n  #endif\n  #if CC_MORPH_TARGET_HAS_NORMAL\n    uniform sampler2D cc_NormalDisplacements;\n  #endif\n  #if CC_MORPH_TARGET_HAS_TANGENT\n    uniform sampler2D cc_TangentDisplacements;\n  #endif\n  vec2 getPixelLocation(vec2 textureResolution, int pixelIndex) {\n    float pixelIndexF = float(pixelIndex);\n    float x = mod(pixelIndexF, textureResolution.x);\n    float y = floor(pixelIndexF / textureResolution.x);\n    return vec2(x, y);\n  }\n  vec2 getPixelCoordFromLocation(vec2 location, vec2 textureResolution) {\n    return (vec2(location.x, location.y) + .5) / textureResolution;\n  }\n  #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n      vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n        int pixelIndex = elementIndex;\n        vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n        vec2 uv = getPixelCoordFromLocation(location, cc_displacementTextureInfo.xy);\n        return texture2D(tex, uv);\n      }\n  #else\n    vec4 fetchVec3ArrayFromTexture(sampler2D tex, int elementIndex) {\n      int pixelIndex = elementIndex * 4;\n      vec2 location = getPixelLocation(cc_displacementTextureInfo.xy, pixelIndex);\n      vec2 x = getPixelCoordFromLocation(location + vec2(0.0, 0.0), cc_displacementTextureInfo.xy);\n      vec2 y = getPixelCoordFromLocation(location + vec2(1.0, 0.0), cc_displacementTextureInfo.xy);\n      vec2 z = getPixelCoordFromLocation(location + vec2(2.0, 0.0), cc_displacementTextureInfo.xy);\n      return vec4(\n        decode32(texture2D(tex, x)),\n        decode32(texture2D(tex, y)),\n        decode32(texture2D(tex, z)),\n        1.0\n      );\n    }\n  #endif\n  float getDisplacementWeight(int index) {\n    int quot = index / 4;\n    int remainder = index - quot * 4;\n    if (remainder == 0) {\n      return cc_displacementWeights[quot].x;\n    } else if (remainder == 1) {\n      return cc_displacementWeights[quot].y;\n    } else if (remainder == 2) {\n      return cc_displacementWeights[quot].z;\n    } else {\n      return cc_displacementWeights[quot].w;\n    }\n  }\n  vec3 getVec3DisplacementFromTexture(sampler2D tex, int vertexIndex) {\n  #if CC_MORPH_PRECOMPUTED\n    return fetchVec3ArrayFromTexture(tex, vertexIndex).rgb;\n  #else\n    vec3 result = vec3(0, 0, 0);\n    int nVertices = int(cc_displacementTextureInfo.z);\n    for (int iTarget = 0; iTarget < CC_MORPH_TARGET_COUNT; ++iTarget) {\n      result += (fetchVec3ArrayFromTexture(tex, nVertices * iTarget + vertexIndex).rgb * getDisplacementWeight(iTarget));\n    }\n    return result;\n  #endif\n  }\n  #if CC_MORPH_TARGET_HAS_POSITION\n  vec3 getPositionDisplacement(int vertexId) {\n      return getVec3DisplacementFromTexture(cc_PositionDisplacements, vertexId);\n  }\n  #endif\n  #if CC_MORPH_TARGET_HAS_NORMAL\n  vec3 getNormalDisplacement(int vertexId) {\n      return getVec3DisplacementFromTexture(cc_NormalDisplacements, vertexId);\n  }\n  #endif\n  #if CC_MORPH_TARGET_HAS_TANGENT\n  vec3 getTangentDisplacement(int vertexId) {\n      return getVec3DisplacementFromTexture(cc_TangentDisplacements, vertexId);\n  }\n  #endif\n  void applyMorph (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n    int vertexId = getVertexId();\n  #if CC_MORPH_TARGET_HAS_POSITION\n    position.xyz = position.xyz + getPositionDisplacement(vertexId);\n  #endif\n  #if CC_MORPH_TARGET_HAS_NORMAL\n    normal.xyz = normal.xyz + getNormalDisplacement(vertexId);\n  #endif\n  #if CC_MORPH_TARGET_HAS_TANGENT\n    tangent.xyz = tangent.xyz + getTangentDisplacement(vertexId);\n  #endif\n  }\n  void applyMorph (inout vec4 position) {\n  #if CC_MORPH_TARGET_HAS_POSITION\n    position.xyz = position.xyz + getPositionDisplacement(getVertexId());\n  #endif\n  }\n#endif\n#if CC_USE_SKINNING\n  #if CC_USE_BAKED_ANIMATION\n    uniform highp vec4 cc_jointTextureInfo;\n    uniform highp vec4 cc_jointAnimInfo;\n    uniform highp sampler2D cc_jointTexture;\n    void CCGetJointTextureCoords(float pixelsPerJoint, float jointIdx, out highp float x, out highp float y, out highp float invSize)\n    {\n      #if USE_INSTANCING\n        highp float temp = pixelsPerJoint * (a_jointAnimInfo.x * a_jointAnimInfo.y + jointIdx) + a_jointAnimInfo.z;\n      #else\n        highp float temp = pixelsPerJoint * (cc_jointAnimInfo.x * cc_jointTextureInfo.y + jointIdx) + cc_jointTextureInfo.z;\n      #endif\n      invSize = cc_jointTextureInfo.w;\n      highp float tempY = floor(temp * invSize);\n      x = floor(temp - tempY * cc_jointTextureInfo.x);\n      y = (tempY + 0.5) * invSize;\n    }\n  #else\n    #if CC_USE_REAL_TIME_JOINT_TEXTURE\n      uniform highp sampler2D cc_realtimeJoint;\n    #else\n      uniform highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n    #endif\n  #endif\n  #if CC_USE_BAKED_ANIMATION\n    #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n      mat4 getJointMatrix (float i) {\n        highp float x, y, invSize;\n        CCGetJointTextureCoords(3.0, i, x, y, invSize);\n        vec4 v1 = texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n        vec4 v2 = texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n        vec4 v3 = texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y));\n        return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n      }\n    #else\n      mat4 getJointMatrix (float i) {\n        highp float x, y, invSize;\n        CCGetJointTextureCoords(12.0, i, x, y, invSize);\n        vec4 v1 = vec4(\n          decode32(texture2D(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n        );\n        vec4 v2 = vec4(\n          decode32(texture2D(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n        );\n        vec4 v3 = vec4(\n          decode32(texture2D(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n          decode32(texture2D(cc_jointTexture, vec2((x + 11.5) * invSize, y)))\n        );\n        return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n      }\n    #endif\n  #else\n    #if CC_USE_REAL_TIME_JOINT_TEXTURE\n      #if CC_DEVICE_SUPPORT_FLOAT_TEXTURE\n        mat4 getJointMatrix (float i) {\n          float x = i;\n          vec4 v1 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n          vec4 v2 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n          vec4 v3 = texture2D(cc_realtimeJoint, vec2( x / 256.0, 2.5 / 3.0));\n          return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n        }\n      #else\n        mat4 getJointMatrix (float i) {\n         float x = 4.0 * i;\n          vec4 v1 = vec4(\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n          );\n          vec4 v2 = vec4(\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n          );\n          vec4 v3 = vec4(\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n            decode32(texture2D(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 2.5 / 3.0)))\n          );\n          return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n        }\n      #endif\n    #else\n      mat4 getJointMatrix (float i) {\n        int idx = int(i);\n        vec4 v1 = cc_joints[idx * 3];\n        vec4 v2 = cc_joints[idx * 3 + 1];\n        vec4 v3 = cc_joints[idx * 3 + 2];\n        return mat4(vec4(v1.xyz, 0.0), vec4(v2.xyz, 0.0), vec4(v3.xyz, 0.0), vec4(v1.w, v2.w, v3.w, 1.0));\n      }\n    #endif\n  #endif\n  mat4 skinMatrix () {\n    vec4 joints = vec4(a_joints);\n    return getJointMatrix(joints.x) * a_weights.x\n         + getJointMatrix(joints.y) * a_weights.y\n         + getJointMatrix(joints.z) * a_weights.z\n         + getJointMatrix(joints.w) * a_weights.w;\n  }\n  void CCSkin (inout vec4 position) {\n    mat4 m = skinMatrix();\n    position = m * position;\n  }\n  void CCSkin (inout vec4 position, inout vec3 normal, inout vec4 tangent) {\n    mat4 m = skinMatrix();\n    position = m * position;\n    normal = (m * vec4(normal, 0.0)).xyz;\n    tangent.xyz = (m * vec4(tangent.xyz, 0.0)).xyz;\n  }\n#endif\nvoid CCVertInput(inout StandardVertInput In)\n{\n    In.position = vec4(a_position, 1.0);\n    In.normal = a_normal;\n    In.tangent = a_tangent;\n  #if CC_USE_MORPH\n    applyMorph(In.position, In.normal, In.tangent);\n  #endif\n  #if CC_USE_SKINNING\n    CCSkin(In.position, In.normal, In.tangent);\n  #endif\n}\nuniform highp mat4 cc_matView;\n  uniform highp mat4 cc_matProj;\n  uniform highp vec4 cc_cameraPos;\n  uniform mediump vec4 cc_fogBase;\n  uniform mediump vec4 cc_fogAdd;\n#if !USE_INSTANCING\n  uniform highp mat4 cc_matWorld;\n  uniform highp mat4 cc_matWorldIT;\n#endif\nvoid CCGetWorldMatrixFull(out mat4 matWorld, out mat4 matWorldIT)\n{\n  #if USE_INSTANCING\n    matWorld = mat4(\n      vec4(a_matWorld0.xyz, 0.0),\n      vec4(a_matWorld1.xyz, 0.0),\n      vec4(a_matWorld2.xyz, 0.0),\n      vec4(a_matWorld0.w, a_matWorld1.w, a_matWorld2.w, 1.0)\n    );\n    vec3 scale = 1.0 / vec3(length(a_matWorld0.xyz), length(a_matWorld1.xyz), length(a_matWorld2.xyz));\n    vec3 scale2 = scale * scale;\n    matWorldIT = mat4(\n      vec4(a_matWorld0.xyz * scale2.x, 0.0),\n      vec4(a_matWorld1.xyz * scale2.y, 0.0),\n      vec4(a_matWorld2.xyz * scale2.z, 0.0),\n      vec4(0.0, 0.0, 0.0, 1.0)\n    );\n  #else\n    matWorld = cc_matWorld;\n    matWorldIT = cc_matWorldIT;\n  #endif\n}\n#if CC_USE_FOG != 4\n  float LinearFog(vec4 pos, vec3 cameraPos, float fogStart, float fogEnd) {\n      vec4 wPos = pos;\n      float cam_dis = distance(cameraPos, wPos.xyz);\n      return clamp((fogEnd - cam_dis) / (fogEnd - fogStart), 0., 1.);\n  }\n  float ExpFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n      vec4 wPos = pos;\n      float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n      float f = exp(-cam_dis * fogDensity);\n      return f;\n  }\n  float ExpSquaredFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n      vec4 wPos = pos;\n      float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n      float f = exp(-cam_dis * cam_dis * fogDensity * fogDensity);\n      return f;\n  }\n  float LayeredFog(vec4 pos, vec3 cameraPos, float fogTop, float fogRange, float fogAtten) {\n      vec4 wPos = pos;\n      vec3 camWorldProj = cameraPos.xyz;\n      camWorldProj.y = 0.;\n      vec3 worldPosProj = wPos.xyz;\n      worldPosProj.y = 0.;\n      float fDeltaD = distance(worldPosProj, camWorldProj) / fogAtten * 2.0;\n      float fDeltaY, fDensityIntegral;\n      if (cameraPos.y > fogTop) {\n          if (wPos.y < fogTop) {\n              fDeltaY = (fogTop - wPos.y) / fogRange * 2.0;\n              fDensityIntegral = fDeltaY * fDeltaY * 0.5;\n          }\n          else {\n              fDeltaY = 0.;\n              fDensityIntegral = 0.;\n          }\n      }\n      else {\n          if (wPos.y < fogTop) {\n              float fDeltaA = (fogTop - cameraPos.y) / fogRange * 2.;\n              float fDeltaB = (fogTop - wPos.y) / fogRange * 2.;\n              fDeltaY = abs(fDeltaA - fDeltaB);\n              fDensityIntegral = abs((fDeltaA * fDeltaA * 0.5) - (fDeltaB * fDeltaB * 0.5));\n          }\n          else {\n              fDeltaY = abs(fogTop - cameraPos.y) / fogRange * 2.;\n              fDensityIntegral = abs(fDeltaY * fDeltaY * 0.5);\n          }\n      }\n      float fDensity;\n      if (fDeltaY != 0.) {\n          fDensity = (sqrt(1.0 + ((fDeltaD / fDeltaY) * (fDeltaD / fDeltaY)))) * fDensityIntegral;\n      }\n      else {\n          fDensity = 0.;\n      }\n      float f = exp(-fDensity);\n      return f;\n  }\n#endif\nvoid CC_TRANSFER_FOG_BASE(vec4 pos, out float factor)\n{\n#if CC_USE_FOG == 0\n\tfactor = LinearFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.y);\n#elif CC_USE_FOG == 1\n\tfactor = ExpFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 2\n\tfactor = ExpSquaredFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 3\n\tfactor = LayeredFog(pos, cc_cameraPos.xyz, cc_fogAdd.x, cc_fogAdd.y, cc_fogAdd.z);\n#else\n\tfactor = 1.0;\n#endif\n}\n#if !CC_USE_ACCURATE_FOG\nvarying mediump float v_fog_factor;\n#endif\nvoid CC_TRANSFER_FOG(vec4 pos) {\n#if !CC_USE_ACCURATE_FOG\n    CC_TRANSFER_FOG_BASE(pos, v_fog_factor);\n#endif\n}\nvarying highp vec4 v_shadowPos;\nuniform highp mat4 cc_matLightViewProj;\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n  #endif\n#ifdef CC_USE_METAL\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\n#if CC_RECEIVE_SHADOW\n  uniform highp sampler2D cc_shadowMap;\n  uniform highp sampler2D cc_spotShadowMap;\n    #define UnpackBitFromFloat(value, bit) (mod(floor(value / pow(10.0, float(bit))), 10.0) > 0.0)\n  #if CC_SUPPORT_CASCADED_SHADOW_MAP\n  #else\n  #endif\n#endif\n#if CC_RECEIVE_SHADOW\n#endif\nattribute vec4 a_color;\n#if HAS_SECOND_UV\n  attribute vec2 a_texCoord1;\n#endif\nvarying vec3 v_position;\nvarying vec3 v_normal;\nvarying vec3 v_tangent;\nvarying vec3 v_bitangent;\nvarying vec2 v_uv;\nvarying vec2 v_uv1;\nvarying vec4 v_color;\nvec4 vert () {\n  StandardVertInput In;\n  CCVertInput(In);\n  mat4 matWorld, matWorldIT;\n  CCGetWorldMatrixFull(matWorld, matWorldIT);\n  vec4 pos = matWorld * In.position;\n  v_position = pos.xyz;\n  v_normal = normalize((matWorldIT * vec4(In.normal, 0.0)).xyz);\n  v_tangent = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz);\n  v_bitangent = cross(v_normal, v_tangent) * In.tangent.w;\n  v_uv = a_texCoord;\n  #if HAS_SECOND_UV\n    v_uv1 = a_texCoord1;\n  #endif\n  v_color = a_color;\n  CC_TRANSFER_FOG(pos);\n  v_shadowPos = cc_matLightViewProj * pos;\n  return cc_matProj * (cc_matView * matWorld) * In.position;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\n#define pi 3.14\n   uniform vec4 shallowColor;\n   uniform vec4 causticParams1;\n   uniform vec4 causticParams2;\nuniform highp vec4 cc_time;\nuniform highp vec4 cc_cameraPos;\n  uniform mediump vec4 cc_fogColor;\n  uniform mediump vec4 cc_fogBase;\n  uniform mediump vec4 cc_fogAdd;\nvec4 CCFragOutput (vec4 color) {\n  return color;\n}\n#if CC_USE_FOG != 4\n  float LinearFog(vec4 pos, vec3 cameraPos, float fogStart, float fogEnd) {\n      vec4 wPos = pos;\n      float cam_dis = distance(cameraPos, wPos.xyz);\n      return clamp((fogEnd - cam_dis) / (fogEnd - fogStart), 0., 1.);\n  }\n  float ExpFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n      vec4 wPos = pos;\n      float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n      float f = exp(-cam_dis * fogDensity);\n      return f;\n  }\n  float ExpSquaredFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n      vec4 wPos = pos;\n      float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n      float f = exp(-cam_dis * cam_dis * fogDensity * fogDensity);\n      return f;\n  }\n  float LayeredFog(vec4 pos, vec3 cameraPos, float fogTop, float fogRange, float fogAtten) {\n      vec4 wPos = pos;\n      vec3 camWorldProj = cameraPos.xyz;\n      camWorldProj.y = 0.;\n      vec3 worldPosProj = wPos.xyz;\n      worldPosProj.y = 0.;\n      float fDeltaD = distance(worldPosProj, camWorldProj) / fogAtten * 2.0;\n      float fDeltaY, fDensityIntegral;\n      if (cameraPos.y > fogTop) {\n          if (wPos.y < fogTop) {\n              fDeltaY = (fogTop - wPos.y) / fogRange * 2.0;\n              fDensityIntegral = fDeltaY * fDeltaY * 0.5;\n          }\n          else {\n              fDeltaY = 0.;\n              fDensityIntegral = 0.;\n          }\n      }\n      else {\n          if (wPos.y < fogTop) {\n              float fDeltaA = (fogTop - cameraPos.y) / fogRange * 2.;\n              float fDeltaB = (fogTop - wPos.y) / fogRange * 2.;\n              fDeltaY = abs(fDeltaA - fDeltaB);\n              fDensityIntegral = abs((fDeltaA * fDeltaA * 0.5) - (fDeltaB * fDeltaB * 0.5));\n          }\n          else {\n              fDeltaY = abs(fogTop - cameraPos.y) / fogRange * 2.;\n              fDensityIntegral = abs(fDeltaY * fDeltaY * 0.5);\n          }\n      }\n      float fDensity;\n      if (fDeltaY != 0.) {\n          fDensity = (sqrt(1.0 + ((fDeltaD / fDeltaY) * (fDeltaD / fDeltaY)))) * fDensityIntegral;\n      }\n      else {\n          fDensity = 0.;\n      }\n      float f = exp(-fDensity);\n      return f;\n  }\n#endif\nvoid CC_TRANSFER_FOG_BASE(vec4 pos, out float factor)\n{\n#if CC_USE_FOG == 0\n\tfactor = LinearFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.y);\n#elif CC_USE_FOG == 1\n\tfactor = ExpFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 2\n\tfactor = ExpSquaredFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 3\n\tfactor = LayeredFog(pos, cc_cameraPos.xyz, cc_fogAdd.x, cc_fogAdd.y, cc_fogAdd.z);\n#else\n\tfactor = 1.0;\n#endif\n}\nvoid CC_APPLY_FOG_BASE(inout vec4 color, float factor) {\n\tcolor = vec4(mix(cc_fogColor.rgb, color.rgb, factor), color.a);\n}\n#if !CC_USE_ACCURATE_FOG\nvarying mediump float v_fog_factor;\n#endif\nvoid CC_APPLY_FOG(inout vec4 color) {\n#if !CC_USE_ACCURATE_FOG\n    CC_APPLY_FOG_BASE(color, v_fog_factor);\n#endif\n}\nvoid CC_APPLY_FOG(inout vec4 color, vec3 worldPos) {\n#if CC_USE_ACCURATE_FOG\n    float factor;\n    CC_TRANSFER_FOG_BASE(vec4(worldPos, 1.0), factor);\n#else\n    float factor = v_fog_factor;\n#endif\n    CC_APPLY_FOG_BASE(color, factor);\n}\n#if USE_CAUSTIC\n  uniform sampler2D causticTexture;\n#endif\nvarying vec2 v_uv;\nvarying vec3 v_position;\n#if USE_CAUSTIC\nvec2 panner(vec2 uv, float direction, float speed, vec2 offset, float tiling)\n{\n    direction = direction * 2. - 1.;\n    vec2 dir = normalize(vec2(cos(pi * direction), sin(pi * direction)));\n    return  (dir * cc_time.x * speed) + offset + (uv * tiling);\n}\nvec3 rgbSplit(float split, sampler2D tex, vec2 uv)\n{\n    vec2 UVR = uv + vec2(split, split);\n    vec2 UVG = uv + vec2(split, -split);\n    vec2 UVB = uv + vec2(-split, -split);\n    float r = texture2D(tex, UVR).r;\n    float g = texture2D(tex, UVG).g;\n    float b = texture2D(tex, UVB).b;\n    return vec3(r,g,b);\n}\nvec3 caustic()\n{\n  vec2 uv = v_position.xz;\n  float strength = causticParams1.x;\n  float split = causticParams1.w * 0.01;\n  float speed = causticParams1.z;\n  float scale = causticParams1.y;\n  vec3 texture1 = rgbSplit(split, causticTexture, panner(uv, 1., speed, vec2(0., 0.), 1./scale));\n  vec3 texture2 = rgbSplit(split, causticTexture, panner(uv, 1., speed, vec2(0., 0.), -1./scale));\n  vec3 textureCombined = min(texture1, texture2);\n  return strength * 10. * textureCombined;\n}\n#endif\nvec4 frag () {\n  vec4 waterColor = shallowColor;\n  vec4 finalFoamColor = vec4(0., 0., 0., 0.);\n  vec4 finalCausticColor = vec4(0., 0., 0., 0.);\n  #if USE_CAUSTIC\n    float causticDepth = causticParams2.x;\n    vec3 causticColor = causticParams2.yzw;\n    finalCausticColor.rgb = caustic() * causticColor.rgb;\n  #endif\n  vec4 finalColor = waterColor + finalFoamColor + finalCausticColor;\n  CC_APPLY_FOG(finalColor, v_position);\n  return CCFragOutput(finalColor);\n}\nvoid main() { gl_FragColor = frag(); }"},"builtins":{"globals":{"blocks":[{"name":"CCGlobal","defines":[]},{"name":"CCCamera","defines":[]},{"name":"CCShadow","defines":[]},{"name":"CCCSM","defines":["CC_SUPPORT_CASCADED_SHADOW_MAP"]}],"samplerTextures":[{"name":"cc_shadowMap","defines":["CC_RECEIVE_SHADOW"]},{"name":"cc_spotShadowMap","defines":["CC_RECEIVE_SHADOW"]}],"buffers":[],"images":[]},"locals":{"blocks":[{"name":"CCMorph","defines":["CC_USE_MORPH"]},{"name":"CCSkinningTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinningAnimation","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"CCSkinning","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","!CC_USE_REAL_TIME_JOINT_TEXTURE"]},{"name":"CCLocal","defines":["!USE_INSTANCING"]}],"samplerTextures":[{"name":"cc_PositionDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_POSITION"]},{"name":"cc_NormalDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_NORMAL"]},{"name":"cc_TangentDisplacements","defines":["CC_USE_MORPH","CC_MORPH_TARGET_HAS_TANGENT"]},{"name":"cc_jointTexture","defines":["CC_USE_SKINNING","CC_USE_BAKED_ANIMATION"]},{"name":"cc_realtimeJoint","defines":["CC_USE_SKINNING","!CC_USE_BAKED_ANIMATION","CC_USE_REAL_TIME_JOINT_TEXTURE"]}],"buffers":[],"images":[]},"statistics":{"CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS":131,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":45}},"defines":[{"name":"USE_INSTANCING","type":"boolean"},{"name":"CC_USE_SKINNING","type":"boolean"},{"name":"CC_USE_BAKED_ANIMATION","type":"boolean"},{"name":"CC_USE_LIGHTMAP","type":"boolean"},{"name":"CC_USE_REFLECTION_PROBE","type":"boolean"},{"name":"CC_RECEIVE_SHADOW","type":"boolean"},{"name":"CC_USE_LIGHT_PROBE","type":"boolean"},{"name":"CC_USE_MORPH","type":"boolean"},{"name":"CC_MORPH_TARGET_COUNT","type":"number","range":[2,8]},{"name":"CC_MORPH_TARGET_HAS_POSITION","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_NORMAL","type":"boolean"},{"name":"CC_MORPH_TARGET_HAS_TANGENT","type":"boolean"},{"name":"CC_MORPH_PRECOMPUTED","type":"boolean"},{"name":"CC_USE_REAL_TIME_JOINT_TEXTURE","type":"boolean"},{"name":"CC_USE_FOG","type":"number","range":[0,4]},{"name":"CC_USE_ACCURATE_FOG","type":"boolean"},{"name":"CC_SUPPORT_CASCADED_SHADOW_MAP","type":"boolean"},{"name":"HAS_SECOND_UV","type":"boolean"},{"name":"USE_CAUSTIC","type":"boolean"}]}],[{"name":"opaque","passes":[{"program":"../resources/project/game/fps/effect/water/mywater|legacy/main-functions/general-vs:vert|unlit-fs:frag","properties":{"shallowColor":{"type":16,"value":[0.07843,0.6667,1,1]},"causticStrength":{"type":13,"value":[0.2],"handleInfo":["causticParams1",0,13]},"causticScale":{"type":13,"value":[2.33],"handleInfo":["causticParams1",1,13]},"causticSpeed":{"type":13,"value":[0.1],"handleInfo":["causticParams1",2,13]},"causticRGBSplit":{"type":13,"value":[0.35],"handleInfo":["causticParams1",3,13]},"causticDepth":{"type":13,"value":[1],"handleInfo":["causticParams2",0,13]},"causticColor":{"type":15,"value":[0.01176,0.4,0.47451],"handleInfo":["causticParams2",1,15]},"causticTexture":{"value":"white","type":28},"causticParams1":{"type":16,"value":[0.2,2.33,0.1,0.35]},"causticParams2":{"type":16,"value":[1,0.01176,0.4,0.47451]}}}]},{"name":"transparent","passes":[{"program":"../resources/project/game/fps/effect/water/mywater|general-vs:vert|unlit-fs:frag","blendState":{"targets":[{"blend":true,"blendSrc":2,"blendDst":4,"blendSrcAlpha":2,"blendDstAlpha":4}]},"properties":{"shallowColor":{"type":16,"value":[0.07843,0.6667,1,1]},"causticStrength":{"type":13,"value":[0.2],"handleInfo":["causticParams1",0,13]},"causticScale":{"type":13,"value":[2.33],"handleInfo":["causticParams1",1,13]},"causticSpeed":{"type":13,"value":[0.1],"handleInfo":["causticParams1",2,13]},"causticRGBSplit":{"type":13,"value":[0.35],"handleInfo":["causticParams1",3,13]},"causticDepth":{"type":13,"value":[1],"handleInfo":["causticParams2",0,13]},"causticColor":{"type":15,"value":[0.01176,0.4,0.47451],"handleInfo":["causticParams2",1,15]},"causticTexture":{"value":"white","type":28},"causticParams1":{"type":16,"value":[0.2,2.33,0.1,0.35]},"causticParams2":{"type":16,"value":[1,0.01176,0.4,0.47451]}}}]}]]],0,0,[],[],[]],[[[8,"mywater",[{"rasterizerState":{"cullMode":0},"depthStencilState":{},"blendState":{"targets":[{}]}}],[{"USE_CAUSTIC":true}],[[[{},"shallowColor",8,[4,4287852590],"causticTexture",6,0]],11]]],0,0,[0,0],[9,4],[85,86]]]]
