top-block-game-cocos-demo/build/web-mobile/assets/main/import/05/054cb2b19.json

2 lines
292 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[1,["20g1ukYUVPvKWKBRznAKo+@f9941","54TknWPwVPqJqeCR+Y/Czo@f9941","95EkngnxZFbYuFpsqVTaFr@f9941","aa3gnuj51BPKnojGhupeFg@73b7f","acdPorH1tP9aPw8Sf0SD6R@f9941","b6mOVasAtJh6i0r4PN3Fn3","aa3gnuj51BPKnojGhupeFg@ef5e1","aa3gnuj51BPKnojGhupeFg@438fe","0dolaiIfZIG5C202Q6CReb@f9941","b7MFJ8MjNBwqr3fNq1j5dJ@f9941","f9KAbXF2hEP6/oErzehNDw","7b+d9AS8lOJYywmlAPlJEC","f1KiPEuSRDIqJgPZgkKPHo@f9941","a7YStUNeNCOKGpSntUY1g5","8aWN3s9DdAuY7AH8h96X+1","1brw/JvvpFnIvdrxpFCgMZ","fcU6Ex5rpNApE3zSJezPpa","5a8gG1WVFOLKgfrEqtkTLL@b47c0","45go8ltQ1MUqWR4ZSRpiuM@f9941","e3VTytLxVCk4Waj0PHgPKJ@73b7f","0dolaiIfZIG5C202Q6CReb@6c48a","20g1ukYUVPvKWKBRznAKo+@6c48a","45go8ltQ1MUqWR4ZSRpiuM@6c48a","54TknWPwVPqJqeCR+Y/Czo@6c48a","0asxQqaWhAc5WvAmvDsjYj@2df3a","c5CD51rS5OqYsz3udImVsA@6c48a","ccw6dVfT1DBKo7ykeS152f","cfxTxOeVZIK668P7Hc027v","5eTUjEDjRFr6JoiUhRl+i8","ffuIqPr2JI9I8dPLYGRDpD@f9941","afxHkx8GZGsJC+n+YfITQo@f9941","6fiRp7WghI5phB3bNkrIax@6c48a","955bAq4zhCPL27F0htsdnr@6c48a","95EkngnxZFbYuFpsqVTaFr@6c48a","07GNmWOb9KtLtjSWZm/vRn@6c48a","acdPorH1tP9aPw8Sf0SD6R@6c48a","afxHkx8GZGsJC+n+YfITQo@6c48a","aeGN7qxuBKPb9w7lUz+bqH@6c48a","a3zQCfCrBCDZJ4uf2rk5u8","b7MFJ8MjNBwqr3fNq1j5dJ@6c48a","700zdYHB5CTbCr6sdBBVm/","0asxQqaWhAc5WvAmvDsjYj@2b0a8","a1Vfk7d2lMpLdfsT5SGThZ","0asxQqaWhAc5WvAmvDsjYj@4a7d8","0asxQqaWhAc5WvAmvDsjYj@0e750","0asxQqaWhAc5WvAmvDsjYj@ef86b","0asxQqaWhAc5WvAmvDsjYj@426f2","0asxQqaWhAc5WvAmvDsjYj@754a2","0asxQqaWhAc5WvAmvDsjYj@71919","0asxQqaWhAc5WvAmvDsjYj@1332c","0asxQqaWhAc5WvAmvDsjYj@4d16f","0asxQqaWhAc5WvAmvDsjYj@efe84","e3VTytLxVCk4Waj0PHgPKJ@18751","e3VTytLxVCk4Waj0PHgPKJ@30732","e3VTytLxVCk4Waj0PHgPKJ@da6f3","e3VTytLxVCk4Waj0PHgPKJ@f1394","e3VTytLxVCk4Waj0PHgPKJ@4b929","e3VTytLxVCk4Waj0PHgPKJ@75ee4","8eBHF49hxDIqL20a2yi2ri","e3VTytLxVCk4Waj0PHgPKJ@39f7b","e3VTytLxVCk4Waj0PHgPKJ@a72ab","f1KiPEuSRDIqJgPZgkKPHo@6c48a","ffuIqPr2JI9I8dPLYGRDpD@6c48a"],["node","_spriteFrame","_parent","_normalSprite","_target","_hoverSprite","_pressedSprite","_disabledSprite","_mesh","target","_skeleton","_defaultClip","_textureSource","root","_customMaterial","mainTexture","_effectAsset","_placeholderLabel","_textLabel","_backgroundImage","data","WithdrawalData","asset","Name","withdrawalModal","substitute","USDT","ETH","Toaddress","WithdrawalNum","time","price","type","num","bctype","RachageModel","RechargeNum","rechargenum","Eth","privateddress","RechageNum","address","tanchuan","_checkMark","_cameraComponent","UserLabel","Userdata","userLabel","model","rachagemodel","WithdrawalModal","userdata","main","scene","UsdtPrice","EthPrice","_scrollView","itemPrefab","_envmapHDR","_envmapLDR"],[["cc.Node",["_name","_layer","_objFlags","_id","_active","__editorExtras__","_parent","_lpos","_prefab","_children","_components","_euler","_lrot","_lscale"],-3,1,5,4,2,9,5,5,5],["cc.Label",["_string","_actualFontSize","_fontSize","_overflow","_horizontalAlign","_enableWrapText","_lineHeight","_verticalAlign","_cacheMode","_color","node","_customMaterial","__prefab"],-6,5,1,6,4],"cc.SpriteFrame",["a949arMe05AOaRUaqeKP9PR",["node","rechargenum","rachagemodel","WithdrawalData","WithdrawalModal","userdata","main","substitute","tanchuan"],3,1,1,1,1,1,1,1,1,1],["cc.Sprite",["_sizeMode","_type","_name","node","_spriteFrame","_color"],0,1,6,5],"cc.ImageAsset",["cc.Node",["_name","_layer","_active","_parent","_components","_lpos","_prefab","_children","_lrot","_euler"],0,1,12,5,4,9,5,5],["cc.UITransform",["_name","node","_contentSize","_anchorPoint","__prefab"],2,1,5,5,4],["cc.Node",["_name","_layer","_active","_children","_components","_parent","_lpos"],0,2,12,1,5],["a068aX7dtJAv74XQag5FB9n",["node","withdrawalModal","WithdrawalData"],3,1,1,1],["27335xaDl9Jw5lK1s+Pnap/",["node","items","itemPrefab","__prefab"],3,1,9,6,4],["cc.EditBox",["_inputMode","_maxLength","_string","node","_textLabel","_placeholderLabel","_backgroundImage"],0,1,1,1,6],["cc.Node",["_name","_parent","_lpos","_components","_children","_prefab","_lrot","_euler"],2,1,5,2,12,4,5,5],["cc.PrefabInfo",["fileId","targetOverrides","root","asset","nestedPrefabInstanceRoots"],1,1,1,2],["cc.SkeletalAnimation",["playOnLoad","_name","node","__prefab","_clips","_defaultClip"],1,1,4,3,6],["cc.SkinnedMeshRenderer",["_shadowCastingMode","node","__prefab","_materials","lightmapSettings","_skinningRoot","_mesh","_skeleton"],2,1,4,3,4,1,6,6],["cc.Widget",["_alignFlags","_left","_right","_originalHeight","_alignMode","node"],-2,1],["cc.Button",["_transition","node","_normalColor","_target","_normalSprite","_hoverSprite","_pressedSprite","_disabledSprite","clickEvents"],2,1,5,1,6,6,6,6,9],["490a9P8JcRBPZFNabzsmAAR",["node","WithdrawalNum","Toaddress","Name","ETH","USDT"],3,1,1,1,1,1,1],["ccdd92lOQ1D9Yc5O5tzgafw",["node","userLabel","Uuid"],3,1,1,4],["ea5b9FPPQ1LU6xgN2b46WGP",["node","bctype","num","type","price","time","__prefab"],3,1,1,1,1,1,1,4],["f1ef2cIlPRMf7DqznSUmC33",["node","model"],3,1,1],["46eadJwItZJGYB5TfwbBK+G",["node","RechageNum","privateddress","Eth","RachageModel"],3,1,1,1,1,1],["69a53EuWypB1pE+/o5xP7Cb",["node","address"],3,1,1],["cc.PrefabInstance",["fileId","prefabRootNode","propertyOverrides"],1,9],["cc.Toggle",["_isChecked","node","_normalColor","_target"],2,1,5,1],["cc.Camera",["_clearFlags","_visibility","_projection","_priority","_orthoHeight","_far","node","_color"],-3,1,5],["cc.MeshRenderer",["_shadowCastingMode","node","__prefab","_materials","lightmapSettings","_mesh"],2,1,4,3,4,6],"cc.TextureCube",["cc.Mesh",["_native","_hash","_struct"],1,11],["cc.Prefab",["_name"],2],["cc.PrefabInfo",["fileId","root","instance","asset"],2,1,4,6],["cc.CompPrefabInfo",["fileId"],2],["cc.ModelLightmapSettings",[],3],["cc.Material",["_name","_states","_defines","_props"],0,12],["cc.SceneAsset",["_name"],2],["cc.Canvas",["node","_cameraComponent"],3,1,1],["cc.PageView",["_name","horizontal","node"],1,1],["cc.ClickEvent",["_componentId","handler","target"],1,1],["2a9a84aVMpE2ZvMkbJqc0mU",["node","Userdata","UserLabel"],3,1,1,1],["e0f80zveGpGMKehbGHBUZ0y",["node","RechargeNum","RachageModel"],3,1,1,1],["cc.Mask",["node"],3,1],["cc.Scene",["_name","_children","_prefab","_globals"],2,2,4,4],["cc.SceneGlobals",["ambient","shadows","_skybox","fog","octree"],3,4,4,4,4,4],["cc.AmbientInfo",["_skyIllumLDR","_skyColorHDR","_skyColorLDR"],2,5,5],["cc.ShadowsInfo",["_enabled","_type","_distance","_shadowColor","_size"],0,5,5],["cc.SkyboxInfo",["_enabled","_envmapHDR","_envmapLDR"],2,6,6],["cc.FogInfo",["_fogColor"],3,5],["cc.OctreeInfo",[],3],["91737xikSpClJbxrtNJlG7v",["node"],3,1],["Item",[],3],["6e410fe6ClCe4NyFsXqRtlO",["node"],3,1],["cc.TargetInfo",["localID"],2],["cc.ToggleContainer",["node"],3,1],["53397ECPZ5Kw6ELeIb9pG5d",["node"],3,1],["CCPropertyOverrideInfo",["propertyPath","targetInfo","value"],2,4,4],["CCPropertyOverrideInfo",["propertyPath","targetInfo","value"],2,4,8],["CCPropertyOverrideInfo",["value","propertyPath","targetInfo"],1,4],["CCPropertyOverrideInfo",["value","propertyPath","targetInfo"],1,1],["CCPropertyOverrideInfo",["propertyPath","targetInfo","value"],2,1,8],["cc.Layout",["_resizeMode","_layoutType","node"],1,1],["d190enVzU5PqLcQzMU+1DD2",["node","WithdrawalData"],3,1,1],["cc.DirectionalLight",["_illuminanceHDR","_illuminanceLDR","_shadowEnabled","_shadowPcf","_shadowBias","_shadowSaturation","_shadowDistance","_csmLevel","_shadowFar","_shadowOrthoSize","node","_staticSettings"],-7,1,4],["cc.StaticLightSettings",[],3],["98770NY77pN7YzCEbi3wy42",["node"],3,1],["cc.ScrollBar",["_direction","node","_handle"],2,1,1],["cc.ScrollView",["bounceDuration","brake","horizontal","node","_content","_verticalScrollBar"],0,1,1,1],["cc.EffectAsset",["_name","shaders","techniques"],0],["cc.Skeleton",["_name","_hash","_joints","_bindposes"],0,12]],[[13,0,2,3,2],[7,1,2,1],[32,0,2],[33,1],[52,0,2],[0,0,1,6,10,7,3],[0,0,1,6,9,10,7,3],[6,0,3,7,6,5,8,9,2],[0,0,6,8,7,12,11,2],[17,0,1,8,2,3,4,5,6,7,2],[38,0,1,2,3],[55,0,1,2,2],[1,0,1,2,10,9,4],[0,0,6,9,8,7,12,13,11,2],[7,1,2,3,1],[1,0,1,2,3,5,10,9,6],[6,0,1,3,4,5,3],[0,0,6,10,8,12,13,11,2],[29,0,1,2,3],[15,1,2,3,4,5,6,7,1],[4,1,0,3,4,3],[0,0,6,9,8,2],[4,1,0,3,5,4,3],[57,0,1,2,3],[0,0,2,1,6,10,4],[0,0,6,9,8,7,12,11,2],[0,0,6,9,10,8,7,12,13,11,2],[14,1,0,2,3,4,5,3],[41,0,1],[50,1],[1,0,4,7,1,2,6,10,9,7],[0,0,1,6,10,3],[0,0,6,10,8,7,12,13,11,2],[7,0,1,2,2],[8,0,2,1,5,3,4,6,4],[4,2,1,0,3,5,4,4],[4,0,3,5,4,2],[37,0,1,2,3],[1,0,1,2,3,5,10,9,11,6],[27,0,1,2,3,4,5,2],[0,0,1,9,10,7,3],[1,0,4,1,2,3,5,10,9,7],[34,0,1,2,3,4],[0,0,1,6,9,10,3],[6,0,2,1,3,4,5,4],[6,0,1,3,4,6,5,3],[7,1,4,2,3,1],[1,0,4,7,1,2,6,10,12,9,7],[68,0,1,2,3,4],[30,0,2],[0,2,5,6,8,3],[8,0,1,5,3,4,6,3],[31,0,1,2,3,2],[17,0,1,2,3,4,5,6,7,2],[59,0,1,2,2],[8,0,1,3,4,6,3],[14,0,2,3,4,5,2],[21,0,1],[3,0,7,1],[24,0,1,2,3],[0,0,9,8,2],[0,0,4,1,6,9,10,7,4],[0,0,3,6,10,7,12,11,3],[0,0,6,8,7,2],[4,0,3,4,2],[9,0,1,2,1],[40,0,1,2,1],[3,0,1,1],[3,0,3,1],[3,0,1],[3,0,8,1],[11,0,1,3,4,5,6,3],[11,2,0,1,3,4],[1,0,1,2,9,4],[1,0,4,1,2,3,5,10,7],[27,1,2,3,4,5,1],[0,0,6,9,10,8,7,13,2],[0,0,1,3,9,10,7,4],[0,0,2,1,6,10,7,4],[0,0,6,10,8,7,13,11,2],[0,0,9,10,8,7,2],[0,0,9,8,7,12,11,2],[0,0,9,8,7,2],[0,0,6,9,8,12,11,2],[0,0,6,8,7,12,13,11,2],[0,0,6,9,8,7,2],[0,0,1,9,10,8,7,3],[6,0,2,1,3,4,4],[6,0,1,3,4,3],[8,0,2,1,5,3,4,4],[12,0,1,3,2,2],[12,0,1,4,5,2,6,7,2],[13,1,4,2],[15,0,1,2,3,4,5,6,7,2],[35,0,2],[7,1,4,2,1],[36,0,1,1],[16,0,1,2,5,4],[16,0,3,4,5,4],[4,2,0,3,3],[4,0,3,2],[4,1,0,3,3],[18,0,1,2,3,4,5,1],[18,0,1],[9,0,1],[9,0,1,1],[39,0,1,2,1],[19,0,1,1],[19,0,2,1,1],[20,0,1,2,3,4,5,1],[20,0,6,1,2,3,4,5,1],[10,0,1],[10,0,1,2,1],[10,0,3,1],[21,0,1,1],[3,0,2,1],[3,0,4,1],[3,0,5,1],[3,0,6,1],[22,0,1,2,3,1],[22,0,4,1],[23,0,1,1],[23,0,1],[42,0,1,2,3,2],[43,0,1,2,3,4,1],[44,0,1,2,2],[45,0,1,2,3,4,4],[46,0,1,2,2],[47,0,1],[48,1],[49,0,1],[11,0,1,3,3],[51,0,1],[1,0,4,1,2,6,3,9,7],[1,0,4,1,2,9,5],[1,0,1,2,3,8,10,9,6],[1,0,1,2,3,10,9,5],[1,0,4,7,1,2,3,5,10,9,8],[53,0,1],[54,0,1],[24,0,2,2],[56,0,1,2,2],[58,0,1,2,3],[25,1,2,3,1],[25,0,1,2,3,2],[60,0,1,2,3],[61,0,1,1],[62,0,1,2,3,4,5,6,7,8,9,10,11,11],[63,1],[26,0,1,6,3],[26,2,3,4,5,0,1,6,7,7],[64,0,1],[65,0,1,2,2],[66,0,1,2,3,4,5,4],[67,0,1,2,4]],[[[[18,".bin",3495632489,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":22336,"length":3516,"count":1758,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":22336,"count":349,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-1.0263243913650513,-0.3362765312194824,-0.03969179466366768],"maxPosition",8,[1,1.0416858196258545,0.37944579124450684,2.4551167488098145]]],-1],0,0,[],[],[]],[[[18,".bin",3036632834,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":22272,"length":3516,"count":1758,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":22272,"count":348,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-1.0627228021621704,-0.22964781522750854,-0.03969179466366768],"maxPosition",8,[1,1.0608391761779785,0.271166056394577,2.4551167488098145]]],-1],0,0,[],[],[]],[[[18,".bin",254309135,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":4752,"length":1008,"count":504,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":4752,"count":99,"stride":48},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-2.0139009952545166,-2.0199241638183594,-0.5083037614822388],"maxPosition",8,[1,2.0139009952545166,2.0199241638183594,0.41632819175720215]]],-1],0,0,[],[],[]],[[[18,".bin",29018075,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":17024,"length":2616,"count":1308,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":17024,"count":266,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.8331011533737183,-0.3728335201740265,-0.03329771012067795],"maxPosition",8,[1,0.7926641702651978,0.46718841791152954,2.0596137046813965]]],-1],0,0,[],[],[]],[[[18,".bin",1251657800,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":44032,"length":5268,"count":2634,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":44032,"count":688,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-26.697162628173828,-5.055922985076904,-21.154483795166016],"maxPosition",8,[1,60.5887565612793,11.239510536193848,12.134369850158691]]],-1],0,0,[],[],[]],[[[18,".bin",2591114660,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":17024,"length":2616,"count":1308,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":17024,"count":266,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.7926226854324341,-0.7388861179351807,-0.05313277989625931],"maxPosition",8,[1,0.3647039830684662,0.5992574691772461,2.038058042526245]]],-1],0,0,[],[],[]],[[[18,".bin",3382949082,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":22144,"length":3516,"count":1758,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":22144,"count":346,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.9536016583442688,-0.38312095403671265,-0.05688628926873207],"maxPosition",8,[1,0.487619012594223,0.4689179062843323,1.8973422050476074]]],-1],0,0,[],[],[]],[[[18,".bin",4260990112,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":22144,"length":3516,"count":1758,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":22144,"count":346,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-1.091290831565857,-0.41489967703819275,-0.07584762573242188],"maxPosition",8,[1,0.9092828035354614,0.5096479654312134,2.450913906097412]]],-1],0,0,[],[],[]],[[[18,".bin",3840728426,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":17216,"length":2622,"count":1311,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":17216,"count":269,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.7611004710197449,-0.18266357481479645,-0.06545485556125641],"maxPosition",8,[1,0.961718738079071,0.5065948367118835,2.02461838722229]]],-1],0,0,[],[],[]],[[[18,".bin",1400315511,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":17216,"length":2622,"count":1311,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":17216,"count":269,"stride":64},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_color","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.49995025992393494,-0.4541564881801605,-0.09076808393001556],"maxPosition",8,[1,0.9192519783973694,0.6330084204673767,2.026685953140259]]],-1],0,0,[],[],[]],[[{"name":"default_scrollbar","rect":{"x":0,"y":0,"width":30,"height":15},"offset":{"x":0,"y":0},"originalSize":{"width":30,"height":15},"rotated":false,"capInsets":[0,0,0,0],"vertices":{"rawPosition":[-15,-7.5,0,15,-7.5,0,-15,7.5,0,15,7.5,0],"indexes":[0,1,2,2,1,3],"uv":[0,15,30,15,0,0,30,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-15,"y":-7.5,"z":0},"maxPos":{"x":15,"y":7.5,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[20]],[[{"name":"default_btn_normal","rect":{"x":0,"y":0,"width":40,"height":40},"offset":{"x":0,"y":0},"originalSize":{"width":40,"height":40},"rotated":false,"capInsets":[12,12,12,12],"vertices":{"rawPosition":[-20,-20,0,20,-20,0,-20,20,0,20,20,0],"indexes":[0,1,2,2,1,3],"uv":[0,40,40,40,0,0,40,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-20,"y":-20,"z":0},"maxPos":{"x":20,"y":20,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[21]],[[{"name":"default_radio_button_on","rect":{"x":1,"y":1,"width":30,"height":30},"offset":{"x":0,"y":0},"originalSize":{"width":32,"height":32},"rotated":false,"capInsets":[0,0,0,0],"vertices":{"rawPosition":[-15,-15,0,15,-15,0,-15,15,0,15,15,0],"indexes":[0,1,2,2,1,3],"uv":[1,31,31,31,1,1,31,1],"nuv":[0.03125,0.03125,0.96875,0.03125,0.03125,0.96875,0.96875,0.96875],"minPos":{"x":-15,"y":-15,"z":0},"maxPos":{"x":15,"y":15,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[22]],[[{"name":"default_btn_pressed","rect":{"x":0,"y":0,"width":40,"height":40},"offset":{"x":0,"y":0},"originalSize":{"width":40,"height":40},"rotated":false,"capInsets":[12,12,12,12],"vertices":{"rawPosition":[-20,-20,0,20,-20,0,-20,20,0,20,20,0],"indexes":[0,1,2,2,1,3],"uv":[0,40,40,40,0,0,40,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-20,"y":-20,"z":0},"maxPos":{"x":20,"y":20,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[23]],[[{"base":"2,2,0,0,2,1","rgbe":false,"mipmaps":[{"front":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@e9a6d","back":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@40c10","left":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@8fd34","right":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@74afd","top":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@bb97f","bottom":"5af201b5-5951-4e2c-a81f-ac4aad9132cb@b47c0@7d38f"}]}],[28],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[{"fmt":"0","w":0,"h":0},-1],[5],0,[],[],[]],[[[49,"grassGoup"],[60,"grassGoup",[-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13],[0,"e5Peksu5tL9peMeABb8/JC",-1,0]],[76,"grass",1,[-15],[[56,true,-14,[2,"11JgtTUn5OJKE3LJ8pTj/2"],[3],4]],[0,"87M1Av0v5LhZ3LsJOTzwr3",1,0],[1,-0.852,0.892,-1.49],[1,1.8,1.8,1.8]],[21,"RootNode",2,[-16,-17,-18],[0,"54SHCY049LyqH1HRGY3ZVR",1,0]],[26,"grass",1,[-20],[[56,true,-19,[2,"abXR2STONCQrmlGd7QjDWb"],[8],9]],[0,"8avX4W7ZtLOLCZ8n5QtiPm",1,0],[1,1.271,0.836,-2.68],[3,0,-0.09886819763876702,0,0.9951005373808527],[1,1.4,1.4,1.4],[1,0,-11.348,0]],[21,"RootNode",4,[-21,-22,-23],[0,"bdiB2XMldLgpbPP0u9vyiH",1,0]],[26,"grass",1,[-25],[[27,"grass<SkeletalAnimation>",true,-24,[2,"3eRlu7+XFMf4IKjhzVuyYo"],[13],14]],[0,"5fAmHUz0xO9YFym/gsZawP",1,0],[1,0.816,0.874,-2.029],[3,0.009594606467145706,-0.09840154486124139,-0.09656895017241425,0.9904037143297977],[1,1.8,1.8,1.8],[1,0,-11.348,-11.138]],[21,"RootNode",6,[-26,-27,-28],[0,"0cYonIu91LHamoapMUydbc",1,0]],[26,"grass",1,[-30],[[27,"grass<SkeletalAnimation>",true,-29,[2,"22rvun9aNNBbAK//dWXzkX"],[18],19]],[0,"9bIVhdYYpFl7JZmL4oubNS",1,0],[1,1.505,0.835,-2.352],[3,0.009051343059323664,0.011005731118140823,-0.042668681053864996,0.9989876529409666],[1,1.8,1.8,1.8],[1,1.094,1.309,-4.879]],[21,"RootNode",8,[-31,-32,-33],[0,"2at9CGY1VK9qtNpM8kC/KU",1,0]],[26,"grass",1,[-35],[[27,"grass<SkeletalAnimation>",true,-34,[2,"0f8P8jwTVOzaIGGhmhMYJ6"],[23],24]],[0,"2d66RAsipF1brG2RGpHJY1",1,0],[1,2.591,0.697,-3.192],[3,-0.009569056200142995,-0.27238145223532967,-0.02174826425431747,0.961895935454317],[1,1.4,1.4,1.4],[1,-1.735,-31.653,-2.099]],[21,"RootNode",10,[-36,-37,-38],[0,"75DE0pyqBGsIOI2RSOFxap",1,0]],[26,"grass",1,[-40],[[27,"grass<SkeletalAnimation>",true,-39,[2,"b6LjWqcFFEYa267NpDVpBB"],[28],29]],[0,"ffwse8PqZBf4sIEkNdsA+i",1,0],[1,-2.85,0.766,-2.616],[3,-0.007707220961668685,-0.0985673335815995,0.07757256533280044,0.9920723646001587],[1,1.8,1.8,1.8],[1,0,-11.348,8.942]],[21,"RootNode",12,[-41,-42,-43],[0,"12tzV7tYdKJJxbVmqiEpry",1,0]],[26,"grass",1,[-45],[[27,"grass<SkeletalAnimation>",true,-44,[2,"a5eATDuwJGuL6l09vX0n3S"],[33],34]],[0,"adNP+ELEhC4awfcKkY8jYJ",1,0],[1,-3.252,0.663,-3.355],[3,-0.005303598000440666,-0.09872584440048117,0.053380291603709065,0.9936677633716235],[1,1.6,1.6,1.6],[1,9.996766443584073e-17,-11.348,6.150000000000002]],[21,"RootNode",14,[-46,-47,-48],[0,"0eVA3+ezRBf4EQOOoMIo4S",1,0]],[26,"grass",1,[-50],[[27,"grass<SkeletalAnimation>",true,-49,[2,"8fKHzMP19M76liKGOWy5fp"],[38],39]],[0,"33gYFxG8dO2r8iKjzjEx4z",1,0],[1,-4.716,0.534,-2.539],[3,-0.011417842217574529,0.10201162854238845,0.09441482697624534,0.9902267926936081],[1,1.2999999999999998,1.3,1.3],[1,-2.442,11.991,10.641]],[21,"RootNode",16,[-51,-52,-53],[0,"53OGGCuwFNs4KQ0nQRdow5",1,0]],[26,"grass",1,[-55],[[27,"grass<SkeletalAnimation>",true,-54,[2,"63dAWSpBBOqo5RjIXi5sEW"],[43],44]],[0,"27mCip0lFNkL+6Dj/Bpwj4",1,0],[1,-3.151,0.706,-2.905],[3,-0.01606605470413201,0.10576273729137807,0.0511818299419083,0.9929433748057723],[1,1.6,1.6,1.6],[1,-2.461,12.281,5.638]],[21,"RootNode",18,[-56,-57,-58],[0,"560/1xR41BPKG+lcc5935I",1,0]],[26,"grass",1,[-60],[[27,"grass<SkeletalAnimation>",true,-59,[2,"5c8UINxBNN1bAOwYYO6ZIW"],[48],49]],[0,"50aim7sdtB2rmsHB4KRkd5",1,0],[1,2.179,0.714,-3.159],[3,0.0002046174412504865,-0.2725489284000769,-0.05622568582446521,0.9604976376926917],[1,1.4,1.4,1.4],[1,-1.744,-31.778,-6.207]],[21,"RootNode",20,[-61,-62,-63],[0,"25mf8t9bhJIo3E0lcGCo1H",1,0]],[26,"grass",1,[-65],[[27,"grass<SkeletalAnimation>",true,-64,[2,"2dbXeRDsVAWK67o3tGgUEl"],[53],54]],[0,"70DWXrCRRL4pWATtzgi7DN",1,0],[1,5.041,0.406,-3.58],[3,0.026333680128465056,-0.27127042474669716,-0.14805365417229147,0.9506834433368816],[1,1.4,1.4,1.4],[1,-1.815,-32.126,-17.205]],[21,"RootNode",22,[-66,-67,-68],[0,"9dXaYb8ytBBb2yYH4yN6Vh",1,0]],[26,"grass",1,[-70],[[27,"grass<SkeletalAnimation>",true,-69,[2,"42733HPMdIEqobiaBVXbRJ"],[58],59]],[0,"7aOtJ3fThN27Zj4fmkg0ut",1,0],[1,4.153,0.548,-3.566],[3,0.01263456693718553,-0.27225485806840527,-0.09997674733537244,0.9569338064718487],[1,1.4,1.4,1.4],[1,-1.769,-31.94,-11.433]],[21,"RootNode",24,[-71,-72,-73],[0,"fa4L3FVuFMwYhNq67HoU7c",1,0]],[17,"grass",3,[[19,-74,[2,"a6J1jU/r1BPKNIcVMEREit"],[0],[3],2,1,2]],[0,"5fs1r6h0xEiJFeWVPk8SNl",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",3,[-75],[0,"daWdShf/9NHLgm8BB+DJZm",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",27,[[8,"Bone003",-76,[0,"8e/dPEvbdIMo48q55vpZZ3",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"beKna0bXZNtrHWMkpFZoVU",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",3,[-77],[0,"94aP4+w7dE/qUrh7Cfcv3Y",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",29,[[8,"Bone006",-78,[0,"96ATlvvpZKqpZWVYxnyW6U",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"8fu8biB4BPFKtDBKsYv4K/",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",5,[[19,-79,[2,"28WH2cvhNDFbN3it+8Q+XK"],[5],[3],4,6,7]],[0,"74Q+wg/aVBj5Bkvd+Cqz4L",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",5,[-80],[0,"4fGc2baulLjbJeePpPYcqt",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",32,[[8,"Bone003",-81,[0,"af9wSIs/ZHx5FXOjfa1Jum",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"25LOOT8GBDpr0h1KIC5gCx",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",5,[-82],[0,"b8DSzxi5tJyKiMnjvG0NLg",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",34,[[8,"Bone006",-83,[0,"65QAhjUVBAtLwEci9t05Ey",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"e75gT5ogJMOoh/2sggS7OQ",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",7,[[19,-84,[2,"87exLhmM1P35jx6GLN7j5f"],[10],[3],6,11,12]],[0,"60njdFxDhJWowG9HZr9kRy",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",7,[-85],[0,"dfSzBMugdCkL5lyChYPcpt",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",37,[[8,"Bone003",-86,[0,"91jR835RZHKbRhzSn1x2pJ",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"3bw6IJ5hBJ0aqjcninjsA3",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",7,[-87],[0,"36km6+kJtJZ4iiy8pwU3RO",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",39,[[8,"Bone006",-88,[0,"977HJ5Wy5HiapZRnYB3I8X",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"3da6ppQblGu7DGQDIjczFt",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",9,[[19,-89,[2,"dduLonFhNK+q908BUlLM7f"],[15],[3],8,16,17]],[0,"f2zxp5nX1CJq18JC2EndYO",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",9,[-90],[0,"3c+BtM6atJC4XerbYlNlM0",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",42,[[8,"Bone003",-91,[0,"baL59AVvRKlKmpQqSjNAYI",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"89NJAVd1tBZ6C0iX/YbeY2",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",9,[-92],[0,"9byDe6eNtGPIztX4VSZKlQ",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",44,[[8,"Bone006",-93,[0,"6fAgsRfRRHeoZrCvNeGhDK",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"8exO45eF5F2KzRxFbNE1M/",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",11,[[19,-94,[2,"af0f1GeGlKf5MvKMEuH8MJ"],[20],[3],10,21,22]],[0,"a2WxB7prNBKZLuuRtE7RC2",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",11,[-95],[0,"d9cSWZZzxJ0JJz3NZ3KYKr",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",47,[[8,"Bone003",-96,[0,"65JgfqDUlBhq62ZblXl99a",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"613BOOO+hIlqnTjr1LZ7yD",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",11,[-97],[0,"daMGy+QoZIMbYWUh1/PBDR",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",49,[[8,"Bone006",-98,[0,"4bzVNkn1hF04sTb5BrBwWZ",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"aea82LsKdAiqVuBFPi2Vfz",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",13,[[19,-99,[2,"e9BPt5G81CloUmA5IJNHIQ"],[25],[3],12,26,27]],[0,"32O+zfC79Ly5/JDvR+zPy3",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",13,[-100],[0,"2csxgVNAlDEIWU7lnXQfKS",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",52,[[8,"Bone003",-101,[0,"f31n3srf1OQ6ztTn+Z0+bi",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"39pnXuaeZGe5VqFTUXoXAo",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",13,[-102],[0,"e1Z+TO4odC37Bc8FKLNniF",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",54,[[8,"Bone006",-103,[0,"c8HIUzEBxJx72ffmHr7Yzh",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"82tqRzYDNKi6iXruWWHldm",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",15,[[19,-104,[2,"7dt8ZZ5EBNDIxOgpt1XbGu"],[30],[3],14,31,32]],[0,"3c/GljN9JNKpGUQDJiCaAz",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",15,[-105],[0,"17tlC2EGZMWoKAixVNAp0A",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",57,[[8,"Bone003",-106,[0,"9fnTS8hnVIWqrzTdhgEpre",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"77DlSvZMVCFLNlyGWiwIha",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",15,[-107],[0,"d1EnMgh6RE7o+kI5cUNlG0",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",59,[[8,"Bone006",-108,[0,"8cUixi2TpMHINjSklAPeYi",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"b7XmnH2bBCVpvgTAKnVXA2",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",17,[[19,-109,[2,"c4Nekl9YtKUKupS0ASX7It"],[35],[3],16,36,37]],[0,"43yCcO1I5D6qP+LJIIGKjX",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",17,[-110],[0,"0aJTcuk/5M56nEkb+D7tN9",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",62,[[8,"Bone003",-111,[0,"d5T2sohQVAEa4ljoSzlMKU",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"93hV+qqgFP44pIvuByy6RE",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",17,[-112],[0,"6etpava3ZGlovr3HG7SpRo",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",64,[[8,"Bone006",-113,[0,"6c2sTe+khLGYrsZVSADL4H",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"ecsSU+lvpNf7DhOOeFG7w2",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",19,[[19,-114,[2,"b9cuhcVRxPvZTPHcAyE7eS"],[40],[3],18,41,42]],[0,"87cW2HzEtNk4+RMW95NbLB",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",19,[-115],[0,"16ssZzbLdO76GQg4Dvdp/y",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",67,[[8,"Bone003",-116,[0,"5bcVkwfGRPza49BU4T6rqn",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"fcqb+cLDVJ3KNvBTyJYBwm",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",19,[-117],[0,"0eRKfLOh9OdLsOOjTosv1c",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",69,[[8,"Bone006",-118,[0,"0b/yPLcR1FiZPqyfaG8HBZ",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"0fPapM97RGmYmlB69FuuSF",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",21,[[19,-119,[2,"f3T3OFBBJBYrGbPSQ+k7GJ"],[45],[3],20,46,47]],[0,"08LJZ1ezRCiqnszI5cXQTx",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",21,[-120],[0,"c9g0zchT9L8IQmY+99TABR",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",72,[[8,"Bone003",-121,[0,"d8OdalQsZKwLFf2mFuR1VJ",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"ecFy8CTgxCib8Fky/YcoUL",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",21,[-122],[0,"91+xPZxDtGRp/x7cNrBUhM",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",74,[[8,"Bone006",-123,[0,"66R8TA3S1NT4HLywjDiP1Q",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"963dgjTmdES7q6KBvCTllJ",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",23,[[19,-124,[2,"d0A5LfhGhAfrDnBGJ3JzOe"],[50],[3],22,51,52]],[0,"203+J3Vb1LP7KUgkjLvNtX",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",23,[-125],[0,"9eOEdVVahA+rbDiF4AJNNX",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",77,[[8,"Bone003",-126,[0,"3aJII/zG9KaYapX0uizphW",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"48r+NZR1BD7Y5qEv/ruQsO",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",23,[-127],[0,"469eCD0ttKHZacZ3xtfeuD",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",79,[[8,"Bone006",-128,[0,"1fFpy0ihVOYbzhBLRLkL1Y",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"d9iCqzyppAILXebiHSqtDk",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[17,"grass",25,[[19,-129,[2,"161SEdWiFO/abXxUI8RkYk"],[55],[3],24,56,57]],[0,"80TsYKkUVBAIbPGc2Ao+X4",1,0],[3,0.37992816729770207,0.5963678291908521,0.5963678291908521,-0.37992816729770207],[1,0.614784121513367,0.614784121513367,0.614784121513367],[1,-90,-115.0000056286655,0]],[13,"Bone001",25,[-130],[0,"54j/6cneBCF4PpXQIO+ZrT",1,0],[1,-0.0461842827498913,0.0000118009265861474,-0.0284814611077309],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone002",82,[[8,"Bone003",-131,[0,"6aDs2ciZhDh6tahiNmO4QO",1,0],[1,0.0397140197455883,-1.19209286886246e-9,7.15255721317476e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"1er+9JvftCj5j548DE5PNk",1,0],[1,0.0404664427042007,-3.57627860658738e-9,0],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]],[13,"Bone004",25,[-132],[0,"c8ON8aNTZH1YV9KZsolNGO",1,0],[1,0.0710692703723907,0.0000118009265861474,0.0136896027252078],[3,-0.0000017283479103639154,-0.000001696768662714476,0.7049074170330618,0.7092993256770451],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-0.0005507418826256091,0.00027320859410338513,89.64412979694991]],[7,"Bone005",84,[[8,"Bone006",-133,[0,"1eZ45FwjhMoY5AmDd/ApaW",1,0],[1,0.039714016020298,0,7.74860353658369e-9],[3,1.4018830392883508e-10,-1.4662893682703937e-13,-0.0010459420626472054,0.9999994530024512],[1,1.606440509162768e-8,-1.4726229276075984e-18,-0.11985615346346049]]],[0,"7fkJUsKFZMHbutZKiHcKAf",1,0],[1,0.0404664427042007,-4.76837147544984e-9,5.9604643443123e-10],[3,0.000002421418716486127,1.5182564735607207e-8,0.006269989150778519,0.9999803434219023],[1,0.000277479600078167,-3.18993241527229e-13,0.7184925395739944]]],0,[0,13,1,0,-1,2,0,-2,4,0,-3,6,0,-4,8,0,-5,10,0,-6,12,0,-7,14,0,-8,16,0,-9,18,0,-10,20,0,-11,22,0,-12,24,0,0,2,0,-1,3,0,-1,26,0,-2,27,0,-3,29,0,0,4,0,-1,5,0,-1,31,0,-2,32,0,-3,34,0,0,6,0,-1,7,0,-1,36,0,-2,37,0,-3,39,0,0,8,0,-1,9,0,-1,41,0,-2,42,0,-3,44,0,0,10,0,-1,11,0,-1,46,0,-2,47,0,-3,49,0,0,12,0,-1,13,0,-1,51,0,-2,52,0,-3,54,0,0,14,0,-1,15,0,-1,56,0,-2,57,0,-3,59,0,0,16,0,-1,17,0,-1,61,0,-2,62,0,-3,64,0,0,18,0,-1,19,0,-1,66,0,-2,67,0,-3,69,0,0,20,0,-1,21,0,-1,71,0,-2,72,0,-3,74,0,0,22,0,-1,23,0,-1,76,0,-2,77,0,-3,79,0,0,24,0,-1,25,0,-1,81,0,-2,82,0,-3,84,0,0,26,0,-1,28,0,2,28,0,-1,30,0,2,30,0,0,31,0,-1,33,0,2,33,0,-1,35,0,2,35,0,0,36,0,-1,38,0,2,38,0,-1,40,0,2,40,0,0,41,0,-1,43,0,2,43,0,-1,45,0,2,45,0,0,46,0,-1,48,0,2,48,0,-1,50,0,2,50,0,0,51,0,-1,53,0,2,53,0,-1,55,0,2,55,0,0,56,0,-1,58,0,2,58,0,-1,60,0,2,60,0,0,61,0,-1,63,0,2,63,0,-1,65,0,2,65,0,0,66,0,-1,68,0,2,68,0,-1,70,0,2,70,0,0,71,0,-1,73,0,2,73,0,-1,75,0,2,75,0,0,76,0,-1,78,0,2,78,0,-1,80,0,2,80,0,0,81,0,-1,83,0,2,83,0,-1,85,0,2,85,0,20,1,133],[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],[-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11,-1,8,10,-1,11],[5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3,5,6,7,3,3]],[[[42,"seafloor",[{"rasterizerState":{},"blendState":{"targets":[{}]},"depthStencilState":{}}],[{"USE_ALBEDO_MAP":true}],[[[{"metallic":0.400000005960464,"roughness":0.70710676908493,"alphaThreshold":0},"albedoScale",8,[1,1,1,1],"mainTexture",6,0]],11]]],0,0,[0,0],[15,16],[24,15]],[[[42,"tree",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_OUTLINE_PASS":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true}],[[{},[{},"specular",8,[4,16777215],"mainTexture",6,0],{},{}],0,11,0,0]]],0,0,[0,0],[15,16],[25,13]],[[[94,"main"],[77,"Canvas",33554432,"21RHrfhuBEaKfHxl6MnKXZ",[-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23],[[1,-1,[5,960,640]],[96,-3,-2],[97,45,-5.684341886080802e-14,-5.684341886080802e-14,-4]],[1,479.99999999999994,320,0]],[34,"提现数量",false,33554432,1,[-28,-29,-30,-31,-32,-33,-34,-35,-36,-37,-38,-39,-40,-41,-42,-43,-44],[[[33,"pageView-horizontal<UITransform>",-24,[5,400,400]],[35,"pageView-horizontal<Sprite>",1,0,-25,[4,4294440444],78],[37,"pageView-horizontal<PageView>",false,-26],-27],4,4,4,1],[1,13.06,8.798,0]],[34,"充值数量",false,33554432,1,[-49,-50,-51,-52,-53,-54,-55,-56,-57,-58,-59,-60,-61],[[[33,"pageView-horizontal<UITransform>",-45,[5,400,400]],[35,"pageView-horizontal<Sprite>",1,0,-46,[4,4294440444],30],[37,"pageView-horizontal<PageView>",false,-47],-48],4,4,4,1],[1,13.06,8.798,0]],[6,"Button-001",33554432,2,[-74],[[1,-62,[5,100,40]],[22,1,0,-63,[4,4293643911],70],[9,2,-66,[[10,"490a9P8JcRBPZFNabzsmAAR","test",-65]],[4,4292269782],-64,71,72,73,74],[102,-72,-71,-70,-69,-68,-67],[104,-73]],[1,-86,-135.687,0]],[6,"个人信息",33554432,1,[-85],[[1,-75,[5,100,40]],[20,1,0,-76,96],[9,2,-79,[[10,"2a9a84aVMpE2ZvMkbJqc0mU","changeUserData",-78]],[4,4292269782],-77,97,98,99,100],[106,-82,-81,-80],[107,-84,-83]],[1,8,46,0]],[34,"提现地址",false,33554432,1,[-90,-91,-92,-93],[[[33,"pageView-horizontal<UITransform>",-86,[5,400,300]],[35,"pageView-horizontal<Sprite>",1,0,-87,[4,4294440444],148],[37,"pageView-horizontal<PageView>",false,-88],-89],4,4,4,1],[1,-0.94,22.798,0]],[40,"Item",33554432,[-102,-103,-104,-105,-106],[[14,-94,[5,500,400],[0,0.5,1]],[109,-100,-99,-98,-97,-96,-95],[111,-101]],[1,0,96,0]],[34,"弹窗",false,33554432,1,[-111,-112,-113,-114],[[[33,"pageView-horizontal<UITransform>",-107,[5,400,200]],[35,"pageView-horizontal<Sprite>",1,0,-108,[4,4294440444],181],[37,"pageView-horizontal<PageView>",false,-109],-110],4,4,4,1],[1,-0.94,22.798,0]],[6,"充值",33554432,1,[-122],[[1,-115,[5,100,40]],[20,1,0,-116,3],[9,2,-119,[[10,"f1ef2cIlPRMf7DqznSUmC33","recharge",-118]],[4,4292269782],-117,4,5,6,7],[114,-121,-120]],[1,4,208,0]],[34,"充值选择",false,33554432,1,[-127,-128,-129],[[[33,"pageView-horizontal<UITransform>",-123,[5,400,200]],[35,"pageView-horizontal<Sprite>",1,0,-124,[4,4294440444],42],[37,"pageView-horizontal<PageView>",false,-125],-126],4,4,4,1],[1,-0.94,22.798,0]],[40,"Button",33554432,[-138],[[1,-130,[5,100,40]],[22,1,0,-131,[4,4293643911],8],[9,2,-134,[[10,"e0f80zveGpGMKehbGHBUZ0y","choseDds",-133]],[4,4292269782],-132,9,10,11,12],[66,-137,-136,-135]],[1,94,-38,0]],[40,"Button",33554432,[-146],[[1,-139,[5,100,40]],[22,1,0,-140,[4,4293643911],14],[9,2,-143,[[10,"a949arMe05AOaRUaqeKP9PR","closeRechargenum",-142]],[4,4292269782],-141,15,16,17,18],[67,-145,-144]],[1,94,-124.605,0]],[6,"Button",33554432,3,[-154],[[1,-147,[5,20,20]],[36,0,-148,[4,4278848010],20],[9,2,-151,[[10,"a949arMe05AOaRUaqeKP9PR","closeRechargenum",-150]],[4,4292269782],-149,21,22,23,24],[67,-153,-152]],[1,200.344,199.903,0]],[6,"Button-001",33554432,3,[-164],[[1,-155,[5,100,40]],[22,1,0,-156,[4,4293643911],25],[9,2,-159,[[10,"46eadJwItZJGYB5TfwbBK+G","text",-158]],[4,4292269782],-157,26,27,28,29],[119,-163,-162,-161,-160]],[1,-86,-126.605,0]],[6,"Button",33554432,10,[-172],[[1,-165,[5,20,20]],[36,0,-166,[4,4278848010],32],[9,2,-169,[[10,"a949arMe05AOaRUaqeKP9PR","closerechageModel",-168]],[4,4292269782],-167,33,34,35,36],[115,-171,-170]],[1,200.344,100.491,0]],[6,"Button-001",33554432,10,[-181],[[1,-173,[5,100,40]],[22,1,0,-174,[4,4293643911],37],[9,2,-177,[[10,"e0f80zveGpGMKehbGHBUZ0y","choseCoin",-176]],[4,4292269782],-175,38,39,40,41],[66,-180,-179,-178]],[1,-86,-38,0]],[6,"提现",33554432,1,[-189],[[1,-182,[5,100,40]],[20,1,0,-183,48],[9,2,-186,[[10,"a068aX7dtJAv74XQag5FB9n","openWithdrawalModal",-185]],[4,4292269782],-184,49,50,51,52],[105,-188,-187]],[1,6,120,0]],[34,"提现选择",false,33554432,1,[-194,-195,-196],[[[33,"pageView-horizontal<UITransform>",-190,[5,400,200]],[35,"pageView-horizontal<Sprite>",1,0,-191,[4,4294440444],90],[37,"pageView-horizontal<PageView>",false,-192],-193],4,4,4,1],[1,-0.94,22.798,0]],[40,"Button",33554432,[-205],[[1,-197,[5,100,40]],[22,1,0,-198,[4,4293643911],53],[9,2,-201,[[10,"a068aX7dtJAv74XQag5FB9n","choseDds",-200]],[4,4292269782],-199,54,55,56,57],[65,-204,-203,-202]],[1,94,-38,0]],[6,"Button",33554432,2,[-213],[[1,-206,[5,100,40]],[22,1,0,-207,[4,4293643911],59],[9,2,-210,[[10,"a949arMe05AOaRUaqeKP9PR","closeWithdrawalData",-209]],[4,4292269782],-208,60,61,62,63],[68,-212,-211]],[1,94,-133.744,0]],[6,"Button",33554432,2,[-221],[[1,-214,[5,20,20]],[36,0,-215,[4,4278848010],65],[9,2,-218,[[10,"a949arMe05AOaRUaqeKP9PR","closeWithdrawalData",-217]],[4,4292269782],-216,66,67,68,69],[68,-220,-219]],[1,200.344,199.903,0]],[6,"Button",33554432,18,[-229],[[1,-222,[5,20,20]],[36,0,-223,[4,4278848010],80],[9,2,-226,[[10,"a949arMe05AOaRUaqeKP9PR","closeWithdrawalModal",-225]],[4,4292269782],-224,81,82,83,84],[116,-228,-227]],[1,200.344,100.491,0]],[6,"Button-001",33554432,18,[-238],[[1,-230,[5,100,40]],[22,1,0,-231,[4,4293643911],85],[9,2,-234,[[10,"a068aX7dtJAv74XQag5FB9n","choseCoin",-233]],[4,4292269782],-232,86,87,88,89],[65,-237,-236,-235]],[1,-86,-38,0]],[55,"view",33554432,[-244,-245,-246],[[[1,-239,[5,400,200]],[28,-240],-241,[121,-243,-242]],4,4,1,4],[1,0,-2,0]],[40,"Button",33554432,[-254],[[1,-247,[5,20,20]],[36,0,-248,[4,4278848010],102],[9,2,-251,[[10,"a949arMe05AOaRUaqeKP9PR","closeUserdata",-250]],[4,4292269782],-249,103,104,105,106],[117,-253,-252]],[1,200.344,100.491,0]],[6,"nft",33554432,1,[-261],[[1,-255,[5,100,40]],[20,1,0,-256,108],[9,2,-259,[[10,"f1ef2cIlPRMf7DqznSUmC33","createNft",-258]],[4,4292269782],-257,109,110,111,112],[57,-260]],[1,8,-18,0]],[6,"out",33554432,1,[-268],[[1,-262,[5,100,40]],[20,1,0,-263,113],[9,2,-266,[[10,"a949arMe05AOaRUaqeKP9PR","getOut",-265]],[4,4292269782],-264,114,115,116,117],[69,-267]],[1,8,-188,0]],[6,"Button",33554432,1,[-275],[[1,-269,[5,100,40]],[20,1,0,-270,118],[9,2,-273,[[10,"f1ef2cIlPRMf7DqznSUmC33","getRechargeNew",-272]],[4,4292269782],-271,119,120,121,122],[57,-274]],[1,9.456,-71.867,0]],[6,"Button-001",33554432,1,[-282],[[1,-276,[5,100,40]],[20,1,0,-277,123],[9,2,-280,[[10,"f1ef2cIlPRMf7DqznSUmC33","takeWhData",-279]],[4,4292269782],-278,124,125,126,127],[57,-281]],[1,9.456,-127.867,0]],[6,"Button",33554432,6,[-290],[[1,-283,[5,20,20]],[36,0,-284,[4,4278848010],133],[9,2,-287,[[10,"a949arMe05AOaRUaqeKP9PR","closeMain",-286]],[4,4292269782],-285,134,135,136,137],[118,-289,-288]],[1,200.344,146.491,0]],[34,"代充地址",false,33554432,1,[-295,-296,-297],[[[33,"pageView-horizontal<UITransform>",-291,[5,400,200]],[35,"pageView-horizontal<Sprite>",1,0,-292,[4,4294440444],165],[37,"pageView-horizontal<PageView>",false,-293],-294],4,4,4,1],[1,-0.94,22.798,0]],[40,"Button",33554432,[-305],[[1,-298,[5,100,40]],[22,1,0,-299,[4,4293643911],149],[9,2,-302,[[10,"a949arMe05AOaRUaqeKP9PR","closeSubstitute",-301]],[4,4292269782],-300,150,151,152,153],[58,-304,-303]],[1,94,-38,0]],[6,"Button",33554432,31,[-313],[[1,-306,[5,20,20]],[36,0,-307,[4,4278848010],155],[9,2,-310,[[10,"a949arMe05AOaRUaqeKP9PR","closeSubstitute",-309]],[4,4292269782],-308,156,157,158,159],[58,-312,-311]],[1,200.344,100.491,0]],[6,"Button-001",33554432,31,[-321],[[1,-314,[5,100,40]],[22,1,0,-315,[4,4293643911],160],[9,2,-318,[[10,"a949arMe05AOaRUaqeKP9PR","closeSubstitute",-317]],[4,4292269782],-316,161,162,163,164],[58,-320,-319]],[1,-86,-38,0]],[6,"Button",33554432,8,[-329],[[1,-322,[5,20,20]],[36,0,-323,[4,4278848010],171],[9,2,-326,[[10,"a949arMe05AOaRUaqeKP9PR","closetanchuan",-325]],[4,4292269782],-324,172,173,174,175],[70,-328,-327]],[1,200.344,100.491,0]],[6,"Button-001",33554432,8,[-337],[[1,-330,[5,100,40]],[22,1,0,-331,[4,4293643911],176],[9,2,-334,[[10,"a949arMe05AOaRUaqeKP9PR","closetanchuan",-333]],[4,4292269782],-332,177,178,179,180],[70,-336,-335]],[1,8,-38,0]],[123,"main",[-342,-343,-344,-345,-346,1],[92,[],[-338,-339,-340,-341]],[124,[125,0.78125,[2,0.2,0.5019607843137255,0.8,0.520833125],[2,0.2,0.5019607843137255,0.8,0.520833125]],[126,true,1,1,[4,1929379840],[0,512,512]],[127,true,182,183],[128,[4,4292993505]],[129]]],[34,"UserData",false,33554432,1,[24,25],[[[33,"pageView-horizontal<UITransform>",-347,[5,400,200]],[35,"pageView-horizontal<Sprite>",1,0,-348,[4,4294440444],107],[37,"pageView-horizontal<PageView>",false,-349],-350],4,4,4,1],[1,-0.94,22.798,0]],[6,"view",33554432,6,[-353,-354,-355,-356],[[1,-351,[5,400,250]],[28,-352]],[1,-2,-14,0]],[89,"ScrollView",false,33554432,1,[-360,-361,-362],[[[1,-357,[5,500,250]],[20,1,0,-358,169],-359],4,4,1]],[40,"content",33554432,[-364,-365,-366,-367,-368],[[14,-363,[5,500,50],[0,0.5,1]]],[1,0,24,0]],[130,10],[51,"RechageNum",33554432,3,[-372,-373],[[[1,-369,[5,160,40]],[20,1,0,-370,13],-371],4,4,1],[1,49.99999999999994,2.0459999999999923,0]],[61,"充值记录",false,33554432,1,[-378],[[1,-374,[5,100,40]],[20,1,0,-375,43],[53,2,-377,[4,4292269782],-376,44,45,46,47]],[1,6,100,0]],[103,2],[51,"withdrawalNum",33554432,2,[-382,-383],[[[1,-379,[5,160,40]],[20,1,0,-380,58],-381],4,4,1],[1,49.99999999999994,0.04599999999999227,0]],[51,"toAddress",33554432,2,[-387,-388],[[[1,-384,[5,160,40]],[22,1,0,-385,[4,4294177784],75],-386],4,4,1],[1,50,-79.954,0]],[55,"Toggle1",33554432,[-392],[[[1,-389,[5,32,32]],[64,0,-390,77],-391],4,4,1],[1,-5.664,3.885,0]],[55,"Toggle2",33554432,[-396],[[[1,-393,[5,32,32]],[64,0,-394,76],-395],4,4,1],[1,85.475,3.885,0]],[61,"提现记录",false,33554432,1,[-401],[[1,-397,[5,100,40]],[20,1,0,-398,91],[53,2,-400,[4,4292269782],-399,92,93,94,95]],[1,12,-84,0]],[6,"EditBox",33554432,39,[-407,-408],[[1,-402,[5,160,40]],[20,1,0,-403,128],[71,6,8,-406,-405,-404,129]],[1,18,32,0]],[6,"EditBox-001",33554432,39,[-414,-415],[[1,-409,[5,160,40]],[20,1,0,-410,130],[71,6,8,-413,-412,-411,131]],[1,18,92,0]],[6,"Button-001",33554432,6,[-420],[[1,-416,[5,100,40]],[22,1,0,-417,[4,4293643911],138],[53,2,-419,[4,4292269782],-418,139,140,141,142]],[1,-86,-66,0]],[6,"Button",33554432,6,[-425],[[1,-421,[5,100,40]],[22,1,0,-422,[4,4293643911],143],[53,2,-424,[4,4292269782],-423,144,145,146,147]],[1,94,-66,0]],[43,"view",33554432,31,[-428,32,-429],[[1,-426,[5,400,200]],[28,-427]]],[51,"scrollBar",33554432,40,[-434],[[[14,-430,[5,12,250],[0,1,0.5]],[20,1,0,-431,166],[98,37,250,1,-432],-433],4,4,4,1],[1,250,0,0]],[6,"view",33554432,40,[-438,-439],[[1,-435,[5,500,200]],[28,-436],[112,-437,[[29],[29],[29],[29],[29],[29],[29],[29],[29],[29]],168]],[1,0,-22,0]],[43,"view",33554432,10,[-442,11],[[1,-440,[5,400,200]],[28,-441]]],[120,3,42],[132,18],[43,"view",33554432,18,[-445,19],[[1,-443,[5,400,200]],[28,-444]]],[4,["05cqZo8fxFQJfAkL2Aq/5W"]],[43,"view",33554432,3,[12],[[1,-446,[5,400,400]],[28,-447]]],[73,"",20,20,[4,4279505942]],[24,"Label",512,33554432,20,[[1,-448,[5,100,40]],[15,"取消",20,20,1,false,-449,[4,4278190080]],[69,-450]]],[43,"view",33554432,2,[-453],[[1,-451,[5,400,400]],[28,-452]]],[6,"ToggleGroup",33554432,2,[48,49],[[138,-454]],[1,44.68,-44.68,0]],[122,24],[139,31],[6,"view-001",33554432,40,[41],[[1,-455,[5,500,50]],[28,-456]],[1,0,100,0]],[50,0,null,37,[52,"26LvC5hbxAuJZ9Jl2SB/IV",-457,[59,"cdNOYl3LRPhapW8a8hi/Iy",null,[[11,["lightmapSettings"],[4,["ddvMFij+ZIL5lu+/NQX8Nf"]],[3]],[11,["lightmapSettings"],[4,["e3XMjUJKFLH41z39JaWzyB"]],[3]],[141,["position"],[4,["fd517lz3tOuqVWGd5300X6"]],[1,-1.341,0.805,-2.555]],[11,["lightmapSettings"],[4,["a5Viy6l3VLDpf6gY5yZF+v"]],[3]],[23,1,["_shadowCastingMode"],[4,["a5Viy6l3VLDpf6gY5yZF+v"]]],[11,["lightmapSettings"],[4,["e4If/bQrJCsb9D9JopZa2h"]],[3]],[11,["lightmapSettings"],[4,["d7Vkz0NV5Mn4RUce28JVTp"]],[3]],[11,["lightmapSettings"],[4,["3eVATgLQJKDbqOvE33W2uc"]],[3]],[11,["lightmapSettings"],[4,["2akU/MgO5Ovo6QcS0c/I7e"]],[3]],[11,["lightmapSettings"],[4,["54xaKIQbtPLK5r21VY0qmM"]],[3]],[11,["lightmapSettings"],[4,["23UFBqszxJ/6Otof04QwYT"]],[3]],[11,["lightmapSettings"],[4,["c7PE6gNTdDw45ytwlOEWR3"]],[3]]]],0]],[50,0,null,37,[52,"6dMvPN2t1B66O9Zc3HG8dr",-458,[59,"93xtJEZ71OF5Gk8u497J9k",null,[[11,["lightmapSettings"],[4,["78XZsd31xPjIsSP2888FcN"]],[3]],[11,["lightmapSettings"],[4,["ffoVYmt2NOmIBz5DHpacF8"]],[3]],[11,["lightmapSettings"],[4,["9aCVBuMeZPv6so1VxT6c40"]],[3]],[11,["lightmapSettings"],[4,["ca1srfPsJJgKKJww9GO/JE"]],[3]]]],1]],[50,0,null,37,[52,"e5Peksu5tL9peMeABb8/JC",-459,[59,"7e4SH9jydKyaQjXZtS5AiQ",null,[[11,["lightmapSettings"],[4,["a6J1jU/r1BPKNIcVMEREit"]],[3]],[23,1,["_shadowReceivingMode"],[4,["a6J1jU/r1BPKNIcVMEREit"]]],[11,["lightmapSettings"],[4,["28WH2cvhNDFbN3it+8Q+XK"]],[3]],[23,1,["_shadowReceivingMode"],[4,["28WH2cvhNDFbN3it+8Q+XK"]]],[11,["lightmapSettings"],[4,["87exLhmM1P35jx6GLN7j5f"]],[3]],[23,1,["_shadowReceivingMode"],[4,["87exLhmM1P35jx6GLN7j5f"]]],[11,["lightmapSettings"],[4,["dduLonFhNK+q908BUlLM7f"]],[3]],[23,1,["_shadowCastingMode"],[4,["dduLonFhNK+q908BUlLM7f"]]],[23,1,["_shadowReceivingMode"],[4,["dduLonFhNK+q908BUlLM7f"]]],[11,["lightmapSettings"],[4,["af0f1GeGlKf5MvKMEuH8MJ"]],[3]],[23,1,["_shadowReceivingMode"],[4,["af0f1GeGlKf5MvKMEuH8MJ"]]],[11,["lightmapSettings"],[4,["e9BPt5G81CloUmA5IJNHIQ"]],[3]],[23,1,["_shadowReceivingMode"],[4,["e9BPt5G81CloUmA5IJNHIQ"]]],[11,["lightmapSettings"],[4,["7dt8ZZ5EBNDIxOgpt1XbGu"]],[3]],[23,1,["_shadowReceivingMode"],[4,["7dt8ZZ5EBNDIxOgpt1XbGu"]]],[11,["lightmapSettings"],[4,["c4Nekl9YtKUKupS0ASX7It"]],[3]],[23,1,["_shadowReceivingMode"],[4,["c4Nekl9YtKUKupS0ASX7It"]]],[11,["lightmapSettings"],[4,["b9cuhcVRxPvZTPHcAyE7eS"]],[3]],[23,1,["_shadowReceivingMode"],[4,["b9cuhcVRxPvZTPHcAyE7eS"]]],[11,["lightmapSettings"],[4,["f3T3OFBBJBYrGbPSQ+k7GJ"]],[3]],[23,1,["_shadowReceivingMode"],[4,["f3T3OFBBJBYrGbPSQ+k7GJ"]]],[11,["lightmapSettings"],[4,["d0A5LfhGhAfrDnBGJ3JzOe"]],[3]],[23,1,["_shadowReceivingMode"],[4,["d0A5LfhGhAfrDnBGJ3JzOe"]]],[11,["lightmapSettings"],[4,["161SEdWiFO/abXxUI8RkYk"]],[3]],[23,1,["_shadowReceivingMode"],[4,["161SEdWiFO/abXxUI8RkYk"]]]]],2]],[31,"Label",33554432,9,[[1,-460,[5,100,40]],[15,"充值",20,20,1,false,-461,[4,4278190080]]]],[5,"Label",33554432,58,[[1,-462,[5,240,50.4]],[12,"选择需要充值的游戏币种类",20,20,-463,[4,4278321666]]],[1,2,40,0]],[31,"Label",33554432,11,[[1,-464,[5,100,40]],[15,"钻石",20,20,1,false,-465,[4,4278190080]]]],[5,"Label",33554432,3,[[1,-466,[5,85.56,50.4]],[12,"充值数量:",20,20,-467,[4,4278321666]]],[1,-82,4.045999999999992,0]],[44,"TEXT_LABEL",false,33554432,43,[[[14,-468,[5,158,40],[0,0,1]],-469],4,1],[1,-78,4,0]],[16,"PLACEHOLDER_LABEL",33554432,43,[[[14,-470,[5,158,40],[0,0,1]],-471],4,1],[1,-78,20,0]],[131,5,8,43],[24,"Label",512,33554432,12,[[1,-472,[5,100,40]],[15,"取消",20,20,1,false,-473,[4,4278190080]]]],[5,"Label",33554432,13,[[1,-474,[5,100,40]],[38,"",20,20,1,false,-475,[4,4278190080],19]],[1,-12,0,0]],[24,"Label",512,33554432,14,[[1,-476,[5,100,40]],[15,"直充",20,20,1,false,-477,[4,4278190080]]]],[133,"",0,21,20,20,2,[4,4279045390]],[16,"privateddress",33554432,3,[[[1,-478,[5,200,40]],84],4,1],[1,69.303,-46,0]],[16,"ethPrice",33554432,3,[[[1,-479,[5,0,50.4]],64],4,1],[1,22,55.462,0]],[5,"Label",33554432,3,[[1,-480,[5,100,50.4]],[12,"ETH比例",20,20,-481,[4,4279505942]]],[1,-78.404,49.706,0]],[5,"Label-001",33554432,3,[[1,-482,[5,114.44,50.4]],[12,"USDT比例",20,20,-483,[4,4279505942]]],[1,-83.78,95.862,0]],[5,"货币名称",33554432,3,[[1,-484,[5,120,50.4]],[12,"充值货币名:",20,20,-485,[4,4279505942]]],[1,-80.707,142.018,0]],[16,"usdtPrice",33554432,3,[[[1,-486,[5,0,50.4]],-487],4,1],[1,22,99.412,0]],[16,"name",33554432,3,[[[1,-488,[5,0,50.4]],-489],4,1],[1,20,146.872,0]],[5,"Label-002",33554432,3,[[1,-490,[5,100,50.4]],[12,"代充地址:",20,20,-491,[4,4278387459]]],[1,-80,-46,0]],[5,"Label",33554432,15,[[1,-492,[5,100,40]],[38,"",20,20,1,false,-493,[4,4278190080],31]],[1,-12,0,0]],[31,"Label",33554432,16,[[1,-494,[5,100,40]],[15,"金币",20,20,1,false,-495,[4,4278190080]]]],[5,"Label",33554432,44,[[1,-496,[5,100,40]],[15,"充值记录",20,20,1,false,-497,[4,4278190080]]],[1,2,2,0]],[31,"Label",33554432,17,[[1,-498,[5,100,40]],[15,"提现",20,20,1,false,-499,[4,4278190080]]]],[5,"Label",33554432,61,[[1,-500,[5,240,50.4]],[12,"请选择要提现的游戏币种类",20,20,-501,[4,4278321666]]],[1,2,40,0]],[31,"Label",33554432,19,[[1,-502,[5,100,40]],[15,"钻石",20,20,1,false,-503,[4,4278190080]]]],[16,"TEXT_LABEL",33554432,46,[[[14,-504,[5,158,40],[0,0,1]],-505],4,1],[1,-78,20,0]],[44,"PLACEHOLDER_LABEL",false,33554432,46,[[[14,-506,[5,158,40],[0,0,1]],-507],4,1],[1,-78,20,0]],[72,"1",3,8,46],[5,"Label",33554432,66,[[1,-508,[5,85.56,50.4]],[12,"提现数量:",20,20,-509,[4,4278321666]]],[1,-82,0.046,0]],[5,"Label",33554432,21,[[1,-510,[5,100,40]],[38,"",20,20,1,false,-511,[4,4278190080],64]],[1,-12,0,0]],[24,"Label",512,33554432,4,[[1,-512,[5,100,40]],[15,"提现",20,20,1,false,-513,[4,4278190080]]]],[72,"1",6,64,47],[16,"TEXT_LABEL",33554432,47,[[[14,-514,[5,158,40],[0,0,1]],-515],4,1],[1,-78,20,0]],[44,"PLACEHOLDER_LABEL",false,33554432,47,[[[14,-516,[5,158,40],[0,0,1]],-517],4,1],[1,-78,20,0]],[73,"",20,20,[4,4279505942]],[16,"name",33554432,2,[[[1,-518,[5,0,50.4]],108],4,1],[1,20,142.872,0]],[143,48,[4,4292269782],48],[87,"usdt",false,33554432,49,[[[33,"Checkmark<UITransformComponent>",-519,[5,32,32]],-520],4,1]],[144,false,49,[4,4292269782],49],[88,"eth",33554432,48,[[[1,-521,[5,32,32]],-522],4,1]],[5,"ETH比例",33554432,2,[[1,-523,[5,100,50.4]],[12,"ETH比例",20,20,-524,[4,4279505942]]],[1,-78.404,49.706,0]],[5,"USDT比例",33554432,2,[[1,-525,[5,114.44,50.4]],[12,"USDT比例",20,20,-526,[4,4279505942]]],[1,-83.78,95.862,0]],[5,"提现货币名:",33554432,2,[[1,-527,[5,140,50.4]],[12,"提现游戏币名:",20,20,-528,[4,4279505942]]],[1,-96.707,142.018,0]],[5,"ethPrice",33554432,2,[[1,-529,[5,0,50.4]],[12,"",20,20,-530,[4,4279505942]]],[1,22,51.462,0]],[5,"usdtPrice",33554432,2,[[1,-531,[5,0,50.4]],[12,"",20,20,-532,[4,4279505942]]],[1,22,93.412,0]],[5,"Label-003",33554432,2,[[1,-533,[5,80,50.4]],[12,"提现成:",20,20,-534,[4,4279045390]]],[1,-71.131,-42.738,0]],[5,"Label-004",33554432,2,[[1,-535,[5,40,50.4]],[12,"ETH",20,20,-536,[4,4279374356]]],[1,-5.828,-40.795,0]],[5,"Label-005",33554432,2,[[1,-537,[5,54.44,50.4]],[12,"USDT",20,20,-538,[4,4279374356]]],[1,85.475,-40.795,0]],[5,"提现地址",33554432,2,[[1,-539,[5,100,50.4]],[12,"提现地址:",20,20,-540,[4,4279505942]]],[1,-78.707,-77.982,0]],[5,"Label",33554432,22,[[1,-541,[5,100,40]],[38,"",20,20,1,false,-542,[4,4278190080],79]],[1,-12,0,0]],[31,"Label",33554432,23,[[1,-543,[5,100,40]],[15,"金币",20,20,1,false,-544,[4,4278190080]]]],[31,"Label",33554432,50,[[1,-545,[5,100,40]],[15,"提现记录",20,20,1,false,-546,[4,4278190080]]]],[31,"Label",33554432,5,[[1,-547,[5,100,40]],[15,"个人信息",20,20,1,false,-548,[4,4278190080]]]],[108,38,[134,"111",0,20,20,[4,4278321666]],68],[5,"Label-002",33554432,24,[[1,-549,[5,100,50.4]],[12,"钱包地址:",20,20,-550,[4,4278321666]]],[1,-130,20,0]],[16,"address",33554432,24,[[[1,-551,[5,250,80]],-552],4,1],[1,39.296,5.407,0]],[135,"",20,20,1,2,129,[4,4278321666]],[5,"Label",33554432,24,[[1,-553,[5,80,50.4]],[12,"个人信息",20,20,-554,[4,4278716424]]],[1,0,76,0]],[5,"Label",33554432,25,[[1,-555,[5,100,40]],[38,"",20,20,1,false,-556,[4,4278190080],101]],[1,-12,0,0]],[78,"Label",512,33554432,26,[[1,-557,[5,100,40]],[15,"创建nft",20,20,1,false,-558,[4,4278190080]]],[1,-2,0,0]],[24,"Label",512,33554432,27,[[1,-559,[5,100,40]],[15,"退出",20,20,1,false,-560,[4,4278190080]]]],[24,"Label",512,33554432,28,[[1,-561,[5,100,40]],[15,"充值记录",20,20,1,false,-562,[4,4278190080]]]],[24,"Label",512,33554432,29,[[1,-563,[5,100,40]],[15,"提现记录",20,20,1,false,-564,[4,4278190080]]]],[5,"Label",33554432,39,[[1,-565,[5,85.56,50.4]],[12,"提现地址:",20,20,-566,[4,4278321666]]],[1,-116,34,0]],[44,"TEXT_LABEL",false,33554432,51,[[[14,-567,[5,158,40],[0,0,1]],-568],4,1],[1,-78,20,0]],[16,"PLACEHOLDER_LABEL",33554432,51,[[[14,-569,[5,158,40],[0,0,1]],-570],4,1],[1,-78,20,0]],[5,"Label-001",33554432,39,[[1,-571,[5,85.56,50.4]],[12,"提现数量:",20,20,-572,[4,4278321666]]],[1,-116,92,0]],[44,"TEXT_LABEL",false,33554432,52,[[[14,-573,[5,158,40],[0,0,1]],-574],4,1],[1,-78,20,0]],[16,"PLACEHOLDER_LABEL",33554432,52,[[[14,-575,[5,158,40],[0,0,1]],-576],4,1],[1,-78,20,0]],[5,"Label",33554432,30,[[1,-577,[5,100,40]],[38,"",20,20,1,false,-578,[4,4278190080],132]],[1,-12,0,0]],[24,"Label",512,33554432,53,[[1,-579,[5,100,40]],[15,"确定",20,20,1,false,-580,[4,4278190080]]]],[24,"Label",512,33554432,54,[[1,-581,[5,100,40]],[15,"取消",20,20,1,false,-582,[4,4278190080]]]],[5,"Label",33554432,55,[[1,-583,[5,140,50.4]],[12,"代充收款地址:",20,20,-584,[4,4278321666]]],[1,-116,34,0]],[24,"Label",512,33554432,32,[[1,-585,[5,100,40]],[15,"取消",20,20,1,false,-586,[4,4278190080]]]],[5,"Address",33554432,55,[[1,-587,[5,0,50.4]],[136,"",20,20,1,-588,[4,4278321666]]],[1,-54,40,0]],[5,"Label",33554432,33,[[1,-589,[5,100,40]],[38,"",20,20,1,false,-590,[4,4278190080],154]],[1,-12,0,0]],[24,"Label",512,33554432,34,[[1,-591,[5,100,40]],[15,"确定",20,20,1,false,-592,[4,4278190080]]]],[16,"bar",33554432,56,[[[14,-593,[5,10,156.25],[0,0,0]],-594],4,1],[1,-11,-31.25,0]],[16,"BCTYPE",33554432,7,[[[1,-595,[5,0,25.2]],-596],4,1],[1,-198,-10.15,0]],[16,"Num",33554432,7,[[[14,-597,[5,0,25.2],[0,0,1]],-598],4,1],[1,-126,-10.15,0]],[16,"type",33554432,7,[[[14,-599,[5,0,25.2],[0,0,1]],-600],4,1],[1,-60,-10.15,0]],[16,"Price",33554432,7,[[[14,-601,[5,0,25.2],[0,0,1]],-602],4,1],[1,46,-10.15,0]],[16,"time",33554432,7,[[[14,-603,[5,0,25.2],[0,0,1]],-604],4,1],[1,154,-10.15,0]],[50,0,{},57,[52,"05cqZo8fxFQJfAkL2Aq/5W",-605,[140,"09hM/YS2NEfYPfVZoQ8nns",[[142,"Item",["_name"],62],[54,["_lpos"],62,[1,0,96,0]],[54,["_lscale"],62,[1,1,1,1]],[54,["_lrot"],62,[3,0,0,0,1]],[54,["_euler"],62,[1,0,0,0]]]],167]],[5,"Layout",33554432,57,[[1,-606,[5,500,400]],[145,1,1,-607]],[1,0,-102,0]],[5,"item",33554432,41,[[14,-608,[5,64,25.2],[0,0,1]],[30,"充值类型",0,0,16,16,20,-609,[4,4278190080]]],[1,-196,-10.15,0]],[5,"item-001",33554432,41,[[14,-610,[5,64,25.2],[0,0,1]],[30,"充值数量",0,0,16,16,20,-611,[4,4278190080]]],[1,-128,-10.15,0]],[5,"item-002",33554432,41,[[14,-612,[5,96,25.2],[0,0,1]],[30,"充值货币类型",0,0,16,16,20,-613,[4,4278190080]]],[1,-62,-10.15,0]],[5,"item-003",33554432,41,[[14,-614,[5,96,25.2],[0,0,1]],[30,"充值货币数量",0,0,16,16,20,-615,[4,4278190080]]],[1,48,-10.15,0]],[5,"item-004",33554432,41,[[14,-616,[5,32,25.2],[0,0,1]],[30,"时间",0,0,16,16,20,-617,[4,4278190080]]],[1,156,-10.15,0]],[5,"news",33554432,8,[[1,-618,[5,140,50.4]],[12,"代充收款地址:",20,20,-619,[4,4278321666]]],[1,12,34,0]],[31,"view",33554432,8,[[1,-620,[5,400,200]],[28,-621]]],[5,"Label",33554432,35,[[1,-622,[5,100,40]],[38,"",20,20,1,false,-623,[4,4278190080],170]],[1,-12,0,0]],[146,8,45],[24,"Label",512,33554432,36,[[1,-624,[5,100,40]],[15,"确定",20,20,1,false,-625,[4,4278190080]]]],[62,"Main Light","c0y6F5f+pAvI805TdmxIjx",37,[[147,125000,3.2552083333333335,true,2,0.01,0.45098039215686275,10,1,50,10,-626,[148]]],[1,-2.955,3.412,5.118],[3,-0.24999999999999997,-0.24999999999999997,-0.06698729810778066,0.9330127018922194],[1,-30,-30,0]],[62,"Main Camera","c9DMICJLFO5IeO07EPon7U",37,[[149,14,1820327937,-627]],[1,0.4563737338172984,4.020698998822525,7.83104356477376],[3,-0.07236081996736556,0.03501809641207027,0.002542173940871125,0.9967603433167774],[1,-8.304321541008003,4.024165472580301,9.93923337957349e-17]],[90,"Camera",1,[-628],[1,0,0,1000]],[150,0,1073741824,320,2000,6,41943040,171,[4,4278190080]],[137,"",0,0,40,20,1,false,78,[4,4278321666]],[41,"请输入充值数量",0,20,20,1,false,79,[4,4278782218]],[12,"",20,20,90,[4,4279505942]],[12,"",20,20,91,[4,4279505942]],[41,"1",0,20,20,1,false,99,[4,4279045390]],[41,"请输入提现数量",0,20,20,1,false,100,[4,4278782218]],[41,"1",0,20,20,1,false,106,[4,4278913804]],[41,"请输入提现地址",0,20,20,1,false,107,[4,4278782218]],[99,"Checkmark<SpriteComponent>",0,111],[100,0,113],[74,"",0,40,20,1,false,138],[41,"请输入提现地址",0,20,20,1,false,139,[4,4278782218]],[74,"",0,40,20,1,false,141],[41,"请输入提现数量",0,20,20,1,false,142,[4,4278782218]],[151,6],[101,1,0,151],[152,1,56,188],[153,0.23,0.75,false,40,7,189],[30,"",0,0,16,16,20,152,[4,4278190080]],[30,"",0,0,16,16,20,153,[4,4278190080]],[30,"",0,0,16,16,20,154,[4,4278190080]],[30,"",0,0,16,16,20,155,[4,4278190080]],[30,"",0,0,16,16,20,156,[4,4278190080]]],0,[0,0,1,0,44,172,0,0,1,0,0,1,0,-1,171,0,-2,9,0,-3,44,0,-4,17,0,-5,50,0,-6,5,0,-7,26,0,-8,27,0,-9,28,0,-10,29,0,-11,3,0,-12,6,0,-13,31,0,-14,38,0,-15,40,0,-16,10,0,-17,18,0,-18,2,0,-19,8,0,0,2,0,0,2,0,0,2,0,-4,45,0,-1,46,0,-2,20,0,-3,66,0,-4,21,0,-5,4,0,-6,114,0,-7,115,0,-8,116,0,-9,117,0,-10,118,0,-11,109,0,-12,67,0,-13,119,0,-14,120,0,-15,121,0,-16,122,0,-17,47,0,0,3,0,0,3,0,0,3,0,-4,59,0,-1,77,0,-2,43,0,-3,63,0,-4,13,0,-5,14,0,-6,87,0,-7,88,0,-8,89,0,-9,86,0,-10,90,0,-11,91,0,-12,85,0,-13,92,0,0,4,0,0,4,0,4,4,0,9,4,0,0,4,0,26,112,0,27,110,0,23,108,0,28,105,0,29,101,0,0,4,0,0,4,0,-1,104,0,0,5,0,0,5,0,4,5,0,9,5,0,0,5,0,45,68,0,46,127,0,0,5,0,47,68,0,0,5,0,-1,126,0,0,6,0,0,6,0,0,6,0,-4,187,0,-1,39,0,-2,30,0,-3,53,0,-4,54,0,0,7,0,30,195,0,31,194,0,32,193,0,33,192,0,34,191,0,0,7,0,0,7,0,-1,152,0,-2,153,0,-3,154,0,-4,155,0,-5,156,0,0,8,0,0,8,0,0,8,0,-4,167,0,-1,164,0,-2,165,0,-3,35,0,-4,36,0,0,9,0,0,9,0,4,9,0,9,9,0,0,9,0,48,42,0,0,9,0,-1,74,0,0,10,0,0,10,0,0,10,0,-4,42,0,-1,58,0,-2,15,0,-3,16,0,0,11,0,0,11,0,4,11,0,9,11,0,0,11,0,35,42,0,36,59,0,0,11,0,-1,76,0,0,12,0,0,12,0,4,12,0,9,12,0,0,12,0,37,59,0,0,12,0,-1,81,0,0,13,0,0,13,0,4,13,0,9,13,0,0,13,0,37,59,0,0,13,0,-1,82,0,0,14,0,0,14,0,4,14,0,9,14,0,0,14,0,38,64,0,39,84,0,40,80,0,0,14,0,-1,83,0,0,15,0,0,15,0,4,15,0,9,15,0,0,15,0,49,42,0,0,15,0,-1,93,0,0,16,0,0,16,0,4,16,0,9,16,0,0,16,0,35,42,0,36,59,0,0,16,0,-1,94,0,0,17,0,0,17,0,4,17,0,9,17,0,0,17,0,24,60,0,0,17,0,-1,96,0,0,18,0,0,18,0,0,18,0,-4,60,0,-1,61,0,-2,22,0,-3,23,0,0,19,0,0,19,0,4,19,0,9,19,0,0,19,0,21,45,0,24,60,0,0,19,0,-1,98,0,0,20,0,0,20,0,4,20,0,9,20,0,0,20,0,21,45,0,0,20,0,-1,65,0,0,21,0,0,21,0,4,21,0,9,21,0,0,21,0,21,45,0,0,21,0,-1,103,0,0,22,0,0,22,0,4,22,0,9,22,0,0,22,0,50,60,0,0,22,0,-1,123,0,0,23,0,0,23,0,4,23,0,9,23,0,0,23,0,21,45,0,24,60,0,0,23,0,-1,124,0,0,24,0,0,24,0,-3,68,0,41,130,0,0,24,0,-1,128,0,-2,129,0,-3,131,0,0,25,0,0,25,0,4,25,0,9,25,0,0,25,0,51,127,0,0,25,0,-1,132,0,0,26,0,0,26,0,4,26,0,9,26,0,0,26,0,0,26,0,-1,133,0,0,27,0,0,27,0,4,27,0,9,27,0,0,27,0,0,27,0,-1,134,0,0,28,0,0,28,0,4,28,0,9,28,0,0,28,0,0,28,0,-1,135,0,0,29,0,0,29,0,4,29,0,9,29,0,0,29,0,0,29,0,-1,136,0,0,30,0,0,30,0,4,30,0,9,30,0,0,30,0,52,187,0,0,30,0,-1,143,0,0,31,0,0,31,0,0,31,0,-4,69,0,-1,55,0,-2,33,0,-3,34,0,0,32,0,0,32,0,4,32,0,9,32,0,0,32,0,25,69,0,0,32,0,-1,147,0,0,33,0,0,33,0,4,33,0,9,33,0,0,33,0,25,69,0,0,33,0,-1,149,0,0,34,0,0,34,0,4,34,0,9,34,0,0,34,0,25,69,0,0,34,0,-1,150,0,0,35,0,0,35,0,4,35,0,9,35,0,0,35,0,42,167,0,0,35,0,-1,166,0,0,36,0,0,36,0,4,36,0,9,36,0,0,36,0,42,167,0,0,36,0,-1,168,0,-1,71,0,-2,72,0,-3,73,0,-4,157,0,-1,169,0,-2,170,0,-3,71,0,-4,72,0,-5,73,0,0,38,0,0,38,0,0,38,0,-4,127,0,0,39,0,0,39,0,-1,137,0,-2,51,0,-3,140,0,-4,52,0,0,40,0,0,40,0,-3,190,0,-1,56,0,-2,57,0,-3,70,0,0,41,0,-1,159,0,-2,160,0,-3,161,0,-4,162,0,-5,163,0,0,43,0,0,43,0,-3,80,0,-1,78,0,-2,79,0,0,44,0,0,44,0,4,44,0,0,44,0,-1,95,0,0,46,0,0,46,0,-3,101,0,-1,99,0,-2,100,0,0,47,0,0,47,0,-3,105,0,-1,106,0,-2,107,0,0,48,0,0,48,0,-3,110,0,-1,113,0,0,49,0,0,49,0,-3,112,0,-1,111,0,0,50,0,0,50,0,4,50,0,0,50,0,-1,125,0,0,51,0,0,51,0,17,184,0,18,183,0,0,51,0,-1,138,0,-2,139,0,0,52,0,0,52,0,17,186,0,18,185,0,0,52,0,-1,141,0,-2,142,0,0,53,0,0,53,0,4,53,0,0,53,0,-1,144,0,0,54,0,0,54,0,4,54,0,0,54,0,-1,145,0,0,55,0,0,55,0,-1,146,0,-3,148,0,0,56,0,0,56,0,0,56,0,-4,189,0,-1,151,0,0,57,0,0,57,0,0,57,0,-1,157,0,-2,158,0,0,58,0,0,58,0,-1,75,0,0,61,0,0,61,0,-1,97,0,0,63,0,0,63,0,0,65,0,0,65,0,0,65,0,0,66,0,0,66,0,-1,102,0,0,67,0,0,70,0,0,70,0,13,71,0,13,72,0,13,73,0,0,74,0,0,74,0,0,75,0,0,75,0,0,76,0,0,76,0,0,77,0,0,77,0,0,78,0,-2,173,0,0,79,0,-2,174,0,0,81,0,0,81,0,0,82,0,0,82,0,0,83,0,0,83,0,0,85,0,0,86,0,0,87,0,0,87,0,0,88,0,0,88,0,0,89,0,0,89,0,0,90,0,-2,175,0,0,91,0,-2,176,0,0,92,0,0,92,0,0,93,0,0,93,0,0,94,0,0,94,0,0,95,0,0,95,0,0,96,0,0,96,0,0,97,0,0,97,0,0,98,0,0,98,0,0,99,0,-2,177,0,0,100,0,-2,178,0,0,102,0,0,102,0,0,103,0,0,103,0,0,104,0,0,104,0,0,106,0,-2,179,0,0,107,0,-2,180,0,0,109,0,0,111,0,-2,181,0,0,113,0,-2,182,0,0,114,0,0,114,0,0,115,0,0,115,0,0,116,0,0,116,0,0,117,0,0,117,0,0,118,0,0,118,0,0,119,0,0,119,0,0,120,0,0,120,0,0,121,0,0,121,0,0,122,0,0,122,0,0,123,0,0,123,0,0,124,0,0,124,0,0,125,0,0,125,0,0,126,0,0,126,0,0,128,0,0,128,0,0,129,0,-2,130,0,0,131,0,0,131,0,0,132,0,0,132,0,0,133,0,0,133,0,0,134,0,0,134,0,0,135,0,0,135,0,0,136,0,0,136,0,0,137,0,0,137,0,0,138,0,-2,183,0,0,139,0,-2,184,0,0,140,0,0,140,0,0,141,0,-2,185,0,0,142,0,-2,186,0,0,143,0,0,143,0,0,144,0,0,144,0,0,145,0,0,145,0,0,146,0,0,146,0,0,147,0,0,147,0,0,148,0,0,148,0,0,149,0,0,149,0,0,150,0,0,150,0,0,151,0,-2,188,0,0,152,0,-2,191,0,0,153,0,-2,192,0,0,154,0,-2,193,0,0,155,0,-2,194,0,0,156,0,-2,195,0,13,157,0,0,158,0,0,158,0,0,159,0,0,159,0,0,160,0,0,160,0,0,161,0,0,161,0,0,162,0,0,162,0,0,163,0,0,163,0,0,164,0,0,164,0,0,165,0,0,165,0,0,166,0,0,166,0,0,168,0,0,168,0,0,169,0,0,170,0,-1,172,0,53,37,1,2,37,11,2,58,12,2,63,19,2,61,24,2,38,25,2,38,32,2,55,41,2,70,45,26,112,45,27,110,45,23,108,45,28,105,45,29,101,48,2,67,49,2,67,59,38,64,59,39,84,59,40,80,59,54,175,59,55,64,59,23,176,64,0,86,80,17,174,80,18,173,84,0,85,101,17,178,101,18,177,105,17,180,105,18,179,108,0,109,110,43,182,112,43,181,127,41,130,189,56,190,628],[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,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,80,101,105,181,112,182,110,188],[22,22,22,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,14,1,3,5,6,7,1,3,5,6,7,1,14,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,14,1,3,5,6,7,1,3,5,6,7,1,1,1,1,14,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,1,3,5,6,7,14,1,3,5,6,7,1,1,3,5,6,7,1,3,5,6,7,1,3,5,6,7,1,3,5,6,7,1,19,1,19,14,1,3,5,6,7,1,3,5,6,7,1,3,5,6,7,1,1,3,5,6,7,14,1,3,5,6,7,1,3,5,6,7,1,1,22,57,1,14,1,3,5,6,7,1,3,5,6,7,1,58,59,19,19,19,1,3,1,3,1],[26,27,28,0,0,0,1,2,0,0,0,1,2,8,0,0,0,1,2,10,4,4,0,1,2,0,0,0,1,2,9,10,4,4,0,1,2,0,0,0,1,2,9,0,0,0,1,2,0,0,0,1,2,0,0,0,1,2,8,0,0,0,1,2,10,4,4,0,1,2,0,0,0,1,2,8,12,12,9,10,4,4,0,1,2,0,0,0,1,2,9,0,0,0,1,2,0,0,0,1,2,10,4,4,0,1,2,9,0,0,0,1,2,0,0,0,1,2,0,0,0,1,2,0,0,0,1,2,8,8,8,8,10,4,4,0,1,2,0,0,0,1,2,0,0,0,1,2,9,0,0,0,1,2,10,4,4,0,1,2,0,0,0,1,2,9,29,16,16,9,10,4,4,0,1,2,0,0,0,1,2,9,17,17,8,8,8,18,12,18,12,30]],[[[42,"soldier",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_OUTLINE_PASS":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true}],[[{},[{},"specular",8,[4,16777215],"mainTexture",6,0],{},{}],0,11,0,0]]],0,0,[0,0],[15,16],[31,13]],[[[42,"shield",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_ALBEDO_MAP":true},{"USE_ALBEDO_MAP":true},{"USE_ALBEDO_MAP":true}],[[[{"alphaThreshold":0,"roughness":0.70710676908493,"metallic":0.400000005960464},"mainTexture",6,0],{},{}],11,0,0]]],0,0,[0,0],[15,16],[32,15]],[[{"name":"default_btn_disabled","rect":{"x":0,"y":0,"width":40,"height":40},"offset":{"x":0,"y":0},"originalSize":{"width":40,"height":40},"rotated":false,"capInsets":[12,12,12,12],"vertices":{"rawPosition":[-20,-20,0,20,-20,0,-20,20,0,20,20,0],"indexes":[0,1,2,2,1,3],"uv":[0,40,40,40,0,0,40,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-20,"y":-20,"z":0},"maxPos":{"x":20,"y":20,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[33]],[[[42,"stone",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}},{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_OUTLINE_PASS":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true,"BASE_COLOR_MAP_AS_SHADE_MAP_1":true,"BASE_COLOR_MAP_AS_SHADE_MAP_2":true},{"USE_BASE_COLOR_MAP":true}],[[{},[{},"specular",8,[4,16777215],"mainTexture",6,0],{},{}],0,11,0,0]]],0,0,[0,0],[15,16],[34,13]],[[[154,"builtin-toon",[{"hash":503443906,"name":"builtin-toon|legacy/main-functions/outline-vs:vert|legacy/main-functions/outline-fs:frag","blocks":[{"name":"OutlineVert","stageFlags":1,"binding":0,"members":[{"name":"outlineParams","type":16,"count":1}],"defines":[]},{"name":"OutlineFrag","stageFlags":16,"binding":1,"members":[{"name":"baseColor","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"baseColorMap","type":28,"count":1,"stageFlags":16,"binding":2,"defines":["USE_BASE_COLOR_MAP"]}],"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_localShadowBias","format":21,"isInstanced":true,"location":11,"defines":["USE_INSTANCING","CC_RECEIVE_SHADOW"]},{"name":"a_dyn_batch_id","format":11,"location":12,"defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"a_vertexId","format":11,"location":13,"defines":["CC_USE_MORPH"]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"glsl3":{"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.71828183f\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)\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}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nin vec3 a_position;\nin vec3 a_normal;\nin vec2 a_texCoord;\nin vec4 a_tangent;\n#if CC_USE_SKINNING\n in vec4 a_joints;\n in vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n in highp vec4 a_jointAnimInfo;\n #endif\n in vec4 a_matWorld0;\n in vec4 a_matWorld1;\n in vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n in vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n in vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n in float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n in float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n layout(std140) uniform CCMorph {\n vec4 cc_displacementWeights[15];\n vec4 cc_displacementTextureInfo;\n };\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 pixelIndex) {\n ivec2 texSize = textureSize(tex, 0);\n return texelFetch(tex, ivec2(pixelIndex % texSize.x, pixelIndex / texSize.x), 0);\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(texture(tex, x)),\n decode32(texture(tex, y)),\n decode32(texture(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 layout(std140) uniform CCSkinningTexture {\n highp vec4 cc_jointTextureInfo;\n };\n layout(std140) uniform CCSkinningAnimation {\n highp vec4 cc_jointAnimInfo;\n };\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 layout(std140) uniform CCSkinning {\n highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n };\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 = texture(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture(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(texture(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture(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 = texture(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture(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(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(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}\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\n#if !USE_INSTANCING\n #if USE_BATCHING\n layout(std140) uniform CCLocalBatched {\n highp mat4 cc_matWorlds[10];\n };\n #else\n layout(std140) uniform CCLocal {\n highp mat4 cc_matWorld;\n highp mat4 cc_matWorldIT;\n highp vec4 cc_lightingMapUVParam;\n highp vec4 cc_localShadowBias;\n };\n #endif\n#endif\nvoid CCGetWorldMatrix(out mat4 matWorld)\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 #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n #else\n matWorld = cc_matWorld;\n #endif\n}\nout vec2 v_uv;\nlayout(std140) uniform OutlineVert {\n vec4 outlineParams;\n};\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld;\n CCGetWorldMatrix(matWorld);\n float width = outlineParams.x * 0.001;\n #if USE_POSITION_SCALING\n vec3 dir = normalize(In.position.xyz);\n float flip = dot(dir, normalize(In.normal)) < 0.0 ? -1.0 : 1.0;\n In.position.xyz += flip * dir * width * 2.0;\n vec4 pos = cc_matProj * (cc_matView * matWorld) * In.position;\n #else\n In.position.xyz += normalize(In.normal) * width;\n vec4 pos = cc_matProj * (cc_matView * matWorld) * In.position;\n #endif\n pos.z -= outlineParams.y * 0.002;\n v_uv = a_texCoord;\n return pos;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_WORLD_POS CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR CC_SURFACES_DEBUG_VIEW_WORLD_POS + 1\n#define CC_SURFACES_DEBUG_VIEW_FACE_SIDE CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR + 1\n#define CC_SURFACES_DEBUG_VIEW_UV0 CC_SURFACES_DEBUG_VIEW_FACE_SIDE + 1\n#define CC_SURFACES_DEBUG_VIEW_UV1 CC_SURFACES_DEBUG_VIEW_UV0 + 1\n#define CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP CC_SURFACES_DEBUG_VIEW_UV1 + 1\n#define CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP + 1\n#define CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_BASE_COLOR CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR CC_SURFACES_DEBUG_VIEW_BASE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_TRANSPARENCY CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_METALLIC CC_SURFACES_DEBUG_VIEW_TRANSPARENCY + 1\n#define CC_SURFACES_DEBUG_VIEW_ROUGHNESS CC_SURFACES_DEBUG_VIEW_METALLIC + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY CC_SURFACES_DEBUG_VIEW_ROUGHNESS + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_ALL CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE CC_SURFACES_DEBUG_VIEW_DIRECT_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_ALL CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_EMISSIVE CC_SURFACES_DEBUG_VIEW_ENV_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_LIGHT_MAP CC_SURFACES_DEBUG_VIEW_EMISSIVE + 1\n#define CC_SURFACES_DEBUG_VIEW_SHADOW CC_SURFACES_DEBUG_VIEW_LIGHT_MAP + 1\n#define CC_SURFACES_DEBUG_VIEW_AO CC_SURFACES_DEBUG_VIEW_SHADOW + 1\n#define CC_SURFACES_DEBUG_VIEW_FOG CC_SURFACES_DEBUG_VIEW_AO + 1\n#define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#define IS_DEBUG_VIEW_LIGHTING_ENABLE_WITH_ALBEDO (cc_debug_view_mode.y > 0.0)\n#define IS_DEBUG_VIEW_MISC_ENABLE_CSM_LAYER_COLORATION (cc_debug_view_mode.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE (cc_debug_view_composite_pack_1.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR (cc_debug_view_composite_pack_1.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE (cc_debug_view_composite_pack_1.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR (cc_debug_view_composite_pack_1.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE (cc_debug_view_composite_pack_2.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP (cc_debug_view_composite_pack_2.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW (cc_debug_view_composite_pack_2.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO (cc_debug_view_composite_pack_2.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_NORMAL_MAP (cc_debug_view_composite_pack_3.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_FOG (cc_debug_view_composite_pack_3.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_TONE_MAPPING (cc_debug_view_composite_pack_3.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION (cc_debug_view_composite_pack_3.w > 0.0)\nvec3 SRGBToLinear (vec3 gamma) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return gamma;\n }\n #endif\n#endif\n return gamma * gamma;\n}\nvec4 CCFragOutput (vec4 color) {\n return color;\n}\nin vec2 v_uv;\nlayout(std140) uniform OutlineFrag {\n vec4 baseColor;\n};\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\nvec4 frag () {\n vec4 color = baseColor * cc_mainLitColor;\n #if USE_BASE_COLOR_MAP\n vec4 texColor = texture(baseColorMap, v_uv);\n texColor.rgb = SRGBToLinear(texColor.rgb);\n color *= texColor;\n #endif\n return CCFragOutput(vec4(color.rgb, 1.0));\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"},"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.71828183f\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)\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}\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_RECEIVE_SHADOW\n attribute vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n attribute float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n attribute float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\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#if !USE_INSTANCING\n #if USE_BATCHING\n uniform highp mat4 cc_matWorlds[10];\n #else\n uniform highp mat4 cc_matWorld;\n #endif\n#endif\nvoid CCGetWorldMatrix(out mat4 matWorld)\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 #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n #else\n matWorld = cc_matWorld;\n #endif\n}\nvarying vec2 v_uv;\n uniform vec4 outlineParams;\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld;\n CCGetWorldMatrix(matWorld);\n float width = outlineParams.x * 0.001;\n #if USE_POSITION_SCALING\n vec3 dir = normalize(In.position.xyz);\n float flip = dot(dir, normalize(In.normal)) < 0.0 ? -1.0 : 1.0;\n In.position.xyz += flip * dir * width * 2.0;\n vec4 pos = cc_matProj * (cc_matView * matWorld) * In.position;\n #else\n In.position.xyz += normalize(In.normal) * width;\n vec4 pos = cc_matProj * (cc_matView * matWorld) * In.position;\n #endif\n pos.z -= outlineParams.y * 0.002;\n v_uv = a_texCoord;\n return pos;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nuniform mediump vec4 cc_debug_view_mode;\n uniform mediump vec4 cc_debug_view_composite_pack_1;\n uniform mediump vec4 cc_debug_view_composite_pack_2;\n uniform mediump vec4 cc_debug_view_composite_pack_3;\nuniform mediump vec4 cc_mainLitColor;\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_WORLD_POS CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR CC_SURFACES_DEBUG_VIEW_WORLD_POS + 1\n#define CC_SURFACES_DEBUG_VIEW_FACE_SIDE CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR + 1\n#define CC_SURFACES_DEBUG_VIEW_UV0 CC_SURFACES_DEBUG_VIEW_FACE_SIDE + 1\n#define CC_SURFACES_DEBUG_VIEW_UV1 CC_SURFACES_DEBUG_VIEW_UV0 + 1\n#define CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP CC_SURFACES_DEBUG_VIEW_UV1 + 1\n#define CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP + 1\n#define CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_BASE_COLOR CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR CC_SURFACES_DEBUG_VIEW_BASE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_TRANSPARENCY CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_METALLIC CC_SURFACES_DEBUG_VIEW_TRANSPARENCY + 1\n#define CC_SURFACES_DEBUG_VIEW_ROUGHNESS CC_SURFACES_DEBUG_VIEW_METALLIC + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY CC_SURFACES_DEBUG_VIEW_ROUGHNESS + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_ALL CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE CC_SURFACES_DEBUG_VIEW_DIRECT_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_ALL CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_EMISSIVE CC_SURFACES_DEBUG_VIEW_ENV_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_LIGHT_MAP CC_SURFACES_DEBUG_VIEW_EMISSIVE + 1\n#define CC_SURFACES_DEBUG_VIEW_SHADOW CC_SURFACES_DEBUG_VIEW_LIGHT_MAP + 1\n#define CC_SURFACES_DEBUG_VIEW_AO CC_SURFACES_DEBUG_VIEW_SHADOW + 1\n#define CC_SURFACES_DEBUG_VIEW_FOG CC_SURFACES_DEBUG_VIEW_AO + 1\n#define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#define IS_DEBUG_VIEW_LIGHTING_ENABLE_WITH_ALBEDO (cc_debug_view_mode.y > 0.0)\n#define IS_DEBUG_VIEW_MISC_ENABLE_CSM_LAYER_COLORATION (cc_debug_view_mode.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE (cc_debug_view_composite_pack_1.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR (cc_debug_view_composite_pack_1.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE (cc_debug_view_composite_pack_1.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR (cc_debug_view_composite_pack_1.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE (cc_debug_view_composite_pack_2.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP (cc_debug_view_composite_pack_2.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW (cc_debug_view_composite_pack_2.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO (cc_debug_view_composite_pack_2.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_NORMAL_MAP (cc_debug_view_composite_pack_3.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_FOG (cc_debug_view_composite_pack_3.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_TONE_MAPPING (cc_debug_view_composite_pack_3.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION (cc_debug_view_composite_pack_3.w > 0.0)\nvec3 SRGBToLinear (vec3 gamma) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return gamma;\n }\n #endif\n#endif\n return gamma * gamma;\n}\nvec4 CCFragOutput (vec4 color) {\n return color;\n}\nvarying vec2 v_uv;\n uniform vec4 baseColor;\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\nvec4 frag () {\n vec4 color = baseColor * cc_mainLitColor;\n #if USE_BASE_COLOR_MAP\n vec4 texColor = texture2D(baseColorMap, v_uv);\n texColor.rgb = SRGBToLinear(texColor.rgb);\n color *= texColor;\n #endif\n return CCFragOutput(vec4(color.rgb, 1.0));\n}\nvoid main() { gl_FragColor = frag(); }"},"builtins":{"globals":{"blocks":[{"name":"CCGlobal","defines":[]},{"name":"CCCamera","defines":[]}],"samplerTextures":[],"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":"CCLocalBatched","defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"CCLocal","defines":["!USE_INSTANCING","!USE_BATCHING"]}],"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":113,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":45}},"defines":[{"name":"USE_INSTANCING","type":"boolean"},{"name":"USE_BATCHING","type":"boolean"},{"name":"CC_USE_SKINNING","type":"boolean"},{"name":"CC_USE_BAKED_ANIMATION","type":"boolean"},{"name":"CC_USE_LIGHTMAP","type":"boolean"},{"name":"CC_RECEIVE_SHADOW","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":"USE_POSITION_SCALING","type":"boolean"},{"name":"CC_USE_DEBUG_VIEW","type":"number","range":[0,3]},{"name":"USE_BASE_COLOR_MAP","type":"boolean"}]},{"hash":1315592135,"name":"builtin-toon|toon-vs:vert|toon-fs:frag","blocks":[{"name":"Constants","stageFlags":17,"binding":0,"members":[{"name":"tilingOffset","type":16,"count":1},{"name":"baseColor","type":16,"count":1},{"name":"colorScaleAndCutoff","type":16,"count":1},{"name":"shadeColor1","type":16,"count":1},{"name":"shadeColor2","type":16,"count":1},{"name":"specular","type":16,"count":1},{"name":"shadeParams","type":16,"count":1},{"name":"miscParams","type":16,"count":1},{"name":"emissive","type":16,"count":1},{"name":"emissiveScaleAndStrenth","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"baseColorMap","type":28,"count":1,"stageFlags":16,"binding":1,"defines":["USE_BASE_COLOR_MAP"]},{"name":"normalMap","type":28,"count":1,"stageFlags":16,"binding":2,"defines":["USE_NORMAL_MAP"]},{"name":"shadeMap1","type":28,"count":1,"stageFlags":16,"binding":3,"defines":["USE_1ST_SHADE_MAP"]},{"name":"shadeMap2","type":28,"count":1,"stageFlags":16,"binding":4,"defines":["USE_2ND_SHADE_MAP"]},{"name":"specularMap","type":28,"count":1,"stageFlags":16,"binding":5,"defines":["USE_SPECULAR_MAP"]},{"name":"emissiveMap","type":28,"count":1,"stageFlags":16,"binding":6,"defines":["USE_EMISSIVE_MAP"]}],"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_localShadowBias","format":21,"isInstanced":true,"location":11,"defines":["USE_INSTANCING","CC_RECEIVE_SHADOW"]},{"name":"a_dyn_batch_id","format":11,"location":12,"defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"a_vertexId","format":11,"location":13,"defines":["CC_USE_MORPH"]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"glsl3":{"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.71828183f\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)\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}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nin vec3 a_position;\nin vec3 a_normal;\nin vec2 a_texCoord;\nin vec4 a_tangent;\n#if CC_USE_SKINNING\n in vec4 a_joints;\n in vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n in highp vec4 a_jointAnimInfo;\n #endif\n in vec4 a_matWorld0;\n in vec4 a_matWorld1;\n in vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n in vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n in vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n in float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n in float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n layout(std140) uniform CCMorph {\n vec4 cc_displacementWeights[15];\n vec4 cc_displacementTextureInfo;\n };\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 pixelIndex) {\n ivec2 texSize = textureSize(tex, 0);\n return texelFetch(tex, ivec2(pixelIndex % texSize.x, pixelIndex / texSize.x), 0);\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(texture(tex, x)),\n decode32(texture(tex, y)),\n decode32(texture(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 layout(std140) uniform CCSkinningTexture {\n highp vec4 cc_jointTextureInfo;\n };\n layout(std140) uniform CCSkinningAnimation {\n highp vec4 cc_jointAnimInfo;\n };\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 layout(std140) uniform CCSkinning {\n highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n };\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 = texture(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture(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(texture(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture(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 = texture(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture(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(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(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}\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\n#if !USE_INSTANCING\n #if USE_BATCHING\n layout(std140) uniform CCLocalBatched {\n highp mat4 cc_matWorlds[10];\n };\n #else\n layout(std140) uniform CCLocal {\n highp mat4 cc_matWorld;\n highp mat4 cc_matWorldIT;\n highp vec4 cc_lightingMapUVParam;\n highp vec4 cc_localShadowBias;\n };\n #endif\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 matWorldIT = matWorld;\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n matWorldIT = matWorld;\n #else\n matWorld = cc_matWorld;\n matWorldIT = cc_matWorldIT;\n #endif\n}\nlayout(std140) uniform Constants {\n vec4 tilingOffset;\n vec4 baseColor;\n vec4 colorScaleAndCutoff;\n vec4 shadeColor1;\n vec4 shadeColor2;\n vec4 specular;\n vec4 shadeParams;\n vec4 miscParams;\n vec4 emissive;\n vec4 emissiveScaleAndStrenth;\n};\nout highp vec4 v_shadowPos;\nlayout(std140) uniform CCShadow {\n highp mat4 cc_matLightView;\n highp mat4 cc_matLightViewProj;\n highp vec4 cc_shadowInvProjDepthInfo;\n highp vec4 cc_shadowProjDepthInfo;\n highp vec4 cc_shadowProjInfo;\n mediump vec4 cc_shadowNFLSInfo;\n mediump vec4 cc_shadowWHPBInfo;\n mediump vec4 cc_shadowLPNNInfo;\n lowp vec4 cc_shadowColor;\n mediump vec4 cc_planarNDInfo;\n};\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n layout(std140) uniform CCCSM {\n highp vec4 cc_csmViewDir0[4];\n highp vec4 cc_csmViewDir1[4];\n highp vec4 cc_csmViewDir2[4];\n highp vec4 cc_csmAtlas[4];\n highp mat4 cc_matCSMViewProj[4];\n highp vec4 cc_csmProjDepthInfo[4];\n highp vec4 cc_csmProjInfo[4];\n highp vec4 cc_csmSplitsInfo;\n };\n#endif\n#if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n #else\n #endif\n#endif\n#if CC_RECEIVE_SHADOW\nvec2 CCGetShadowBias()\n{\n #if USE_INSTANCING\n return vec2(a_localShadowBias.x + cc_shadowWHPBInfo.w, a_localShadowBias.y + cc_shadowLPNNInfo.z);\n #elif !USE_BATCHING\n return vec2(cc_localShadowBias.x + cc_shadowWHPBInfo.w, cc_localShadowBias.y + cc_shadowLPNNInfo.z);\n #else\n return vec2(cc_shadowWHPBInfo.w, cc_shadowLPNNInfo.z);\n #endif\n}\n#endif\nout vec3 v_position;\nout vec2 v_uv;\nout mediump vec3 v_normal;\n#if CC_RECEIVE_SHADOW\n out mediump vec2 v_shadowBias;\n#endif\n#if USE_NORMAL_MAP\n out mediump vec4 v_tangent;\n#endif\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_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;\n #if CC_RECEIVE_SHADOW\n v_shadowBias = CCGetShadowBias();\n #endif\n v_normal = (matWorldIT * vec4(In.normal, 0.0)).xyz;\n #if USE_NORMAL_MAP\n v_tangent.xyz = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz);\n v_tangent.w = In.tangent.w;\n #endif\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;\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\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.71828183f\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)\nhighp float unpackHighpData (float mainPart, float modPart) {\n highp float data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out float mainPart, out float modPart, highp float data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp float unpackHighpData (float mainPart, float modPart, const float modValue) {\n highp float data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out float mainPart, out float modPart, highp float data, const float modValue) {\n highp float divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec2 unpackHighpData (vec2 mainPart, vec2 modPart) {\n highp vec2 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec2 mainPart, out vec2 modPart, highp vec2 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec2 unpackHighpData (vec2 mainPart, vec2 modPart, const float modValue) {\n highp vec2 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec2 mainPart, out vec2 modPart, highp vec2 data, const float modValue) {\n highp vec2 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec3 unpackHighpData (vec3 mainPart, vec3 modPart) {\n highp vec3 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec3 mainPart, out vec3 modPart, highp vec3 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec3 unpackHighpData (vec3 mainPart, vec3 modPart, const float modValue) {\n highp vec3 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec3 mainPart, out vec3 modPart, highp vec3 data, const float modValue) {\n highp vec3 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec4 unpackHighpData (vec4 mainPart, vec4 modPart) {\n highp vec4 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec4 mainPart, out vec4 modPart, highp vec4 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec4 unpackHighpData (vec4 mainPart, vec4 modPart, const float modValue) {\n highp vec4 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec4 mainPart, out vec4 modPart, highp vec4 data, const float modValue) {\n highp vec4 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nstruct ToonSurface {\n vec4 baseColor;\n vec4 specular;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n vec3 position, position_fract_part;\n #else\n vec3 position;\n #endif\n vec3 normal;\n vec3 shade1;\n vec3 shade2;\n vec3 emissive;\n float baseStep;\n float baseFeather;\n float shadeStep;\n float shadeFeather;\n float shadowCover;\n #if CC_RECEIVE_SHADOW\n vec2 shadowBias;\n #endif\n};\n#if CC_FORWARD_ADD\n #if CC_PIPELINE_TYPE == 0\n #define LIGHTS_PER_PASS 1\n #else\n #define LIGHTS_PER_PASS 10\n #endif\n #if CC_ENABLE_CLUSTERED_LIGHT_CULLING == 0\n layout(std140) uniform CCForwardLight {\n highp vec4 cc_lightPos[LIGHTS_PER_PASS];\n vec4 cc_lightColor[LIGHTS_PER_PASS];\n vec4 cc_lightSizeRangeAngle[LIGHTS_PER_PASS];\n vec4 cc_lightDir[LIGHTS_PER_PASS];\n };\n #endif\n float SmoothDistAtt (float distSqr, float invSqrAttRadius) {\n float factor = distSqr * invSqrAttRadius;\n float smoothFactor = clamp(1.0 - factor * factor, 0.0, 1.0);\n return smoothFactor * smoothFactor;\n }\n float GetDistAtt (float distSqr, float invSqrAttRadius) {\n float attenuation = 1.0 / max(distSqr, 0.01*0.01);\n attenuation *= SmoothDistAtt(distSqr , invSqrAttRadius);\n return attenuation;\n }\n float GetAngleAtt (vec3 L, vec3 litDir, float litAngleScale, float litAngleOffset) {\n float cd = dot(litDir, L);\n float attenuation = clamp(cd * litAngleScale + litAngleOffset, 0.0, 1.0);\n return (attenuation * attenuation);\n }\n vec4 CCToonShading (ToonSurface s) {\n vec3 position;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n position = unpackHighpData(s.position, s.position_fract_part);\n #else\n position = s.position;\n #endif\n vec3 V = normalize(cc_cameraPos.xyz - position);\n vec3 N = normalize(s.normal);\n float specularWeight = 1.0 - pow(s.specular.a, 5.0);\n vec3 finalColor = vec3(0.0);\n for (int i = 0; i < LIGHTS_PER_PASS; i++) {\n vec3 SLU = cc_lightPos[i].xyz - position;\n vec3 SL = normalize(SLU);\n vec3 SH = normalize(SL + V);\n float SNL = 0.5 * dot(N, SL) + 0.5;\n float SNH = 0.5 * dot(N, SH) + 0.5;\n float distSqr = dot(SLU, SLU);\n float litRadius = cc_lightSizeRangeAngle[i].x;\n float litRadiusSqr = litRadius * litRadius;\n float illum = litRadiusSqr / max(litRadiusSqr , distSqr);\n float attRadiusSqrInv = 1.0 / max(cc_lightSizeRangeAngle[i].y, 0.01);\n attRadiusSqrInv *= attRadiusSqrInv;\n float att = GetDistAtt(distSqr, attRadiusSqrInv);\n vec3 diffuse = mix(s.shade1, s.shade2,\n clamp(1.0 + (s.shadeStep - s.shadeFeather - SNL) / s.shadeFeather, 0.0, 1.0));\n diffuse = mix(s.baseColor.rgb, diffuse,\n clamp(1.0 + (s.baseStep - s.baseFeather - SNL) / s.baseFeather, 0.0, 1.0));\n float specularMask = step(specularWeight, SNH);\n vec3 specular = s.specular.rgb * specularMask;\n if (cc_lightPos[i].w > 0.0) {\n float cosInner = max(dot(-cc_lightDir[i].xyz, SL), 0.01);\n float cosOuter = cc_lightSizeRangeAngle[i].z;\n float litAngleScale = 1.0 / max(0.001, cosInner - cosOuter);\n float litAngleOffset = -cosOuter * litAngleScale;\n att *= GetAngleAtt(SL, -cc_lightDir[i].xyz, litAngleScale, litAngleOffset);\n }\n finalColor += SNL * cc_lightColor[i].rgb * cc_lightColor[i].a * illum * att * s.baseStep * (diffuse + specular);\n }\n return vec4(finalColor, 0.0);\n }\n#else\n #if CC_RECEIVE_SHADOW\n in highp vec4 v_shadowPos;\n layout(std140) uniform CCShadow {\n highp mat4 cc_matLightView;\n highp mat4 cc_matLightViewProj;\n highp vec4 cc_shadowInvProjDepthInfo;\n highp vec4 cc_shadowProjDepthInfo;\n highp vec4 cc_shadowProjInfo;\n mediump vec4 cc_shadowNFLSInfo;\n mediump vec4 cc_shadowWHPBInfo;\n mediump vec4 cc_shadowLPNNInfo;\n lowp vec4 cc_shadowColor;\n mediump vec4 cc_planarNDInfo;\n };\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n layout(std140) uniform CCCSM {\n highp vec4 cc_csmViewDir0[4];\n highp vec4 cc_csmViewDir1[4];\n highp vec4 cc_csmViewDir2[4];\n highp vec4 cc_csmAtlas[4];\n highp mat4 cc_matCSMViewProj[4];\n highp vec4 cc_csmProjDepthInfo[4];\n highp vec4 cc_csmProjInfo[4];\n highp vec4 cc_csmSplitsInfo;\n };\n #endif\n #if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n float NativePCFShadowFactorHard (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n #if CC_SHADOWMAP_FORMAT == 1\n return step(shadowNDCPos.z, dot(texture(shadowMap, shadowNDCPos.xy), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n return step(shadowNDCPos.z, texture(shadowMap, shadowNDCPos.xy).x);\n #endif\n }\n float NativePCFShadowFactorSoft (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n vec2 oneTap = 1.0 / shadowMapResolution;\n vec2 shadowNDCPos_offset = shadowNDCPos.xy + oneTap;\n float block0, block1, block2, block3;\n #if CC_SHADOWMAP_FORMAT == 1\n block0 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block1 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block2 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block3 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos_offset.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n block0 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)).x);\n block1 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos.y)).x);\n block2 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset.y)).x);\n block3 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos_offset.y)).x);\n #endif\n float coefX = mod(shadowNDCPos.x, oneTap.x) * shadowMapResolution.x;\n float resultX = mix(block0, block1, coefX);\n float resultY = mix(block2, block3, coefX);\n float coefY = mod(shadowNDCPos.y, oneTap.y) * shadowMapResolution.y;\n return mix(resultX, resultY, coefY);\n }\n float NativePCFShadowFactorSoft3X (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n vec2 oneTap = 1.0 / shadowMapResolution;\n float shadowNDCPos_offset_L = shadowNDCPos.x - oneTap.x;\n float shadowNDCPos_offset_R = shadowNDCPos.x + oneTap.x;\n float shadowNDCPos_offset_U = shadowNDCPos.y - oneTap.y;\n float shadowNDCPos_offset_D = shadowNDCPos.y + oneTap.y;\n float block0, block1, block2, block3, block4, block5, block6, block7, block8;\n #if CC_SHADOWMAP_FORMAT == 1\n block0 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block1 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block2 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block3 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block4 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block5 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block6 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block7 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block8 = step(shadowNDCPos.z, dot(texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n block0 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_U)).x);\n block1 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_U)).x);\n block2 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_U)).x);\n block3 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos.y)).x);\n block4 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)).x);\n block5 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos.y)).x);\n block6 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_D)).x);\n block7 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_D)).x);\n block8 = step(shadowNDCPos.z, texture(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_D)).x);\n #endif\n float coefX = mod(shadowNDCPos.x, oneTap.x) * shadowMapResolution.x;\n float coefY = mod(shadowNDCPos.y, oneTap.y) * shadowMapResolution.y;\n float shadow = 0.0;\n float resultX = mix(block0, block1, coefX);\n float resultY = mix(block3, block4, coefX);\n shadow += mix(resultX , resultY, coefY);\n resultX = mix(block1, block2, coefX);\n resultY = mix(block4, block5, coefX);\n shadow += mix(resultX , resultY, coefY);\n resultX = mix(block3, block4, coefX);\n resultY = mix(block6, block7, coefX);\n shadow += mix(resultX, resultY, coefY);\n resultX = mix(block4, block5, coefX);\n resultY = mix(block7, block8, coefX);\n shadow += mix(resultX, resultY, coefY);\n return shadow * 0.25;\n }\n bool GetShadowNDCPos(out vec3 shadowNDCPos, vec4 shadowPosWithDepthBias)\n {\n \tshadowNDCPos = shadowPosWithDepthBias.xyz / shadowPosWithDepthBias.w * 0.5 + 0.5;\n \tif (shadowNDCPos.x < 0.0 || shadowNDCPos.x > 1.0 ||\n \t\tshadowNDCPos.y < 0.0 || shadowNDCPos.y > 1.0 ||\n \t\tshadowNDCPos.z < 0.0 || shadowNDCPos.z > 1.0) {\n \t\treturn false;\n \t}\n \tshadowNDCPos.xy = cc_cameraPos.w == 1.0 ? vec2(shadowNDCPos.xy.x, 1.0 - shadowNDCPos.xy.y) : shadowNDCPos.xy;\n \treturn true;\n }\n vec4 ApplyShadowDepthBias_FaceNormal(vec4 shadowPos, vec3 worldNormal, float normalBias, vec3 matViewDir0, vec3 matViewDir1, vec3 matViewDir2, vec2 projScaleXY)\n {\n vec4 newShadowPos = shadowPos;\n if (normalBias > EPSILON_LOWP)\n {\n vec3 viewNormal = vec3(dot(matViewDir0, worldNormal), dot(matViewDir1, worldNormal), dot(matViewDir2, worldNormal));\n if (viewNormal.z < 0.1)\n newShadowPos.xy += viewNormal.xy * projScaleXY * normalBias * clamp(viewNormal.z, 0.001, 0.1);\n }\n return newShadowPos;\n }\n vec4 ApplyShadowDepthBias_FaceNormal(vec4 shadowPos, vec3 worldNormal, float normalBias, mat4 matLightView, vec2 projScaleXY)\n {\n \tvec4 newShadowPos = shadowPos;\n \tif (normalBias > EPSILON_LOWP)\n \t{\n \t\tvec4 viewNormal = matLightView * vec4(worldNormal, 0.0);\n \t\tif (viewNormal.z < 0.1)\n \t\t\tnewShadowPos.xy += viewNormal.xy * projScaleXY * normalBias * clamp(viewNormal.z, 0.001, 0.1);\n \t}\n \treturn newShadowPos;\n }\n vec4 ApplyShadowDepthBias_Orthographic(vec4 shadowPos, float viewspaceDepthBias, float projScaleZ, float projBiasZ)\n {\n \tfloat coeffA = projScaleZ;\n \tfloat coeffB = projBiasZ;\n \tfloat viewSpacePos_z = (shadowPos.z - coeffB) / coeffA;\n \tviewSpacePos_z += viewspaceDepthBias;\n \tvec4 result = shadowPos;\n \tresult.z = viewSpacePos_z * coeffA + coeffB;\n \treturn result;\n }\n float CCGetDirLightShadowFactorHard (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorHard(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCGetDirLightShadowFactorSoft (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorSoft(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCGetDirLightShadowFactorSoft3X (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorSoft3X(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCShadowFactorBase(vec4 shadowPos, vec3 N, vec2 shadowBias)\n {\n float realtimeShadow = 1.0;\n vec4 pos = ApplyShadowDepthBias_FaceNormal(shadowPos, N, shadowBias.y, cc_matLightView, cc_shadowProjInfo.xy);\n pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, cc_shadowProjDepthInfo.x, cc_shadowProjDepthInfo.y);\n float pcf = cc_shadowWHPBInfo.z;\n if (pcf > 1.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft3X(pos);\n }else if (pcf > 0.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft(pos);\n }else {\n realtimeShadow = CCGetDirLightShadowFactorHard(pos);\n }\n return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w);\n }\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n int CCGetCSMLevel(out vec4 csmPos, out vec4 shadowProjDepthInfo, out vec4 shadowProjInfo, out vec3 shadowViewDir0, out vec3 shadowViewDir1, out vec3 shadowViewDir2, vec3 worldPos) {\n int layer = -1;\n highp float layerThreshold = cc_csmViewDir0[0].w;\n for (int i = 0; i < 4; i++) {\n vec4 shadowPos = cc_matCSMViewProj[i] * vec4(worldPos.xyz, 1.0);\n vec3 clipPos = shadowPos.xyz / shadowPos.w * 0.5 + 0.5;\n if (clipPos.x >= (0.0 + layerThreshold) && clipPos.x <= (1.0 - layerThreshold) &&\n clipPos.y >= (0.0 + layerThreshold) && clipPos.y <= (1.0 - layerThreshold) &&\n clipPos.z >= 0.0 && clipPos.z <= 1.0 && layer < 0) {\n csmPos = cc_matCSMViewProj[i] * vec4(worldPos.xyz, 1.0);\n csmPos.xy = csmPos.xy * cc_csmAtlas[i].xy + cc_csmAtlas[i].zw;\n shadowProjDepthInfo = cc_csmProjDepthInfo[i];\n shadowProjInfo = cc_csmProjInfo[i];\n shadowViewDir0 = cc_csmViewDir0[i].xyz;\n shadowViewDir1 = cc_csmViewDir1[i].xyz;\n shadowViewDir2 = cc_csmViewDir2[i].xyz;\n layer = i;\n }\n }\n return layer;\n }\n float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias)\n {\n vec4 csmPos = vec4(1.0);\n vec4 shadowProjDepthInfo, shadowProjInfo;\n vec3 shadowViewDir0, shadowViewDir1, shadowViewDir2;\n int level = CCGetCSMLevel(csmPos, shadowProjDepthInfo, shadowProjInfo, shadowViewDir0, shadowViewDir1, shadowViewDir2, worldPos);\n if (level < 0) { return 1.0; }\n float realtimeShadow = 1.0;\n vec4 pos = ApplyShadowDepthBias_FaceNormal(csmPos, N, shadowBias.y, shadowViewDir0, shadowViewDir1, shadowViewDir2, shadowProjInfo.xy);\n pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, shadowProjDepthInfo.x, shadowProjDepthInfo.y);\n float pcf = cc_shadowWHPBInfo.z;\n if (pcf > 1.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft3X(pos);\n } else if (pcf > 0.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft(pos);\n }else {\n realtimeShadow = CCGetDirLightShadowFactorHard(pos);\n }\n return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w);\n }\n #else\n int CCGetCSMLevel(out vec4 csmPos, out vec4 shadowProjDepthInfo, out vec4 shadowProjInfo, out vec3 shadowViewDir0, out vec3 shadowViewDir1, out vec3 shadowViewDir2, vec3 worldPos) {\n return -1;\n }\n float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias) {\n vec4 shadowPos = cc_matLightViewProj * vec4(worldPos, 1.0);\n return CCShadowFactorBase(shadowPos, N, shadowBias);\n }\n #endif\n #endif\n #if CC_RECEIVE_SHADOW\n #endif\n #endif\n vec4 CCToonShading (ToonSurface s) {\n vec3 position;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n position = unpackHighpData(s.position, s.position_fract_part);\n #else\n position = s.position;\n #endif\n vec3 V = normalize(cc_cameraPos.xyz - position);\n vec3 N = normalize(s.normal);\n vec3 L = normalize(-cc_mainLitDir.xyz);\n float NL = 0.5 * dot(N, L) + 0.5;\n float NH = 0.5 * dot(normalize(V + L), N) + 0.5;\n vec3 lightColor = cc_mainLitColor.rgb * cc_mainLitColor.w * s.baseStep;\n vec3 diffuse = mix(s.shade1, s.shade2,\n clamp(1.0 + (s.shadeStep - s.shadeFeather - NL) / s.shadeFeather, 0.0, 1.0));\n diffuse = mix(s.baseColor.rgb, diffuse,\n clamp(1.0 + (s.baseStep - s.baseFeather - NL) / s.baseFeather, 0.0, 1.0));\n float specularWeight = 1.0 - pow(s.specular.a, 5.0);\n float specularMask = step(specularWeight, NH);\n vec3 specular = s.specular.rgb * specularMask;\n vec3 dirlightContrib = diffuse + specular;\n float shadow = 1.0;\n #if CC_RECEIVE_SHADOW\n if(s.shadowCover < NL && cc_mainLitDir.w > 0.0) {\n if (cc_shadowLPNNInfo.w > 0.0) {\n shadow = CCCSMFactorBase(position, N, s.shadowBias);\n } else {\n shadow = CCShadowFactorBase(v_shadowPos, N, s.shadowBias);\n }\n }\n #endif\n dirlightContrib *= shadow;\n vec3 finalColor = lightColor * dirlightContrib;\n finalColor += s.emissive;\n return vec4(finalColor, s.baseColor.a);\n }\n#endif\nlayout(std140) uniform Constants {\n vec4 tilingOffset;\n vec4 baseColor;\n vec4 colorScaleAndCutoff;\n vec4 shadeColor1;\n vec4 shadeColor2;\n vec4 specular;\n vec4 shadeParams;\n vec4 miscParams;\n vec4 emissive;\n vec4 emissiveScaleAndStrenth;\n};\nvec3 ACESToneMap (vec3 color) {\n color = min(color, vec3(8.0));\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_WORLD_POS CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR CC_SURFACES_DEBUG_VIEW_WORLD_POS + 1\n#define CC_SURFACES_DEBUG_VIEW_FACE_SIDE CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR + 1\n#define CC_SURFACES_DEBUG_VIEW_UV0 CC_SURFACES_DEBUG_VIEW_FACE_SIDE + 1\n#define CC_SURFACES_DEBUG_VIEW_UV1 CC_SURFACES_DEBUG_VIEW_UV0 + 1\n#define CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP CC_SURFACES_DEBUG_VIEW_UV1 + 1\n#define CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP + 1\n#define CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_BASE_COLOR CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR CC_SURFACES_DEBUG_VIEW_BASE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_TRANSPARENCY CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_METALLIC CC_SURFACES_DEBUG_VIEW_TRANSPARENCY + 1\n#define CC_SURFACES_DEBUG_VIEW_ROUGHNESS CC_SURFACES_DEBUG_VIEW_METALLIC + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY CC_SURFACES_DEBUG_VIEW_ROUGHNESS + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_ALL CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE CC_SURFACES_DEBUG_VIEW_DIRECT_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_ALL CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_EMISSIVE CC_SURFACES_DEBUG_VIEW_ENV_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_LIGHT_MAP CC_SURFACES_DEBUG_VIEW_EMISSIVE + 1\n#define CC_SURFACES_DEBUG_VIEW_SHADOW CC_SURFACES_DEBUG_VIEW_LIGHT_MAP + 1\n#define CC_SURFACES_DEBUG_VIEW_AO CC_SURFACES_DEBUG_VIEW_SHADOW + 1\n#define CC_SURFACES_DEBUG_VIEW_FOG CC_SURFACES_DEBUG_VIEW_AO + 1\n#define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#define IS_DEBUG_VIEW_LIGHTING_ENABLE_WITH_ALBEDO (cc_debug_view_mode.y > 0.0)\n#define IS_DEBUG_VIEW_MISC_ENABLE_CSM_LAYER_COLORATION (cc_debug_view_mode.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE (cc_debug_view_composite_pack_1.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR (cc_debug_view_composite_pack_1.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE (cc_debug_view_composite_pack_1.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR (cc_debug_view_composite_pack_1.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE (cc_debug_view_composite_pack_2.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP (cc_debug_view_composite_pack_2.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW (cc_debug_view_composite_pack_2.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO (cc_debug_view_composite_pack_2.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_NORMAL_MAP (cc_debug_view_composite_pack_3.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_FOG (cc_debug_view_composite_pack_3.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_TONE_MAPPING (cc_debug_view_composite_pack_3.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION (cc_debug_view_composite_pack_3.w > 0.0)\nvec3 SRGBToLinear (vec3 gamma) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return gamma;\n }\n #endif\n#endif\n return gamma * gamma;\n}\nvec3 LinearToSRGB(vec3 linear) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return linear;\n }\n #endif\n#endif\n return sqrt(linear);\n}\nvec4 CCFragOutput (vec4 color) {\n #if CC_USE_HDR\n color.rgb = ACESToneMap(color.rgb);\n #endif\n color.rgb = LinearToSRGB(color.rgb);\n return color;\n}\nin vec3 v_position;\nin vec2 v_uv;\n#if CC_RECEIVE_SHADOW\n in mediump vec2 v_shadowBias;\n#endif\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\nin mediump vec3 v_normal;\n#if USE_NORMAL_MAP\n in mediump vec4 v_tangent;\n uniform sampler2D normalMap;\n#endif\n#if USE_1ST_SHADE_MAP\n uniform sampler2D shadeMap1;\n#endif\n#if USE_2ND_SHADE_MAP\n uniform sampler2D shadeMap2;\n#endif\n#if USE_SPECULAR_MAP\n uniform sampler2D specularMap;\n#endif\n#if USE_EMISSIVE_MAP\n uniform sampler2D emissiveMap;\n#endif\n#if USE_ALPHA_TEST\n#endif\nvoid surf (out ToonSurface s) {\n s.shade2 = shadeColor2.rgb * colorScaleAndCutoff.rgb;\n #if USE_2ND_SHADE_MAP\n s.shade2 *= SRGBToLinear(texture(shadeMap2, v_uv).rgb);\n #endif\n s.shade1 = shadeColor1.rgb * colorScaleAndCutoff.rgb;\n #if USE_1ST_SHADE_MAP\n s.shade1 *= SRGBToLinear(texture(shadeMap1, v_uv).rgb);\n #if SHADE_MAP_1_AS_SHADE_MAP_2\n s.shade2 *= s.shade1.rgb;\n #endif\n #endif\n vec4 baseColor = baseColor;\n #if USE_BASE_COLOR_MAP\n vec4 baseColorMap = texture(baseColorMap, v_uv);\n baseColorMap.rgb = SRGBToLinear(baseColorMap.rgb);\n baseColor *= baseColorMap;\n #if BASE_COLOR_MAP_AS_SHADE_MAP_1\n s.shade1 *= baseColorMap.rgb;\n #endif\n #if BASE_COLOR_MAP_AS_SHADE_MAP_2\n s.shade2 *= baseColorMap.rgb;\n #endif\n #endif\n s.baseColor = baseColor;\n s.baseColor.rgb *= colorScaleAndCutoff.xyz;\n #if USE_ALPHA_TEST\n if (s.baseColor.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;\n #endif\n s.normal = v_normal;\n #if CC_RECEIVE_SHADOW\n s.shadowBias = v_shadowBias;\n #endif\n #if USE_NORMAL_MAP\n vec3 nmmp = texture(normalMap, v_uv).xyz - vec3(0.5);\n vec3 bitangent = cross(v_normal, v_tangent.xyz) * v_tangent.w;\n s.normal =\n (nmmp.x * emissiveScaleAndStrenth.w) * normalize(v_tangent.xyz) +\n (nmmp.y * emissiveScaleAndStrenth.w) * normalize(bitangent) +\n nmmp.z * normalize(s.normal);\n #endif\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n packHighpData(s.position, s.position_fract_part, v_position);\n #else\n s.position = v_position;\n #endif\n s.specular = specular;\n #if USE_SPECULAR_MAP\n s.specular.rgb *= SRGBToLinear(texture(specularMap, v_uv).rgb);\n #endif\n s.emissive = emissive.rgb * emissiveScaleAndStrenth.xyz;\n #if USE_EMISSIVE_MAP\n s.emissive *= SRGBToLinear(texture(emissiveMap, v_uv).rgb);\n #endif\n s.baseStep = shadeParams.x;\n s.baseFeather = shadeParams.y;\n s.shadeStep = shadeParams.z;\n s.shadeFeather = shadeParams.w;\n s.shadowCover = miscParams.x;\n}\nvec4 frag () {\n ToonSurface s; surf(s);\n vec4 color = CCToonShading(s);\n return CCFragOutput(color);\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"},"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.71828183f\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)\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}\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_RECEIVE_SHADOW\n attribute vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n attribute float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n attribute float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\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#if !USE_INSTANCING\n #if USE_BATCHING\n uniform highp mat4 cc_matWorlds[10];\n #else\n uniform highp mat4 cc_matWorld;\n uniform highp mat4 cc_matWorldIT;\n uniform highp vec4 cc_localShadowBias;\n #endif\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 matWorldIT = matWorld;\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n matWorldIT = matWorld;\n #else\n matWorld = cc_matWorld;\n matWorldIT = cc_matWorldIT;\n #endif\n}\n uniform vec4 tilingOffset;\nvarying highp vec4 v_shadowPos;\nuniform highp mat4 cc_matLightViewProj;\n uniform mediump vec4 cc_shadowWHPBInfo;\n uniform mediump vec4 cc_shadowLPNNInfo;\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n #endif\n#if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n #else\n #endif\n#endif\n#if CC_RECEIVE_SHADOW\nvec2 CCGetShadowBias()\n{\n #if USE_INSTANCING\n return vec2(a_localShadowBias.x + cc_shadowWHPBInfo.w, a_localShadowBias.y + cc_shadowLPNNInfo.z);\n #elif !USE_BATCHING\n return vec2(cc_localShadowBias.x + cc_shadowWHPBInfo.w, cc_localShadowBias.y + cc_shadowLPNNInfo.z);\n #else\n return vec2(cc_shadowWHPBInfo.w, cc_shadowLPNNInfo.z);\n #endif\n}\n#endif\nvarying vec3 v_position;\nvarying vec2 v_uv;\nvarying mediump vec3 v_normal;\n#if CC_RECEIVE_SHADOW\n varying mediump vec2 v_shadowBias;\n#endif\n#if USE_NORMAL_MAP\n varying mediump vec4 v_tangent;\n#endif\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_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;\n #if CC_RECEIVE_SHADOW\n v_shadowBias = CCGetShadowBias();\n #endif\n v_normal = (matWorldIT * vec4(In.normal, 0.0)).xyz;\n #if USE_NORMAL_MAP\n v_tangent.xyz = normalize((matWorld * vec4(In.tangent.xyz, 0.0)).xyz);\n v_tangent.w = In.tangent.w;\n #endif\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;\nuniform mediump vec4 cc_debug_view_mode;\n uniform mediump vec4 cc_debug_view_composite_pack_1;\n uniform mediump vec4 cc_debug_view_composite_pack_2;\n uniform mediump vec4 cc_debug_view_composite_pack_3;\nuniform highp vec4 cc_cameraPos;\n uniform mediump vec4 cc_mainLitDir;\n uniform mediump vec4 cc_mainLitColor;\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.71828183f\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)\nhighp float unpackHighpData (float mainPart, float modPart) {\n highp float data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out float mainPart, out float modPart, highp float data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp float unpackHighpData (float mainPart, float modPart, const float modValue) {\n highp float data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out float mainPart, out float modPart, highp float data, const float modValue) {\n highp float divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec2 unpackHighpData (vec2 mainPart, vec2 modPart) {\n highp vec2 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec2 mainPart, out vec2 modPart, highp vec2 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec2 unpackHighpData (vec2 mainPart, vec2 modPart, const float modValue) {\n highp vec2 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec2 mainPart, out vec2 modPart, highp vec2 data, const float modValue) {\n highp vec2 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec3 unpackHighpData (vec3 mainPart, vec3 modPart) {\n highp vec3 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec3 mainPart, out vec3 modPart, highp vec3 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec3 unpackHighpData (vec3 mainPart, vec3 modPart, const float modValue) {\n highp vec3 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec3 mainPart, out vec3 modPart, highp vec3 data, const float modValue) {\n highp vec3 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nhighp vec4 unpackHighpData (vec4 mainPart, vec4 modPart) {\n highp vec4 data = mainPart;\n return data + modPart;\n}\nvoid packHighpData (out vec4 mainPart, out vec4 modPart, highp vec4 data) {\n mainPart = fract(data);\n modPart = data - mainPart;\n}\nhighp vec4 unpackHighpData (vec4 mainPart, vec4 modPart, const float modValue) {\n highp vec4 data = mainPart * modValue;\n return data + modPart * modValue;\n}\nvoid packHighpData (out vec4 mainPart, out vec4 modPart, highp vec4 data, const float modValue) {\n highp vec4 divide = data / modValue;\n mainPart = floor(divide);\n modPart = (data - mainPart * modValue) / modValue;\n}\nstruct ToonSurface {\n vec4 baseColor;\n vec4 specular;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n vec3 position, position_fract_part;\n #else\n vec3 position;\n #endif\n vec3 normal;\n vec3 shade1;\n vec3 shade2;\n vec3 emissive;\n float baseStep;\n float baseFeather;\n float shadeStep;\n float shadeFeather;\n float shadowCover;\n #if CC_RECEIVE_SHADOW\n vec2 shadowBias;\n #endif\n};\n#if CC_FORWARD_ADD\n #if CC_PIPELINE_TYPE == 0\n #define LIGHTS_PER_PASS 1\n #else\n #define LIGHTS_PER_PASS 10\n #endif\n #if CC_ENABLE_CLUSTERED_LIGHT_CULLING == 0\n uniform highp vec4 cc_lightPos[LIGHTS_PER_PASS];\n uniform vec4 cc_lightColor[LIGHTS_PER_PASS];\n uniform vec4 cc_lightSizeRangeAngle[LIGHTS_PER_PASS];\n uniform vec4 cc_lightDir[LIGHTS_PER_PASS];\n #endif\n float SmoothDistAtt (float distSqr, float invSqrAttRadius) {\n float factor = distSqr * invSqrAttRadius;\n float smoothFactor = clamp(1.0 - factor * factor, 0.0, 1.0);\n return smoothFactor * smoothFactor;\n }\n float GetDistAtt (float distSqr, float invSqrAttRadius) {\n float attenuation = 1.0 / max(distSqr, 0.01*0.01);\n attenuation *= SmoothDistAtt(distSqr , invSqrAttRadius);\n return attenuation;\n }\n float GetAngleAtt (vec3 L, vec3 litDir, float litAngleScale, float litAngleOffset) {\n float cd = dot(litDir, L);\n float attenuation = clamp(cd * litAngleScale + litAngleOffset, 0.0, 1.0);\n return (attenuation * attenuation);\n }\n vec4 CCToonShading (ToonSurface s) {\n vec3 position;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n position = unpackHighpData(s.position, s.position_fract_part);\n #else\n position = s.position;\n #endif\n vec3 V = normalize(cc_cameraPos.xyz - position);\n vec3 N = normalize(s.normal);\n float specularWeight = 1.0 - pow(s.specular.a, 5.0);\n vec3 finalColor = vec3(0.0);\n for (int i = 0; i < LIGHTS_PER_PASS; i++) {\n vec3 SLU = cc_lightPos[i].xyz - position;\n vec3 SL = normalize(SLU);\n vec3 SH = normalize(SL + V);\n float SNL = 0.5 * dot(N, SL) + 0.5;\n float SNH = 0.5 * dot(N, SH) + 0.5;\n float distSqr = dot(SLU, SLU);\n float litRadius = cc_lightSizeRangeAngle[i].x;\n float litRadiusSqr = litRadius * litRadius;\n float illum = litRadiusSqr / max(litRadiusSqr , distSqr);\n float attRadiusSqrInv = 1.0 / max(cc_lightSizeRangeAngle[i].y, 0.01);\n attRadiusSqrInv *= attRadiusSqrInv;\n float att = GetDistAtt(distSqr, attRadiusSqrInv);\n vec3 diffuse = mix(s.shade1, s.shade2,\n clamp(1.0 + (s.shadeStep - s.shadeFeather - SNL) / s.shadeFeather, 0.0, 1.0));\n diffuse = mix(s.baseColor.rgb, diffuse,\n clamp(1.0 + (s.baseStep - s.baseFeather - SNL) / s.baseFeather, 0.0, 1.0));\n float specularMask = step(specularWeight, SNH);\n vec3 specular = s.specular.rgb * specularMask;\n if (cc_lightPos[i].w > 0.0) {\n float cosInner = max(dot(-cc_lightDir[i].xyz, SL), 0.01);\n float cosOuter = cc_lightSizeRangeAngle[i].z;\n float litAngleScale = 1.0 / max(0.001, cosInner - cosOuter);\n float litAngleOffset = -cosOuter * litAngleScale;\n att *= GetAngleAtt(SL, -cc_lightDir[i].xyz, litAngleScale, litAngleOffset);\n }\n finalColor += SNL * cc_lightColor[i].rgb * cc_lightColor[i].a * illum * att * s.baseStep * (diffuse + specular);\n }\n return vec4(finalColor, 0.0);\n }\n#else\n #if CC_RECEIVE_SHADOW\n varying highp vec4 v_shadowPos;\n uniform highp mat4 cc_matLightView;\n uniform highp mat4 cc_matLightViewProj;\n uniform highp vec4 cc_shadowProjDepthInfo;\n uniform highp vec4 cc_shadowProjInfo;\n uniform mediump vec4 cc_shadowNFLSInfo;\n uniform mediump vec4 cc_shadowWHPBInfo;\n uniform mediump vec4 cc_shadowLPNNInfo;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n uniform highp vec4 cc_csmViewDir0[4];\n uniform highp vec4 cc_csmViewDir1[4];\n uniform highp vec4 cc_csmViewDir2[4];\n uniform highp vec4 cc_csmAtlas[4];\n uniform highp mat4 cc_matCSMViewProj[4];\n uniform highp vec4 cc_csmProjDepthInfo[4];\n uniform highp vec4 cc_csmProjInfo[4];\n #endif\n #if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n float NativePCFShadowFactorHard (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n #if CC_SHADOWMAP_FORMAT == 1\n return step(shadowNDCPos.z, dot(texture2D(shadowMap, shadowNDCPos.xy), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n return step(shadowNDCPos.z, texture2D(shadowMap, shadowNDCPos.xy).x);\n #endif\n }\n float NativePCFShadowFactorSoft (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n vec2 oneTap = 1.0 / shadowMapResolution;\n vec2 shadowNDCPos_offset = shadowNDCPos.xy + oneTap;\n float block0, block1, block2, block3;\n #if CC_SHADOWMAP_FORMAT == 1\n block0 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block1 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block2 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block3 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos_offset.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n block0 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)).x);\n block1 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos.y)).x);\n block2 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset.y)).x);\n block3 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset.x, shadowNDCPos_offset.y)).x);\n #endif\n float coefX = mod(shadowNDCPos.x, oneTap.x) * shadowMapResolution.x;\n float resultX = mix(block0, block1, coefX);\n float resultY = mix(block2, block3, coefX);\n float coefY = mod(shadowNDCPos.y, oneTap.y) * shadowMapResolution.y;\n return mix(resultX, resultY, coefY);\n }\n float NativePCFShadowFactorSoft3X (vec3 shadowNDCPos, sampler2D shadowMap, vec2 shadowMapResolution)\n {\n vec2 oneTap = 1.0 / shadowMapResolution;\n float shadowNDCPos_offset_L = shadowNDCPos.x - oneTap.x;\n float shadowNDCPos_offset_R = shadowNDCPos.x + oneTap.x;\n float shadowNDCPos_offset_U = shadowNDCPos.y - oneTap.y;\n float shadowNDCPos_offset_D = shadowNDCPos.y + oneTap.y;\n float block0, block1, block2, block3, block4, block5, block6, block7, block8;\n #if CC_SHADOWMAP_FORMAT == 1\n block0 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block1 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block2 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_U)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block3 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block4 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block5 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos.y)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block6 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block7 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n block8 = step(shadowNDCPos.z, dot(texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_D)), vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)));\n #else\n block0 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_U)).x);\n block1 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_U)).x);\n block2 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_U)).x);\n block3 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos.y)).x);\n block4 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos.y)).x);\n block5 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos.y)).x);\n block6 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_L, shadowNDCPos_offset_D)).x);\n block7 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos.x, shadowNDCPos_offset_D)).x);\n block8 = step(shadowNDCPos.z, texture2D(shadowMap, vec2(shadowNDCPos_offset_R, shadowNDCPos_offset_D)).x);\n #endif\n float coefX = mod(shadowNDCPos.x, oneTap.x) * shadowMapResolution.x;\n float coefY = mod(shadowNDCPos.y, oneTap.y) * shadowMapResolution.y;\n float shadow = 0.0;\n float resultX = mix(block0, block1, coefX);\n float resultY = mix(block3, block4, coefX);\n shadow += mix(resultX , resultY, coefY);\n resultX = mix(block1, block2, coefX);\n resultY = mix(block4, block5, coefX);\n shadow += mix(resultX , resultY, coefY);\n resultX = mix(block3, block4, coefX);\n resultY = mix(block6, block7, coefX);\n shadow += mix(resultX, resultY, coefY);\n resultX = mix(block4, block5, coefX);\n resultY = mix(block7, block8, coefX);\n shadow += mix(resultX, resultY, coefY);\n return shadow * 0.25;\n }\n bool GetShadowNDCPos(out vec3 shadowNDCPos, vec4 shadowPosWithDepthBias)\n {\n \tshadowNDCPos = shadowPosWithDepthBias.xyz / shadowPosWithDepthBias.w * 0.5 + 0.5;\n \tif (shadowNDCPos.x < 0.0 || shadowNDCPos.x > 1.0 ||\n \t\tshadowNDCPos.y < 0.0 || shadowNDCPos.y > 1.0 ||\n \t\tshadowNDCPos.z < 0.0 || shadowNDCPos.z > 1.0) {\n \t\treturn false;\n \t}\n \tshadowNDCPos.xy = cc_cameraPos.w == 1.0 ? vec2(shadowNDCPos.xy.x, 1.0 - shadowNDCPos.xy.y) : shadowNDCPos.xy;\n \treturn true;\n }\n vec4 ApplyShadowDepthBias_FaceNormal(vec4 shadowPos, vec3 worldNormal, float normalBias, vec3 matViewDir0, vec3 matViewDir1, vec3 matViewDir2, vec2 projScaleXY)\n {\n vec4 newShadowPos = shadowPos;\n if (normalBias > EPSILON_LOWP)\n {\n vec3 viewNormal = vec3(dot(matViewDir0, worldNormal), dot(matViewDir1, worldNormal), dot(matViewDir2, worldNormal));\n if (viewNormal.z < 0.1)\n newShadowPos.xy += viewNormal.xy * projScaleXY * normalBias * clamp(viewNormal.z, 0.001, 0.1);\n }\n return newShadowPos;\n }\n vec4 ApplyShadowDepthBias_FaceNormal(vec4 shadowPos, vec3 worldNormal, float normalBias, mat4 matLightView, vec2 projScaleXY)\n {\n \tvec4 newShadowPos = shadowPos;\n \tif (normalBias > EPSILON_LOWP)\n \t{\n \t\tvec4 viewNormal = matLightView * vec4(worldNormal, 0.0);\n \t\tif (viewNormal.z < 0.1)\n \t\t\tnewShadowPos.xy += viewNormal.xy * projScaleXY * normalBias * clamp(viewNormal.z, 0.001, 0.1);\n \t}\n \treturn newShadowPos;\n }\n vec4 ApplyShadowDepthBias_Orthographic(vec4 shadowPos, float viewspaceDepthBias, float projScaleZ, float projBiasZ)\n {\n \tfloat coeffA = projScaleZ;\n \tfloat coeffB = projBiasZ;\n \tfloat viewSpacePos_z = (shadowPos.z - coeffB) / coeffA;\n \tviewSpacePos_z += viewspaceDepthBias;\n \tvec4 result = shadowPos;\n \tresult.z = viewSpacePos_z * coeffA + coeffB;\n \treturn result;\n }\n float CCGetDirLightShadowFactorHard (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorHard(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCGetDirLightShadowFactorSoft (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorSoft(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCGetDirLightShadowFactorSoft3X (vec4 shadowPosWithDepthBias) {\n \t vec3 shadowNDCPos;\n \t if (!GetShadowNDCPos(shadowNDCPos, shadowPosWithDepthBias)) {\n \t\t return 1.0;\n \t }\n return NativePCFShadowFactorSoft3X(shadowNDCPos, cc_shadowMap, cc_shadowWHPBInfo.xy);\n }\n float CCShadowFactorBase(vec4 shadowPos, vec3 N, vec2 shadowBias)\n {\n float realtimeShadow = 1.0;\n vec4 pos = ApplyShadowDepthBias_FaceNormal(shadowPos, N, shadowBias.y, cc_matLightView, cc_shadowProjInfo.xy);\n pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, cc_shadowProjDepthInfo.x, cc_shadowProjDepthInfo.y);\n float pcf = cc_shadowWHPBInfo.z;\n if (pcf > 1.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft3X(pos);\n }else if (pcf > 0.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft(pos);\n }else {\n realtimeShadow = CCGetDirLightShadowFactorHard(pos);\n }\n return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w);\n }\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n int CCGetCSMLevel(out vec4 csmPos, out vec4 shadowProjDepthInfo, out vec4 shadowProjInfo, out vec3 shadowViewDir0, out vec3 shadowViewDir1, out vec3 shadowViewDir2, vec3 worldPos) {\n int layer = -1;\n highp float layerThreshold = cc_csmViewDir0[0].w;\n for (int i = 0; i < 4; i++) {\n vec4 shadowPos = cc_matCSMViewProj[i] * vec4(worldPos.xyz, 1.0);\n vec3 clipPos = shadowPos.xyz / shadowPos.w * 0.5 + 0.5;\n if (clipPos.x >= (0.0 + layerThreshold) && clipPos.x <= (1.0 - layerThreshold) &&\n clipPos.y >= (0.0 + layerThreshold) && clipPos.y <= (1.0 - layerThreshold) &&\n clipPos.z >= 0.0 && clipPos.z <= 1.0 && layer < 0) {\n csmPos = cc_matCSMViewProj[i] * vec4(worldPos.xyz, 1.0);\n csmPos.xy = csmPos.xy * cc_csmAtlas[i].xy + cc_csmAtlas[i].zw;\n shadowProjDepthInfo = cc_csmProjDepthInfo[i];\n shadowProjInfo = cc_csmProjInfo[i];\n shadowViewDir0 = cc_csmViewDir0[i].xyz;\n shadowViewDir1 = cc_csmViewDir1[i].xyz;\n shadowViewDir2 = cc_csmViewDir2[i].xyz;\n layer = i;\n }\n }\n return layer;\n }\n float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias)\n {\n vec4 csmPos = vec4(1.0);\n vec4 shadowProjDepthInfo, shadowProjInfo;\n vec3 shadowViewDir0, shadowViewDir1, shadowViewDir2;\n int level = CCGetCSMLevel(csmPos, shadowProjDepthInfo, shadowProjInfo, shadowViewDir0, shadowViewDir1, shadowViewDir2, worldPos);\n if (level < 0) { return 1.0; }\n float realtimeShadow = 1.0;\n vec4 pos = ApplyShadowDepthBias_FaceNormal(csmPos, N, shadowBias.y, shadowViewDir0, shadowViewDir1, shadowViewDir2, shadowProjInfo.xy);\n pos = ApplyShadowDepthBias_Orthographic(pos, shadowBias.x, shadowProjDepthInfo.x, shadowProjDepthInfo.y);\n float pcf = cc_shadowWHPBInfo.z;\n if (pcf > 1.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft3X(pos);\n } else if (pcf > 0.9) {\n realtimeShadow = CCGetDirLightShadowFactorSoft(pos);\n }else {\n realtimeShadow = CCGetDirLightShadowFactorHard(pos);\n }\n return mix(realtimeShadow, 1.0, cc_shadowNFLSInfo.w);\n }\n #else\n int CCGetCSMLevel(out vec4 csmPos, out vec4 shadowProjDepthInfo, out vec4 shadowProjInfo, out vec3 shadowViewDir0, out vec3 shadowViewDir1, out vec3 shadowViewDir2, vec3 worldPos) {\n return -1;\n }\n float CCCSMFactorBase(vec3 worldPos, vec3 N, vec2 shadowBias) {\n vec4 shadowPos = cc_matLightViewProj * vec4(worldPos, 1.0);\n return CCShadowFactorBase(shadowPos, N, shadowBias);\n }\n #endif\n #endif\n #if CC_RECEIVE_SHADOW\n #endif\n #endif\n vec4 CCToonShading (ToonSurface s) {\n vec3 position;\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n position = unpackHighpData(s.position, s.position_fract_part);\n #else\n position = s.position;\n #endif\n vec3 V = normalize(cc_cameraPos.xyz - position);\n vec3 N = normalize(s.normal);\n vec3 L = normalize(-cc_mainLitDir.xyz);\n float NL = 0.5 * dot(N, L) + 0.5;\n float NH = 0.5 * dot(normalize(V + L), N) + 0.5;\n vec3 lightColor = cc_mainLitColor.rgb * cc_mainLitColor.w * s.baseStep;\n vec3 diffuse = mix(s.shade1, s.shade2,\n clamp(1.0 + (s.shadeStep - s.shadeFeather - NL) / s.shadeFeather, 0.0, 1.0));\n diffuse = mix(s.baseColor.rgb, diffuse,\n clamp(1.0 + (s.baseStep - s.baseFeather - NL) / s.baseFeather, 0.0, 1.0));\n float specularWeight = 1.0 - pow(s.specular.a, 5.0);\n float specularMask = step(specularWeight, NH);\n vec3 specular = s.specular.rgb * specularMask;\n vec3 dirlightContrib = diffuse + specular;\n float shadow = 1.0;\n #if CC_RECEIVE_SHADOW\n if(s.shadowCover < NL && cc_mainLitDir.w > 0.0) {\n if (cc_shadowLPNNInfo.w > 0.0) {\n shadow = CCCSMFactorBase(position, N, s.shadowBias);\n } else {\n shadow = CCShadowFactorBase(v_shadowPos, N, s.shadowBias);\n }\n }\n #endif\n dirlightContrib *= shadow;\n vec3 finalColor = lightColor * dirlightContrib;\n finalColor += s.emissive;\n return vec4(finalColor, s.baseColor.a);\n }\n#endif\n uniform vec4 baseColor;\n uniform vec4 colorScaleAndCutoff;\n uniform vec4 shadeColor1;\n uniform vec4 shadeColor2;\n uniform vec4 specular;\n uniform vec4 shadeParams;\n uniform vec4 miscParams;\n uniform vec4 emissive;\n uniform vec4 emissiveScaleAndStrenth;\nvec3 ACESToneMap (vec3 color) {\n color = min(color, vec3(8.0));\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_WORLD_POS CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR CC_SURFACES_DEBUG_VIEW_WORLD_POS + 1\n#define CC_SURFACES_DEBUG_VIEW_FACE_SIDE CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR + 1\n#define CC_SURFACES_DEBUG_VIEW_UV0 CC_SURFACES_DEBUG_VIEW_FACE_SIDE + 1\n#define CC_SURFACES_DEBUG_VIEW_UV1 CC_SURFACES_DEBUG_VIEW_UV0 + 1\n#define CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP CC_SURFACES_DEBUG_VIEW_UV1 + 1\n#define CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP + 1\n#define CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT CC_SURFACES_DEBUG_VIEW_FRAGMENT_NORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL CC_SURFACES_DEBUG_VIEW_FRAGMENT_TANGENT + 1\n#define CC_SURFACES_DEBUG_VIEW_BASE_COLOR CC_SURFACES_DEBUG_VIEW_FRAGMENT_BINORMAL + 1\n#define CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR CC_SURFACES_DEBUG_VIEW_BASE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR CC_SURFACES_DEBUG_VIEW_DIFFUSE_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_TRANSPARENCY CC_SURFACES_DEBUG_VIEW_SPECULAR_COLOR + 1\n#define CC_SURFACES_DEBUG_VIEW_METALLIC CC_SURFACES_DEBUG_VIEW_TRANSPARENCY + 1\n#define CC_SURFACES_DEBUG_VIEW_ROUGHNESS CC_SURFACES_DEBUG_VIEW_METALLIC + 1\n#define CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY CC_SURFACES_DEBUG_VIEW_ROUGHNESS + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE CC_SURFACES_DEBUG_VIEW_SPECULAR_INTENSITY + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_DIRECT_ALL CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE CC_SURFACES_DEBUG_VIEW_DIRECT_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE + 1\n#define CC_SURFACES_DEBUG_VIEW_ENV_ALL CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR + 1\n#define CC_SURFACES_DEBUG_VIEW_EMISSIVE CC_SURFACES_DEBUG_VIEW_ENV_ALL + 1\n#define CC_SURFACES_DEBUG_VIEW_LIGHT_MAP CC_SURFACES_DEBUG_VIEW_EMISSIVE + 1\n#define CC_SURFACES_DEBUG_VIEW_SHADOW CC_SURFACES_DEBUG_VIEW_LIGHT_MAP + 1\n#define CC_SURFACES_DEBUG_VIEW_AO CC_SURFACES_DEBUG_VIEW_SHADOW + 1\n#define CC_SURFACES_DEBUG_VIEW_FOG CC_SURFACES_DEBUG_VIEW_AO + 1\n#define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#define IS_DEBUG_VIEW_LIGHTING_ENABLE_WITH_ALBEDO (cc_debug_view_mode.y > 0.0)\n#define IS_DEBUG_VIEW_MISC_ENABLE_CSM_LAYER_COLORATION (cc_debug_view_mode.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE (cc_debug_view_composite_pack_1.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR (cc_debug_view_composite_pack_1.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE (cc_debug_view_composite_pack_1.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR (cc_debug_view_composite_pack_1.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE (cc_debug_view_composite_pack_2.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP (cc_debug_view_composite_pack_2.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW (cc_debug_view_composite_pack_2.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO (cc_debug_view_composite_pack_2.w > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_NORMAL_MAP (cc_debug_view_composite_pack_3.x > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_FOG (cc_debug_view_composite_pack_3.y > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_TONE_MAPPING (cc_debug_view_composite_pack_3.z > 0.0)\n#define IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION (cc_debug_view_composite_pack_3.w > 0.0)\nvec3 SRGBToLinear (vec3 gamma) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return gamma;\n }\n #endif\n#endif\n return gamma * gamma;\n}\nvec3 LinearToSRGB(vec3 linear) {\n#ifdef CC_USE_SURFACE_SHADER\n #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_GAMMA_CORRECTION) {\n return linear;\n }\n #endif\n#endif\n return sqrt(linear);\n}\nvec4 CCFragOutput (vec4 color) {\n #if CC_USE_HDR\n color.rgb = ACESToneMap(color.rgb);\n #endif\n color.rgb = LinearToSRGB(color.rgb);\n return color;\n}\nvarying vec3 v_position;\nvarying vec2 v_uv;\n#if CC_RECEIVE_SHADOW\n varying mediump vec2 v_shadowBias;\n#endif\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\nvarying mediump vec3 v_normal;\n#if USE_NORMAL_MAP\n varying mediump vec4 v_tangent;\n uniform sampler2D normalMap;\n#endif\n#if USE_1ST_SHADE_MAP\n uniform sampler2D shadeMap1;\n#endif\n#if USE_2ND_SHADE_MAP\n uniform sampler2D shadeMap2;\n#endif\n#if USE_SPECULAR_MAP\n uniform sampler2D specularMap;\n#endif\n#if USE_EMISSIVE_MAP\n uniform sampler2D emissiveMap;\n#endif\n#if USE_ALPHA_TEST\n#endif\nvoid surf (out ToonSurface s) {\n s.shade2 = shadeColor2.rgb * colorScaleAndCutoff.rgb;\n #if USE_2ND_SHADE_MAP\n s.shade2 *= SRGBToLinear(texture2D(shadeMap2, v_uv).rgb);\n #endif\n s.shade1 = shadeColor1.rgb * colorScaleAndCutoff.rgb;\n #if USE_1ST_SHADE_MAP\n s.shade1 *= SRGBToLinear(texture2D(shadeMap1, v_uv).rgb);\n #if SHADE_MAP_1_AS_SHADE_MAP_2\n s.shade2 *= s.shade1.rgb;\n #endif\n #endif\n vec4 baseColor = baseColor;\n #if USE_BASE_COLOR_MAP\n vec4 baseColorMap = texture2D(baseColorMap, v_uv);\n baseColorMap.rgb = SRGBToLinear(baseColorMap.rgb);\n baseColor *= baseColorMap;\n #if BASE_COLOR_MAP_AS_SHADE_MAP_1\n s.shade1 *= baseColorMap.rgb;\n #endif\n #if BASE_COLOR_MAP_AS_SHADE_MAP_2\n s.shade2 *= baseColorMap.rgb;\n #endif\n #endif\n s.baseColor = baseColor;\n s.baseColor.rgb *= colorScaleAndCutoff.xyz;\n #if USE_ALPHA_TEST\n if (s.baseColor.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;\n #endif\n s.normal = v_normal;\n #if CC_RECEIVE_SHADOW\n s.shadowBias = v_shadowBias;\n #endif\n #if USE_NORMAL_MAP\n vec3 nmmp = texture2D(normalMap, v_uv).xyz - vec3(0.5);\n vec3 bitangent = cross(v_normal, v_tangent.xyz) * v_tangent.w;\n s.normal =\n (nmmp.x * emissiveScaleAndStrenth.w) * normalize(v_tangent.xyz) +\n (nmmp.y * emissiveScaleAndStrenth.w) * normalize(bitangent) +\n nmmp.z * normalize(s.normal);\n #endif\n #if CC_PLATFORM_ANDROID_AND_WEBGL && CC_ENABLE_WEBGL_HIGHP_STRUCT_VALUES\n packHighpData(s.position, s.position_fract_part, v_position);\n #else\n s.position = v_position;\n #endif\n s.specular = specular;\n #if USE_SPECULAR_MAP\n s.specular.rgb *= SRGBToLinear(texture2D(specularMap, v_uv).rgb);\n #endif\n s.emissive = emissive.rgb * emissiveScaleAndStrenth.xyz;\n #if USE_EMISSIVE_MAP\n s.emissive *= SRGBToLinear(texture2D(emissiveMap, v_uv).rgb);\n #endif\n s.baseStep = shadeParams.x;\n s.baseFeather = shadeParams.y;\n s.shadeStep = shadeParams.z;\n s.shadeFeather = shadeParams.w;\n s.shadowCover = miscParams.x;\n}\nvec4 frag () {\n ToonSurface s; surf(s);\n vec4 color = CCToonShading(s);\n return CCFragOutput(color);\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":"CCLocalBatched","defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"CCLocal","defines":["!USE_INSTANCING","!USE_BATCHING"]},{"name":"CCForwardLight","defines":["CC_FORWARD_ADD","CC_ENABLE_CLUSTERED_LIGHT_CULLING"]}],"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":179,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":111}},"defines":[{"name":"USE_INSTANCING","type":"boolean"},{"name":"USE_BATCHING","type":"boolean"},{"name":"CC_USE_SKINNING","type":"boolean"},{"name":"CC_USE_BAKED_ANIMATION","type":"boolean"},{"name":"CC_USE_LIGHTMAP","type":"boolean"},{"name":"CC_RECEIVE_SHADOW","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_SUPPORT_CASCADED_SHADOW_MAP","type":"boolean"},{"name":"USE_NORMAL_MAP","type":"boolean"},{"name":"CC_FORWARD_ADD","type":"boolean"},{"name":"CC_PIPELINE_TYPE","type":"number","range":[0,1]},{"name":"CC_FORCE_FORWARD_SHADING","type":"boolean"},{"name":"CC_SHADOWMAP_FORMAT","type":"number","range":[0,3]},{"name":"CC_USE_DEBUG_VIEW","type":"number","range":[0,3]},{"name":"CC_USE_HDR","type":"boolean"},{"name":"USE_BASE_COLOR_MAP","type":"boolean"},{"name":"USE_1ST_SHADE_MAP","type":"boolean"},{"name":"USE_2ND_SHADE_MAP","type":"boolean"},{"name":"USE_SPECULAR_MAP","type":"boolean"},{"name":"USE_EMISSIVE_MAP","type":"boolean"},{"name":"USE_ALPHA_TEST","type":"boolean"},{"name":"ALPHA_TEST_CHANNEL","type":"string","options":["a","r","g","b"]},{"name":"SHADE_MAP_1_AS_SHADE_MAP_2","type":"boolean"},{"name":"BASE_COLOR_MAP_AS_SHADE_MAP_1","type":"boolean"},{"name":"BASE_COLOR_MAP_AS_SHADE_MAP_2","type":"boolean"}]},{"hash":593829744,"name":"builtin-toon|shadow-caster-vs:vert|shadow-caster-fs:frag","blocks":[{"name":"Constants","stageFlags":17,"binding":0,"members":[{"name":"tilingOffset","type":16,"count":1},{"name":"baseColor","type":16,"count":1},{"name":"colorScaleAndCutoff","type":16,"count":1},{"name":"shadeColor1","type":16,"count":1},{"name":"shadeColor2","type":16,"count":1},{"name":"specular","type":16,"count":1},{"name":"shadeParams","type":16,"count":1},{"name":"miscParams","type":16,"count":1},{"name":"emissive","type":16,"count":1},{"name":"emissiveScaleAndStrenth","type":16,"count":1}],"defines":[]}],"samplerTextures":[{"name":"baseColorMap","type":28,"count":1,"stageFlags":16,"binding":1,"defines":["USE_BASE_COLOR_MAP"]}],"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_localShadowBias","format":21,"isInstanced":true,"location":11,"defines":["USE_INSTANCING","CC_RECEIVE_SHADOW"]},{"name":"a_dyn_batch_id","format":11,"location":12,"defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"a_vertexId","format":11,"location":13,"defines":["CC_USE_MORPH"]}],"fragColors":[{"name":"cc_FragColor","typename":"vec4","type":16,"count":1,"stageFlags":16,"location":0,"defines":[]}],"glsl3":{"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.71828183f\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)\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}\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nin vec3 a_position;\nin vec3 a_normal;\nin vec2 a_texCoord;\nin vec4 a_tangent;\n#if CC_USE_SKINNING\n in vec4 a_joints;\n in vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n in highp vec4 a_jointAnimInfo;\n #endif\n in vec4 a_matWorld0;\n in vec4 a_matWorld1;\n in vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n in vec4 a_lightingMapUVParam;\n #endif\n #if CC_RECEIVE_SHADOW\n in vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n in float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n in float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\n#if CC_USE_MORPH\n layout(std140) uniform CCMorph {\n vec4 cc_displacementWeights[15];\n vec4 cc_displacementTextureInfo;\n };\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 pixelIndex) {\n ivec2 texSize = textureSize(tex, 0);\n return texelFetch(tex, ivec2(pixelIndex % texSize.x, pixelIndex / texSize.x), 0);\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(texture(tex, x)),\n decode32(texture(tex, y)),\n decode32(texture(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 layout(std140) uniform CCSkinningTexture {\n highp vec4 cc_jointTextureInfo;\n };\n layout(std140) uniform CCSkinningAnimation {\n highp vec4 cc_jointAnimInfo;\n };\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 layout(std140) uniform CCSkinning {\n highp vec4 cc_joints[CC_JOINT_UNIFORM_CAPACITY * 3];\n };\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 = texture(cc_jointTexture, vec2((x + 0.5) * invSize, y));\n vec4 v2 = texture(cc_jointTexture, vec2((x + 1.5) * invSize, y));\n vec4 v3 = texture(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(texture(cc_jointTexture, vec2((x + 0.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 1.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 2.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 3.5) * invSize, y)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 4.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 5.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 6.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 7.5) * invSize, y)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_jointTexture, vec2((x + 8.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 9.5) * invSize, y))),\n decode32(texture(cc_jointTexture, vec2((x + 10.5) * invSize, y))),\n decode32(texture(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 = texture(cc_realtimeJoint, vec2( x / 256.0, 0.5 / 3.0));\n vec4 v2 = texture(cc_realtimeJoint, vec2( x / 256.0, 1.5 / 3.0));\n vec4 v3 = texture(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(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 0.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 0.5 / 3.0)))\n );\n vec4 v2 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 1.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 3.5)/ 1024.0, 1.5 / 3.0)))\n );\n vec4 v3 = vec4(\n decode32(texture(cc_realtimeJoint, vec2((x + 0.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 1.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(cc_realtimeJoint, vec2((x + 2.5)/ 1024.0, 2.5 / 3.0))),\n decode32(texture(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}\n#if !USE_INSTANCING\n #if USE_BATCHING\n layout(std140) uniform CCLocalBatched {\n highp mat4 cc_matWorlds[10];\n };\n #else\n layout(std140) uniform CCLocal {\n highp mat4 cc_matWorld;\n highp mat4 cc_matWorldIT;\n highp vec4 cc_lightingMapUVParam;\n highp vec4 cc_localShadowBias;\n };\n #endif\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 matWorldIT = matWorld;\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n matWorldIT = matWorld;\n #else\n matWorld = cc_matWorld;\n matWorldIT = cc_matWorldIT;\n #endif\n}\nlayout(std140) uniform Constants {\n vec4 tilingOffset;\n vec4 baseColor;\n vec4 colorScaleAndCutoff;\n vec4 shadeColor1;\n vec4 shadeColor2;\n vec4 specular;\n vec4 shadeParams;\n vec4 miscParams;\n vec4 emissive;\n vec4 emissiveScaleAndStrenth;\n};\nlayout(std140) uniform CCShadow {\n highp mat4 cc_matLightView;\n highp mat4 cc_matLightViewProj;\n highp vec4 cc_shadowInvProjDepthInfo;\n highp vec4 cc_shadowProjDepthInfo;\n highp vec4 cc_shadowProjInfo;\n mediump vec4 cc_shadowNFLSInfo;\n mediump vec4 cc_shadowWHPBInfo;\n mediump vec4 cc_shadowLPNNInfo;\n lowp vec4 cc_shadowColor;\n mediump vec4 cc_planarNDInfo;\n};\nout vec2 v_uv;\nout vec4 v_worldPos;\nout highp vec2 v_clip_depth;\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld, matWorldIT;\n CCGetWorldMatrixFull(matWorld, matWorldIT);\n v_worldPos = matWorld * In.position;\n vec4 clipPos = cc_matLightViewProj * v_worldPos;\n v_clip_depth = clipPos.zw;\n v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;\n return clipPos;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\nlayout(std140) uniform Constants {\n vec4 tilingOffset;\n vec4 baseColor;\n vec4 colorScaleAndCutoff;\n vec4 shadeColor1;\n vec4 shadeColor2;\n vec4 specular;\n vec4 shadeParams;\n vec4 miscParams;\n vec4 emissive;\n vec4 emissiveScaleAndStrenth;\n};\nvec4 packDepthToRGBA (float depth) {\n vec4 ret = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;\n ret = fract(ret);\n ret -= vec4(ret.yzw, 0.0) / 255.0;\n return ret;\n}\nlayout(std140) uniform CCShadow {\n highp mat4 cc_matLightView;\n highp mat4 cc_matLightViewProj;\n highp vec4 cc_shadowInvProjDepthInfo;\n highp vec4 cc_shadowProjDepthInfo;\n highp vec4 cc_shadowProjInfo;\n mediump vec4 cc_shadowNFLSInfo;\n mediump vec4 cc_shadowWHPBInfo;\n mediump vec4 cc_shadowLPNNInfo;\n lowp vec4 cc_shadowColor;\n mediump vec4 cc_planarNDInfo;\n};\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n layout(std140) uniform CCCSM {\n highp vec4 cc_csmViewDir0[4];\n highp vec4 cc_csmViewDir1[4];\n highp vec4 cc_csmViewDir2[4];\n highp vec4 cc_csmAtlas[4];\n highp mat4 cc_matCSMViewProj[4];\n highp vec4 cc_csmProjDepthInfo[4];\n highp vec4 cc_csmProjInfo[4];\n highp vec4 cc_csmSplitsInfo;\n };\n#endif\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.71828183f\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)\nfloat GetLinearDepthFromViewSpace(vec3 viewPos, float near, float far) {\n float dist = length(viewPos);\n return (dist - near) / (far - near);\n}\nfloat CCGetLinearDepth(vec3 worldPos, float viewSpaceBias) {\n\tvec4 viewPos = cc_matLightView * vec4(worldPos.xyz, 1.0);\n viewPos.z += viewSpaceBias;\n\treturn GetLinearDepthFromViewSpace(viewPos.xyz, cc_shadowNFLSInfo.x, cc_shadowNFLSInfo.y);\n}\nfloat CCGetLinearDepth(vec3 worldPos) {\n\treturn CCGetLinearDepth(worldPos, 0.0);\n}\n#if CC_RECEIVE_SHADOW\n layout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_debug_view_mode;\n mediump vec4 cc_debug_view_composite_pack_1;\n mediump vec4 cc_debug_view_composite_pack_2;\n mediump vec4 cc_debug_view_composite_pack_3;\n };\n layout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n };\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n #else\n #endif\n#endif\nin vec2 v_uv;\nin vec4 v_worldPos;\nin highp vec2 v_clip_depth;\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\n#if USE_ALPHA_TEST\n#endif\nvec4 frag () {\n vec4 baseColor = baseColor;\n #if USE_ALPHA_TEST\n #if USE_BASE_COLOR_MAP\n baseColor *= texture(baseColorMap, v_uv);\n #endif\n if (baseColor.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;\n #endif\n highp float clipDepth = v_clip_depth.x / v_clip_depth.y * 0.5 + 0.5;\n if(cc_shadowLPNNInfo.x > 0.000001 && cc_shadowLPNNInfo.x < 1.999999) {\n #if CC_SHADOWMAP_USE_LINEAR_DEPTH\n clipDepth = CCGetLinearDepth(v_worldPos.xyz);\n #endif\n }\n #if CC_SHADOWMAP_FORMAT == 1\n return packDepthToRGBA(clipDepth);\n #else\n return vec4(clipDepth, 1.0, 1.0, 1.0);\n #endif\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"},"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.71828183f\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)\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}\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_RECEIVE_SHADOW\n attribute vec2 a_localShadowBias;\n #endif\n#elif USE_BATCHING\n attribute float a_dyn_batch_id;\n#endif\n#if CC_USE_MORPH\n attribute float a_vertexId;\n int getVertexId() {\n return int(a_vertexId);\n }\n#endif\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}\n#if !USE_INSTANCING\n #if USE_BATCHING\n uniform highp mat4 cc_matWorlds[10];\n #else\n uniform highp mat4 cc_matWorld;\n uniform highp mat4 cc_matWorldIT;\n #endif\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 matWorldIT = matWorld;\n #elif USE_BATCHING\n matWorld = cc_matWorlds[int(a_dyn_batch_id)];\n matWorldIT = matWorld;\n #else\n matWorld = cc_matWorld;\n matWorldIT = cc_matWorldIT;\n #endif\n}\n uniform vec4 tilingOffset;\nuniform highp mat4 cc_matLightViewProj;\nvarying vec2 v_uv;\nvarying vec4 v_worldPos;\nvarying highp vec2 v_clip_depth;\nvec4 vert () {\n StandardVertInput In;\n CCVertInput(In);\n mat4 matWorld, matWorldIT;\n CCGetWorldMatrixFull(matWorld, matWorldIT);\n v_worldPos = matWorld * In.position;\n vec4 clipPos = cc_matLightViewProj * v_worldPos;\n v_clip_depth = clipPos.zw;\n v_uv = a_texCoord * tilingOffset.xy + tilingOffset.zw;\n return clipPos;\n}\nvoid main() { gl_Position = vert(); }","frag":"\nprecision highp float;\n uniform vec4 baseColor;\n uniform vec4 colorScaleAndCutoff;\nvec4 packDepthToRGBA (float depth) {\n vec4 ret = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;\n ret = fract(ret);\n ret -= vec4(ret.yzw, 0.0) / 255.0;\n return ret;\n}\nuniform highp mat4 cc_matLightView;\n uniform mediump vec4 cc_shadowNFLSInfo;\n uniform mediump vec4 cc_shadowLPNNInfo;\n#if CC_SUPPORT_CASCADED_SHADOW_MAP\n #endif\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.71828183f\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)\nfloat GetLinearDepthFromViewSpace(vec3 viewPos, float near, float far) {\n float dist = length(viewPos);\n return (dist - near) / (far - near);\n}\nfloat CCGetLinearDepth(vec3 worldPos, float viewSpaceBias) {\n\tvec4 viewPos = cc_matLightView * vec4(worldPos.xyz, 1.0);\n viewPos.z += viewSpaceBias;\n\treturn GetLinearDepthFromViewSpace(viewPos.xyz, cc_shadowNFLSInfo.x, cc_shadowNFLSInfo.y);\n}\nfloat CCGetLinearDepth(vec3 worldPos) {\n\treturn CCGetLinearDepth(worldPos, 0.0);\n}\n#if CC_RECEIVE_SHADOW\n uniform highp sampler2D cc_shadowMap;\n uniform highp sampler2D cc_spotShadowMap;\n #if CC_SUPPORT_CASCADED_SHADOW_MAP\n #else\n #endif\n#endif\nvarying vec2 v_uv;\nvarying vec4 v_worldPos;\nvarying highp vec2 v_clip_depth;\n#if USE_BASE_COLOR_MAP\n uniform sampler2D baseColorMap;\n#endif\n#if USE_ALPHA_TEST\n#endif\nvec4 frag () {\n vec4 baseColor = baseColor;\n #if USE_ALPHA_TEST\n #if USE_BASE_COLOR_MAP\n baseColor *= texture2D(baseColorMap, v_uv);\n #endif\n if (baseColor.ALPHA_TEST_CHANNEL < colorScaleAndCutoff.w) discard;\n #endif\n highp float clipDepth = v_clip_depth.x / v_clip_depth.y * 0.5 + 0.5;\n if(cc_shadowLPNNInfo.x > 0.000001 && cc_shadowLPNNInfo.x < 1.999999) {\n #if CC_SHADOWMAP_USE_LINEAR_DEPTH\n clipDepth = CCGetLinearDepth(v_worldPos.xyz);\n #endif\n }\n #if CC_SHADOWMAP_FORMAT == 1\n return packDepthToRGBA(clipDepth);\n #else\n return vec4(clipDepth, 1.0, 1.0, 1.0);\n #endif\n}\nvoid main() { gl_FragColor = frag(); }"},"builtins":{"globals":{"blocks":[{"name":"CCShadow","defines":[]},{"name":"CCCSM","defines":["CC_SUPPORT_CASCADED_SHADOW_MAP"]},{"name":"CCGlobal","defines":["CC_RECEIVE_SHADOW"]},{"name":"CCCamera","defines":["CC_RECEIVE_SHADOW"]}],"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":"CCLocalBatched","defines":["!USE_INSTANCING","USE_BATCHING"]},{"name":"CCLocal","defines":["!USE_INSTANCING","!USE_BATCHING"]}],"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":94,"CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS":111}},"defines":[{"name":"USE_INSTANCING","type":"boolean"},{"name":"USE_BATCHING","type":"boolean"},{"name":"CC_USE_SKINNING","type":"boolean"},{"name":"CC_USE_BAKED_ANIMATION","type":"boolean"},{"name":"CC_USE_LIGHTMAP","type":"boolean"},{"name":"CC_RECEIVE_SHADOW","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_SUPPORT_CASCADED_SHADOW_MAP","type":"boolean"},{"name":"USE_BASE_COLOR_MAP","type":"boolean"},{"name":"USE_ALPHA_TEST","type":"boolean"},{"name":"ALPHA_TEST_CHANNEL","type":"string","options":["a","r","g","b"]},{"name":"CC_SHADOWMAP_USE_LINEAR_DEPTH","type":"boolean"},{"name":"CC_SHADOWMAP_FORMAT","type":"number","range":[0,3]}]}],[{"passes":[{"program":"builtin-toon|legacy/main-functions/outline-vs:vert|legacy/main-functions/outline-fs:frag","switch":"USE_OUTLINE_PASS","rasterizerState":{"cullMode":1},"depthStencilState":{"depthFunc":3,"depthTest":true,"depthWrite":true},"properties":{"lineWidth":{"type":13,"value":[10],"handleInfo":["outlineParams",0,13]},"depthBias":{"type":13,"value":[0],"handleInfo":["outlineParams",1,13]},"baseColor":{"type":16},"baseColorMap":{"value":"grey","type":28},"outlineParams":{"type":16,"value":[10,0,0,0]}}},{"program":"builtin-toon|toon-vs:vert|toon-fs:frag","properties":{"tilingOffset":{"type":16,"value":[1,1,0,0]},"mainColor":{"linear":true,"type":16,"value":[0.6,0.6,0.6,1],"handleInfo":["baseColor",0,16]},"colorScale":{"type":15,"value":[1,1,1],"handleInfo":["colorScaleAndCutoff",0,15]},"alphaThreshold":{"type":13,"value":[0.5],"handleInfo":["colorScaleAndCutoff",3,13]},"shadeColor1":{"linear":true,"type":16,"value":[0.4,0.4,0.4,1]},"shadeColor2":{"linear":true,"type":16,"value":[0.2,0.2,0.2,1]},"specular":{"linear":true,"type":16,"value":[1,1,1,0.3]},"baseStep":{"type":13,"value":[0.8],"handleInfo":["shadeParams",0,13]},"baseFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",1,13]},"shadeStep":{"type":13,"value":[0.5],"handleInfo":["shadeParams",2,13]},"shadeFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",3,13]},"shadowCover":{"type":13,"value":[0.5],"handleInfo":["miscParams",0,13]},"emissive":{"linear":true,"type":16,"value":[0,0,0,1]},"emissiveScale":{"type":15,"value":[1,1,1],"handleInfo":["emissiveScaleAndStrenth",0,15]},"normalStrength":{"slide":true,"step":0.001,"type":13,"value":[1],"range":[0,5],"handleInfo":["emissiveScaleAndStrenth",3,13]},"normalMap":{"value":"normal","type":28},"mainTexture":{"value":"white","type":28,"handleInfo":["baseColorMap",0,28]},"shadeMap1":{"value":"white","type":28},"shadeMap2":{"value":"white","type":28},"specularMap":{"value":"white","type":28},"emissiveMap":{"value":"grey","type":28},"baseColor":{"type":16,"value":[0.6,0.6,0.6,1]},"colorScaleAndCutoff":{"type":16,"value":[1,1,1,0.5]},"shadeParams":{"type":16,"value":[0.8,0.001,0.5,0.001]},"miscParams":{"type":16,"value":[0.5,0,0,0]},"emissiveScaleAndStrenth":{"type":16,"value":[1,1,1,1]},"baseColorMap":{"type":28,"value":"white"}}},{"phase":"forward-add","propertyIndex":1,"program":"builtin-toon|toon-vs:vert|toon-fs:frag","embeddedMacros":{"CC_FORWARD_ADD":true},"blendState":{"targets":[{"blend":true,"blendSrc":1,"blendDst":1,"blendSrcAlpha":0,"blendDstAlpha":1}]},"depthStencilState":{"depthFunc":2,"depthTest":true,"depthWrite":false},"properties":{"tilingOffset":{"type":16,"value":[1,1,0,0]},"mainColor":{"linear":true,"type":16,"value":[0.6,0.6,0.6,1],"handleInfo":["baseColor",0,16]},"colorScale":{"type":15,"value":[1,1,1],"handleInfo":["colorScaleAndCutoff",0,15]},"alphaThreshold":{"type":13,"value":[0.5],"handleInfo":["colorScaleAndCutoff",3,13]},"shadeColor1":{"linear":true,"type":16,"value":[0.4,0.4,0.4,1]},"shadeColor2":{"linear":true,"type":16,"value":[0.2,0.2,0.2,1]},"specular":{"linear":true,"type":16,"value":[1,1,1,0.3]},"baseStep":{"type":13,"value":[0.8],"handleInfo":["shadeParams",0,13]},"baseFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",1,13]},"shadeStep":{"type":13,"value":[0.5],"handleInfo":["shadeParams",2,13]},"shadeFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",3,13]},"shadowCover":{"type":13,"value":[0.5],"handleInfo":["miscParams",0,13]},"emissive":{"linear":true,"type":16,"value":[0,0,0,1]},"emissiveScale":{"type":15,"value":[1,1,1],"handleInfo":["emissiveScaleAndStrenth",0,15]},"normalStrength":{"slide":true,"step":0.001,"type":13,"value":[1],"range":[0,5],"handleInfo":["emissiveScaleAndStrenth",3,13]},"normalMap":{"value":"normal","type":28},"mainTexture":{"value":"white","type":28,"handleInfo":["baseColorMap",0,28]},"shadeMap1":{"value":"white","type":28},"shadeMap2":{"value":"white","type":28},"specularMap":{"value":"white","type":28},"emissiveMap":{"value":"grey","type":28},"baseColor":{"type":16,"value":[0.6,0.6,0.6,1]},"colorScaleAndCutoff":{"type":16,"value":[1,1,1,0.5]},"shadeParams":{"type":16,"value":[0.8,0.001,0.5,0.001]},"miscParams":{"type":16,"value":[0.5,0,0,0]},"emissiveScaleAndStrenth":{"type":16,"value":[1,1,1,1]},"baseColorMap":{"type":28,"value":"white"}}},{"phase":"shadow-caster","propertyIndex":1,"program":"builtin-toon|shadow-caster-vs:vert|shadow-caster-fs:frag","rasterizerState":{"cullMode":1},"properties":{"tilingOffset":{"type":16,"value":[1,1,0,0]},"mainColor":{"type":16,"value":[0.6,0.6,0.6,1],"handleInfo":["baseColor",0,16]},"colorScale":{"type":15,"value":[1,1,1],"handleInfo":["colorScaleAndCutoff",0,15]},"alphaThreshold":{"type":13,"value":[0.5],"handleInfo":["colorScaleAndCutoff",3,13]},"shadeColor1":{"type":16,"value":[0.4,0.4,0.4,1]},"shadeColor2":{"type":16,"value":[0.2,0.2,0.2,1]},"specular":{"type":16,"value":[1,1,1,0.3]},"baseStep":{"type":13,"value":[0.8],"handleInfo":["shadeParams",0,13]},"baseFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",1,13]},"shadeStep":{"type":13,"value":[0.5],"handleInfo":["shadeParams",2,13]},"shadeFeather":{"type":13,"value":[0.001],"handleInfo":["shadeParams",3,13]},"emissive":{"type":16,"value":[0,0,0,1]},"emissiveScale":{"type":15,"value":[1,1,1],"handleInfo":["emissiveScaleAndStrenth",0,15]},"normalStrenth":{"type":13,"value":[1],"handleInfo":["emissiveScaleAndStrenth",3,13]},"mainTexture":{"value":"white","type":28,"handleInfo":["baseColorMap",0,28]},"baseColor":{"type":16,"value":[0.6,0.6,0.6,1]},"colorScaleAndCutoff":{"type":16,"value":[1,1,1,0.5]},"shadeParams":{"type":16,"value":[0.8,0.001,0.5,0.001]},"emissiveScaleAndStrenth":{"type":16,"value":[1,1,1,1]},"baseColorMap":{"type":28,"value":"white"}}}]}]]],0,0,[],[],[]],[[[48,"Skin-0",753820634,["RootNode/Bone004/Bone005/Bone006","RootNode/Bone004/Bone005","RootNode/Bone004","RootNode/Bone001/Bone002/Bone003","RootNode/Bone001/Bone002","RootNode/Bone001"],[[[7,0.0004333891556598246,0.10229005664587021,0.21936364471912384,0,-0.0009294628980569541,-0.21936167776584625,0.10229097306728363,0,0.24203883111476898,-0.0010255376109853387,2.406476085070608e-8,0,-0.08006425946950912,0.028319520875811577,-0.005389618221670389,1],[7,0.0006473671528510749,0.10228893905878067,0.21936364471912384,0,-0.001388339907862246,-0.21935929358005524,0.10229097306728363,0,0.24203617870807648,-0.0015318524092435837,2.4064471304541257e-8,0,-0.04029082506895065,0.0284869447350502,-0.005389610305428505,1],[7,-0.0006353461649268866,0.10228794068098068,0.21936413645744324,0,0.0013624817365780473,-0.21935993432998657,0.10228990018367767,0,0.2420363426208496,0.0015033365925773978,1.664581716909197e-8,0,-0.0001784319174475968,0.02797948755323887,-0.0053894720040261745,1],[7,0.0004333891556598246,0.10229005664587021,0.21936364471912384,0,-0.0009294628980569541,-0.21936167776584625,0.10229097306728363,0,0.24203883111476898,-0.0010255376109853387,2.406476085070608e-8,0,-0.08025984466075897,-0.017842883244156837,0.01121316384524107,1],[7,0.0006473671528510749,0.10228893905878067,0.21936364471912384,0,-0.001388339907862246,-0.21935929358005524,0.10229097306728363,0,0.24203617870807648,-0.0015318524092435837,2.4064471304541257e-8,0,-0.040582988411188126,-0.017674952745437622,0.011213171295821667,1],[7,-0.0006353461649268866,0.10228794068098068,0.21936413645744324,0,0.0013624817365780473,-0.21935993432998657,0.10228990018367767,0,0.2420363426208496,0.0015033365925773978,1.664581716909197e-8,0,0.00010828844096977264,-0.01818251982331276,0.011213085614144802,1]],8,8,8,8,8,8]]],0,0,[],[],[]],[[[18,".bin",891374575,[{"primitives":[{"primitiveMode":7,"jointMapIndex":0,"vertexBundelIndices":[0],"indexView":{"offset":8080,"length":462,"count":231,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":8080,"count":101,"stride":80},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false},{"name":"a_texCoord1","format":21,"isNormalized":false}]}],"jointMaps":[[0,1,2,3,4,5]]},"minPosition",8,[1,-0.23816974461078644,-0.3651643395423889,-0.02080436609685421],"maxPosition",8,[1,0.2359408587217331,0.26479941606521606,0.6728445887565613]]],-1],0,0,[],[],[]],[[{"name":"x","rect":{"x":10,"y":7,"width":44,"height":49},"offset":{"x":0,"y":0.5},"originalSize":{"width":64,"height":64},"rotated":false,"capInsets":[0,0,0,0],"vertices":{"rawPosition":[-22,-24.5,0,22,-24.5,0,-22,24.5,0,22,24.5,0],"indexes":[0,1,2,2,1,3],"uv":[10,57,54,57,10,8,54,8],"nuv":[0.15625,0.125,0.84375,0.125,0.15625,0.890625,0.84375,0.890625],"minPos":{"x":-22,"y":-24.5,"z":0},"maxPos":{"x":22,"y":24.5,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[35]],[[{"name":"default_scrollbar_vertical","rect":{"x":0,"y":0,"width":15,"height":30},"offset":{"x":0,"y":0},"originalSize":{"width":15,"height":30},"rotated":false,"capInsets":[4,10,4,10],"vertices":{"rawPosition":[-7.5,-15,0,7.5,-15,0,-7.5,15,0,7.5,15,0],"indexes":[0,1,2,2,1,3],"uv":[0,30,15,30,0,0,15,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-7.5,"y":-15,"z":0},"maxPos":{"x":7.5,"y":15,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[36]],[[[42,"grass",[{"blendState":{"targets":[{}]},"depthStencilState":{},"rasterizerState":{}}],[{"USE_TEXTURE":true}],[[[{"alphaThreshold":0},"mainTexture",6,0]],11]]],0,0,[0,0],[15,16],[37,38]],[[{"name":"default_panel","rect":{"x":0,"y":0,"width":20,"height":20},"offset":{"x":0,"y":0},"originalSize":{"width":20,"height":20},"rotated":false,"capInsets":[8,8,8,8],"vertices":{"rawPosition":[-10,-10,0,10,-10,0,-10,10,0,10,10,0],"indexes":[0,1,2,2,1,3],"uv":[0,20,20,20,0,0,20,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-10,"y":-10,"z":0},"maxPos":{"x":10,"y":10,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[39]],[[[49,"islands"],[60,"islands",[-2],[0,"26LvC5hbxAuJZ9Jl2SB/IV",-1,0]],[21,"RootNode",1,[-3,-4,-5,-6,-7,-8,-9,-10,-11,-12],[0,"068WXOAs1HrIDx+RBQ6XoV",1,0]],[17,"plane01",2,[[75,-13,[2,"ddvMFij+ZIL5lu+/NQX8Nf"],[0],[3],1]],[0,"70dgNwYARPfbvgVcNs+gIQ",1,0],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,4.25968408584595,4.25968408584595,2.35247683525085],[1,-90.00000000000003,0,0]],[79,"stone1",2,[[39,1,-14,[2,"e3XMjUJKFLH41z39JaWzyB"],[2],[3],3]],[0,"fd517lz3tOuqVWGd5300X6",1,0],[1,-1.68451106548309,0.804959058761597,-2.55509376525879],[1,0.111417099833488,0.111417099833488,0.111417099833488],[1,0.000009334667642611398,0,0]],[32,"tree1",2,[[75,-15,[2,"a5Viy6l3VLDpf6gY5yZF+v"],[4],[3],5]],[0,"1evO3wfhhGVomhJPkvbiM/",1,0],[1,2.69967889785767,0.392187118530273,-3.67192149162292],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[32,"tree1(__autogen 3)",2,[[39,1,-16,[2,"e4If/bQrJCsb9D9JopZa2h"],[6],[3],7]],[0,"91DpAWXZ9CFJ+Wk1gnOU27",1,0],[1,4.34285020828247,0.273025780916214,-4.5796275138855],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[32,"tree1(__autogen 4)",2,[[39,1,-17,[2,"d7Vkz0NV5Mn4RUce28JVTp"],[8],[3],9]],[0,"03YnQPZo5Nc7TYZfZ1EVIK",1,0],[1,-2.78155946731567,0.366120487451553,-5.44366216659546],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[32,"tree1(__autogen 5)",2,[[39,1,-18,[2,"3eVATgLQJKDbqOvE33W2uc"],[10],[3],11]],[0,"aehmnp6BdEt5duOREy07Ic",1,0],[1,-3.78196001052856,0.328564822673798,-3.62895131111145],[3,-0.7071067811865447,-6.18172403853676e-8,-6.18172403853676e-8,0.7071067811865447],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-89.99999999999999,-0.000010017912624975451,0]],[32,"tree1(__autogen 6)",2,[[39,1,-19,[2,"2akU/MgO5Ovo6QcS0c/I7e"],[12],[3],13]],[0,"1dXVprqA1AkpKbrdcroE4U",1,0],[1,-6.02857780456543,0.0573978498578072,-3.32550001144409],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[32,"tree1(__autogen 7)",2,[[39,1,-20,[2,"54xaKIQbtPLK5r21VY0qmM"],[14],[3],15]],[0,"c2n9MRvPxJRbv1PP2mhkZO",1,0],[1,-0.547172009944916,0.595235526561737,-3.40697646141052],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[32,"tree1(__autogen 8)",2,[[39,1,-21,[2,"23UFBqszxJ/6Otof04QwYT"],[16],[3],17]],[0,"e7VpTFkQ1Ev40vpNxYe7EG",1,0],[1,-6.58904409408569,0.117208734154701,-1.02060234546661],[3,-0.7071067811865476,0,0,0.7071067811865476],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-90.00000000000003,0,0]],[32,"tree1(__autogen 9)",2,[[39,1,-22,[2,"c7PE6gNTdDw45ytwlOEWR3"],[18],[3],19]],[0,"a1wQefYUNInYWhsOmPzInv",1,0],[1,5.92053079605103,0.1805190294981,-2.71322011947632],[3,-0.7071067811865447,-6.18172403853676e-8,-6.18172403853676e-8,0.7071067811865447],[1,2.53999996185303,2.53999996185303,2.53999996185303],[1,-89.99999999999999,-0.000010017912624975451,0]]],0,[0,13,1,0,-1,2,0,-1,3,0,-2,4,0,-3,5,0,-4,6,0,-5,7,0,-6,8,0,-7,9,0,-8,10,0,-9,11,0,-10,12,0,0,3,0,0,4,0,0,5,0,0,6,0,0,7,0,0,8,0,0,9,0,0,10,0,0,11,0,0,12,0,20,1,22],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-1,8,-1,8,-1,8,-1,8,-1,8,-1,8,-1,8,-1,8,-1,8,-1,8],[40,41,42,43,11,44,11,45,11,46,11,47,11,48,11,49,11,50,11,51]],[[[49,"soldier"],[80,"soldier",[-3],[[56,true,-2,[2,"04W3Kzvb9BZbZUGFZzfzi5"],[12],13]],[0,"6dMvPN2t1B66O9Zc3HG8dr",-1,0],[1,0,0.956,1.402]],[21,"RootNode",1,[-4,-5,-6,-7,-8],[0,"a5uiqiY3JH2IVaNOBBe7fQ",1,0]],[81,"Bip001 Spine",[-9,-10,-11],[0,"deedfocu1E0amfQjzHnnD8",1,0],[1,0.0765029862523079,-0.000119566058856435,1.06260117149759e-7],[3,-0.000002080475910607327,-6.936759723456761e-7,0.0003981589901667568,0.9999999207323014],[1,-0.00023837338537102568,-0.00007939450691674313,0.045625660794268635]],[82,"Bip001 Neck",[-12,-13,-14],[0,"de+U9IqPVD+qUUY0y7H/86",1,0],[1,0.15020164847374,-0.0000435724105045665,-1.20852522433879e-10]],[91,"Bip001",2,[[[8,"Bip001 Footsteps",-15,[0,"24sP2WouNOyq9Pp+iqRgiX",1,0],[1,-5.16987871290063e-28,0,-0.734457075595856],[3,-6.921034890422563e-34,6.921044533149828e-34,0.7071063043492202,0.7071072580235535],[1,0,-1.1216009582263186e-31,90]],-16],4,1],[0,"15XJ/3651AFKLyr6XRj3d7",1,0],[1,0,0.738336980342865,-3.74271143591121e-12],[3,-0.5000003576277411,-0.4999996423720031,-0.4999996423720031,0.5000003576277411],[1,-90,-89.99991803772988,0]],[17,"soldier",2,[[93,1,-17,[2,"78XZsd31xPjIsSP2888FcN"],[0],[3],1,1,2]],[0,"824q3ldSpHoYl9xi6zWeg4",1,0],[3,0.9999999999999953,0,0,-9.735359185469814e-8],[1,87.7489852905273,87.7489852905273,87.7489852905273],[1,-179.99998884410013,0,0]],[83,"Bip001 Pelvis",5,[3],[0,"9brOPlFAxPnLhkrpP6KbLQ",1,0],[3,-0.4999999925491744,-0.4999999925491744,-0.4999993070957696,0.5000007078049007],[1,-89.9999197452773,-89.9999197452773,-0.0000017074910412130916]],[25,"Bip001 L Thigh",3,[-18],[0,"4aENadJ59Io4SS6BMn9Aw4",1,0],[1,-0.0765029117465019,0.000180334449396469,0.0665242150425911],[3,-0.015412850192755845,0.9969698713847834,0.002043751751963479,-0.07621904406852757],[1,-0.098918034361683,-171.25793904676914,-1.7789668366715101]],[25,"Bip001 L Calf",8,[-19],[0,"71+6ovA8dDUowhlyNGBIbM",1,0],[1,0.368020862340927,-2.38418573772492e-9,1.90734859017994e-8],[3,-3.77253945323161e-21,-4.658679694134547e-18,-0.0008097870399876981,0.999999672122421],[1,-8.646032309262241e-19,-5.338462443351186e-16,-0.09279476953314847]],[25,"Bip001 L Foot",9,[-20],[0,"71/rP0sWxM1bfHuNwls2lv",1,0],[1,0.29802131652832,-2.38418573772492e-9,0],[3,0.0020737143220202685,-0.07621822672483194,0.016616994877612996,0.9969505289155877],[1,0.3822464844159605,-8.749946017824339,1.8805865416881686]],[7,"Bip001 L Toe0",10,[[84,"Bip001 L Toe0Nub",-21,[0,"b7ARhVJWFJP4yiboWbM1Xs",1,0],[1,0.00997863244265318,-2.98023217215615e-10,3.55271359939116e-17],[3,9.55341250274695e-16,-2.4399608215727e-23,1,1.83758927467374e-15],[1,-1,-1,-1],[1,180,-179.9999999999999,2.1057221983462293e-13]]],[0,"b7IX4wc+BII5SOxaDKm4bu",1,0],[1,0.0765028968453407,0.0984558463096619,1.90734859017994e-8],[3,-1.5454308319985125e-8,-1.5454308319985125e-8,0.7071067811865472,0.7071067811865472],[1,0,-0.0000025044778683729224,90]],[25,"Bip001 R Thigh",3,[-22],[0,"baRkxlpMJMup2UzoK3llZt",1,0],[1,-0.0765029117465019,0.000180703471414745,-0.0665242150425911],[3,-0.0154126518850906,0.9969698755273314,-0.0020409899233692465,0.07621910398987286],[1,0.09860398393799301,171.25792731952373,-1.7789200579558455]],[25,"Bip001 R Calf",12,[-23],[0,"8a4oYAyD9MkZi9aL5G15gW",1,0],[1,0.36802089214325,0,-3.55271359939116e-17],[3,2.226103102352033e-19,7.125063520427799e-18,-0.0008097898921612967,0.9999996721201113],[1,2.6170459347986135e-17,8.164935972515574e-16,-0.09279509636827488]],[25,"Bip001 R Foot",13,[-24],[0,"cdWn1utjJOUaNdTLXxb/CR",1,0],[1,0.29802131652832,0,-3.81469718035987e-8],[3,-0.002073778117879438,0.07621821928385913,0.016617013506159614,0.9969505290412618],[1,-0.38225392566993516,8.749945293799216,1.8805881155171484]],[7,"Bip001 R Toe0",14,[[63,"Bip001 R Toe0Nub",-25,[0,"77BI3YwgNJqKMpf0rJhZ9s",1,0],[1,0.00997863244265318,-2.98023217215615e-10,7.10542719878232e-17]]],[0,"26R5ll6SNGP5ArlFhrFOzH",1,0],[1,0.0765028968453407,0.0984558537602425,1.90734859017994e-8],[3,-1.5454308319985125e-8,-1.5454308319985125e-8,0.7071067811865472,0.7071067811865472],[1,0,-0.0000025044778683729224,90]],[85,"Bip001 Spine1",3,[4],[0,"78+5xpqyNL2aHMIBr4YHvg",1,0],[1,0.150201484560966,-0.000119601711048745,-3.31727090241429e-10]],[25,"Bip001 L Clavicle",4,[-26],[0,"c67UVUfoFCNLAcx8dX7SW1",1,0],[1,0,0.0000435078145528678,0.0232834853231907],[3,0.6087613827170933,-0.0002434881366867595,0.7933532758994495,0.0003150325566206266],[1,179.9558877717535,-104.99999523006848,0.01165464185401893]],[25,"Bip001 L UpperArm",17,[-27],[0,"66qUHYCHZNMoAvIMM8jTZn",1,0],[1,0.272405058145523,4.54747340722069e-15,0],[3,0.004462069723208538,0.4381802273458216,-0.0019434620153348766,0.8988739629404916],[1,0.5572016837940187,51.97620557313351,0.02386521946895269]],[25,"Bip001 L Forearm",18,[-28],[0,"503RTkgyFOwZRj7QxbXFGT",1,0],[1,0.263291478157043,0,0],[3,-2.7197715504795845e-20,-3.0893820368327117e-17,-0.0008803606294924629,0.9999996124825059],[1,-6.233264281423144e-18,-3.5401778996822195e-15,-0.10088191006996569]],[7,"Bip001 L Hand",19,[[8,"sword01",-29,[0,"98Mxm4C+NAIp1/ms1CXDWg",1,0],[1,0.0919111594557762,0.0340489186346531,-0.14926840364933],[3,0.6409670678902519,-0.3070256396863465,-0.5278458569202463,-0.4650540030872693],[1,-112.37885078724646,75.2002383569922,5.587571211625747]]],[0,"7cWlWOkFtKX6ILXuZfhYqO",1,0],[1,0.199572831392288,-5.9604643443123e-10,1.42108543975646e-16],[3,-0.7068252124052271,1.0458620867947887e-8,1.0614867442646885e-8,0.7073882378922519],[1,-89.95437890588059,0.0000017075473071153707,1.3340228971442967e-8]],[25,"Bip001 R Clavicle",4,[-30],[0,"9fRB6KFOpAz6pb5W8NAqZg",1,0],[1,0,0.0000436370064562652,-0.0232834853231907],[3,-0.6087613827171046,0.00024128768333211222,0.793353275899464,0.0003167210153793466],[1,-179.95597003338875,104.99999512047448,0.011961643569376679]],[25,"Bip001 R UpperArm",21,[-31],[0,"a72KzY4dJDrb/Ifgjl7CSF",1,0],[1,0.272405058145523,6.82120985672115e-14,-1.42108543975646e-16],[3,-0.030114175418424236,-0.43755956999841955,0.05059855375302801,0.897259463867486],[1,-0.5631334715243025,-51.96038786477057,6.727854372934277]],[25,"Bip001 R Forearm",22,[-32],[0,"5eAc4VAlRExZ6nABKN5Ihq",1,0],[1,0.263291418552399,0,-7.62939436071974e-8],[3,-8.302567498559346e-18,-5.588016764292516e-17,-0.13176086831298384,0.9912815309393233],[1,-1.8510999406615195e-15,-6.705762043264369e-15,-15.14271605062808]],[7,"Bip001 R Hand",23,[[8,"shield01",-33,[0,"4f4kzbhYBIMIVjz0nZTcvw",1,0],[1,0.124533005058765,-0.00692871073260903,0.0576667860150337],[3,0.5417342069004817,-0.1379658103002438,0.11668003843623054,0.8208990515846776],[1,67.2841187503732,-20.685866498064005,2.411917394086867]]],[0,"19JEI2tAtAo5mcAZ7XSRWH",1,0],[1,0.199572905898094,8.88178399847791e-18,0],[3,0.7068252124052272,-1.9327187937127104e-17,1.9311804031753923e-17,0.707388237892252],[1,89.95437890588059,-3.1308585900006548e-15,-7.956237644289779e-23]],[7,"Bip001 Head",4,[[63,"Bip001 HeadNub",-34,[0,"ebvw49UjBMKoIvQOBhsyUF",1,0],[1,0.475234657526016,-1.45519149031062e-13,2.99510855318999e-20]]],[0,"4ckJuubwNG3KpsMgkuxo12",1,0],[1,0.0547203049063683,-1.38777874976217e-19,2.71050537062924e-22],[3,-7.265599787883251e-14,1.1042733174299354e-9,-0.0003988305609355657,0.9999999204670887],[1,4.214242912539149e-11,1.2654042790710837e-7,-0.04570261697650697]],[17,"shield",2,[[19,-35,[2,"ffoVYmt2NOmIBz5DHpacF8"],[3],[3],1,4,5]],[0,"2fgzyRcBxNmZKzBdJpnT0Q",1,0],[3,0.9999999999999878,0,0,-1.569582366300871e-7],[1,87.7489852905273,87.7489852905273,87.7489852905273],[1,-179.99998201391097,0,0]],[17,"sword",2,[[19,-36,[2,"9aCVBuMeZPv6so1VxT6c40"],[6],[3],1,7,8]],[0,"d0xEUY/HZBVZJ0EMEz3doQ",1,0],[3,0.9999999999999878,0,0,-1.569582366300871e-7],[1,87.7489852905273,87.7489852905273,87.7489852905273],[1,-179.99998201391097,0,0]],[32,"shield01",2,[[19,-37,[2,"ca1srfPsJJgKKJww9GO/JE"],[9],[3],1,10,11]],[0,"464KPea2NOibwROP5moUvA",1,0],[1,-0.00499999988824129,0,0.00499999988824129],[3,0.9999999999999878,0,0,-1.569582366300871e-7],[1,87.7489852905273,87.7489852905273,87.7489852905273],[1,-179.99998201391097,0,0]]],0,[0,13,1,0,0,1,0,-1,2,0,-1,6,0,-2,5,0,-3,26,0,-4,27,0,-5,28,0,-1,8,0,-2,12,0,-3,16,0,-1,17,0,-2,21,0,-3,25,0,2,5,0,-2,7,0,0,6,0,-1,9,0,-1,10,0,-1,11,0,2,11,0,-1,13,0,-1,14,0,-1,15,0,2,15,0,-1,18,0,-1,19,0,-1,20,0,2,20,0,-1,22,0,-1,23,0,-1,24,0,2,24,0,2,25,0,0,26,0,0,27,0,0,28,0,20,1,3,2,7,4,2,16,37],[0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-1,8,10,-1,8,10,-1,8,10,-1,8,10,-1,11],[14,52,53,14,54,55,14,56,57,58,59,60,19,19]],[[[18,".bin",2341262723,[{"primitives":[{"primitiveMode":7,"jointMapIndex":0,"vertexBundelIndices":[0],"indexView":{"offset":70128,"length":6960,"count":3480,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":70128,"count":974,"stride":72},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false}]}],"jointMaps":[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]]},"minPosition",8,[1,-0.006235902663320303,-0.022199034690856934,-0.00308204535394907],"maxPosition",8,[1,0.006235902663320303,0.0000021968080545775592,0.0029080540407449007]]],-1],0,0,[],[],[]],[[[48,"Skin-0",2507836796,["RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 L Thigh","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 R Thigh","RootNode/Bip001/Bip001 Pelvis","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 R Thigh/Bip001 R Calf","RootNode/Bip001","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 L Thigh/Bip001 L Calf","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 R Thigh/Bip001 R Calf/Bip001 R Foot","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 Head/Bip001 HeadNub","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 Head","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 L Thigh/Bip001 L Calf/Bip001 L Foot","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle/Bip001 L UpperArm","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle/Bip001 L UpperArm/Bip001 L Forearm","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle/Bip001 L UpperArm/Bip001 L Forearm/Bip001 L Hand","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand","RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/shield01"],[[[7,13.330132484436035,0.5659459233283997,-86.72872161865234,0,86.68508911132812,2.7542707920074463,13.341398239135742,0,2.808293342590332,-87.70392608642578,-0.14067713916301727,0,0.719279408454895,0.022746119648218155,0.1780078411102295,1],[7,-13.330143928527832,-0.5657054781913757,-86.72872924804688,0,86.68508911132812,2.7542707920074463,-13.34140396118164,0,2.8082568645477295,-87.70392608642578,0.14043928682804108,0,0.7192792892456055,0.022746119648218155,-0.17800788581371307,1],[7,0.00012169029650976881,0.0002419860102236271,87.74899291992188,0,-87.74898529052734,-0.00001708502350084018,0.00012169034744147211,0,0.000017085358194890432,-87.74899291992188,0.0002419859665678814,0,-0.738336980342865,6.5663993339959426e-12,0.0000010239258472211077,1],[7,9.57883514729474e-8,-0.00012308494478929788,87.74899291992188,0,-87.74895477294922,0.06985900551080704,1.9377911542051152e-7,0,-0.06985900551080704,-87.74896240234375,-0.00012308482837397605,0,-0.8148396015167236,0.0007684377487748861,2.1313388831600832e-9,1],[7,-13.329378128051758,-0.5835267305374146,-86.72872924804688,0,86.68132781982422,2.870192527770996,-13.341405868530273,0,2.9255402088165283,-87.7000961303711,0.14043459296226501,0,0.3512277603149414,0.023215843364596367,-0.17800790071487427,1],[7,0.00012029569188598543,87.74899291992188,-5.373075573876507e-15,0,-0.000017085358194890432,2.3417063427233487e-11,-87.74898529052734,0,-87.74899291992188,0.00012029569188598543,0.000017085358194890432,0,3.742711869592075e-12,-5.034101432245029e-17,-0.738336980342865,1],[7,13.329362869262695,0.5837728977203369,-86.72872161865234,0,86.68132781982422,2.870190143585205,13.341397285461426,0,2.9255752563476562,-87.7000961303711,-0.14067858457565308,0,0.3512278199195862,0.023215826600790024,0.1780078411102295,1],[7,0.000003835630195681006,0.00012029569188598543,-87.74899291992188,0,87.74898529052734,-0.000017085363651858643,0.0000038356070035661105,0,-0.000017085358194890432,-87.74899291992188,-0.00012029569188598543,0,0.08038292825222015,0.021714111790060997,-0.16770152747631073,1],[7,0.0001178546590381302,-0.00012308491568546742,87.74899291992188,0,-87.74898529052734,-0.000017085523722926155,0.00011785465176217258,0,0.000017085358194890432,-87.74899291992188,-0.00012308494478929788,0,-1.6451982259750366,5.87142210406455e-7,0.0000022096469365351368,1],[7,0.0001178546590381302,-0.00012308491568546742,87.74899291992188,0,-87.74898529052734,-0.000017085523722926155,0.00011785465176217258,0,0.000017085358194890432,-87.74899291992188,-0.00012308494478929788,0,-1.1699634790420532,-5.1139195988980646e-8,0.0000015713648053861107,1],[7,-84.7590103149414,-0.00011930296022910625,22.711111068725586,0,22.711111068725586,0.000016954663806245662,84.7590103149414,0,-0.00011962600547121838,87.74899291992188,0.00001450093350285897,0,0.26615607738494873,4.7347434417588374e-8,1.0832682847976685,1],[7,84.7590103149414,-0.00012128843081882223,22.711111068725586,0,22.711111068725586,0.000016954663806245662,-84.7590103149414,0,0.00011276743316557258,87.74899291992188,0.00004776870264322497,0,0.26615607738494873,4.734742375944734e-8,-1.0832682847976685,1],[7,9.57883514729474e-8,-0.00012308494478929788,87.74899291992188,0,-87.74895477294922,0.06985900551080704,1.9377911542051152e-7,0,-0.06985900551080704,-87.74896240234375,-0.00012308482837397605,0,-0.9650411605834961,0.0008880393579602242,2.4630661954461175e-9,1],[7,9.57883514729474e-8,-0.00012308494478929788,87.74899291992188,0,-87.74895477294922,0.06985900551080704,1.9377911542051152e-7,0,-0.06985900551080704,-87.74896240234375,-0.00012308482837397605,0,-1.1152427196502686,0.0009316118084825575,2.583918634613269e-9,1],[7,0.000003835630195681006,0.00012029569188598543,-87.74899291992188,0,87.74898529052734,-0.000017085363651858643,0.0000038356070035661105,0,-0.000017085358194890432,-87.74899291992188,-0.00012029569188598543,0,0.08038290590047836,0.0217141043394804,0.16770148277282715,1],[7,34.319801330566406,0.7709546685218811,80.75544738769531,0,80.75911712646484,-0.3673746883869171,-34.31785202026367,0,0.0365816168487072,87.74483489990234,-0.853227436542511,0,0.8495007157325745,-0.006890855263918638,-0.672168493270874,1],[7,-34.105628967285156,3.229346752166748,80.7852783203125,0,80.19358825683594,-9.797160148620605,34.247459411621094,0,10.280043601989746,87.1405258178711,0.8565954566001892,0,0.8434666395187378,-0.10610441118478775,0.6714277267456055,1],[7,34.318382263183594,0.8313809037208557,80.75544738769531,0,80.75962829589844,-0.22517983615398407,-34.317848205566406,0,-0.11791250109672546,87.7447509765625,-0.8532273173332214,0,0.5862204432487488,-0.005858692806214094,-0.6721684336662292,1],[7,34.318382263183594,-80.75476837158203,0.8956841230392456,0,80.75962829589844,34.31765365600586,-0.25250619649887085,0,-0.11791250109672546,0.9230960011482239,87.74404907226562,0,0.38664767146110535,0.6721636056900024,-0.0063939220272004604,1],[7,-33.76499557495117,-5.791998386383057,80.7852783203125,0,79.96836853027344,11.491525650024414,34.24745178222656,0,-12.840116500854492,86.80025482177734,0.8565958738327026,0,0.5877475142478943,0.04913555085659027,0.6714276671409607,1],[7,-33.76499557495117,80.7806396484375,5.856326103210449,0,79.96836853027344,34.256595611572266,-11.464248657226562,0,-12.840116500854492,0.9257150888442993,-86.7995376586914,0,0.3881746232509613,0.671466588973999,-0.04860087111592293,1],[7,-26.09381103515625,47.70235824584961,-68.8729248046875,0,72.14217376708984,-23.88349151611328,-43.87446212768555,0,-42.596981048583984,-69.67027282714844,-32.11593246459961,0,0.23747046291828156,0.08072908967733383,-0.6914553046226501,1]],8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]]],0,0,[],[],[]],[[[18,".bin",2184526039,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":648,"length":48,"count":24,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":648,"count":9,"stride":72},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.009095229208469391,-0.00829001609236002,-0.0038153051864355803],"maxPosition",8,[1,-0.002438712865114212,-0.0038237078115344048,0.0021244001109153032]]],-1],0,0,[],[],[]],[[[18,".bin",2718085466,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":2016,"length":264,"count":132,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":2016,"count":28,"stride":72},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false}]}]},"minPosition",8,[1,0.004531483631581068,-0.006827499717473984,-0.009057947434484959],"maxPosition",8,[1,0.00610683299601078,-0.003189224749803543,0.0015691547887399793]]],-1],0,0,[],[],[]],[[[48,"Skin-2",1928083474,["RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 L Clavicle/Bip001 L UpperArm/Bip001 L Forearm/Bip001 L Hand/sword01"],[[[7,-0.000007191588792920811,-0.00005849258377566002,-87.7490005493164,0,24.115726470947266,-84.3700942993164,0.0000542638408660423,0,-84.37010192871094,-24.115724563598633,0.000022989974240772426,0,-0.00041664036689326167,-0.5413689017295837,0.47052377462387085,1]],8]]],0,0,[],[],[]],[[[48,"Skin-3",3487038830,["RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/shield01"],[[[7,-26.09381103515625,47.70235824584961,-68.8729248046875,0,72.14216613769531,-23.883501052856445,-43.87446594238281,0,-42.59699249267578,-69.6702651977539,-32.11592483520508,0,0.24138452112674713,0.08198083937168121,-0.6857008934020996,1]],8]]],0,0,[],[],[]],[[[18,".bin",428950450,[{"primitives":[{"primitiveMode":7,"vertexBundelIndices":[0],"indexView":{"offset":6480,"length":480,"count":240,"stride":2}}],"vertexBundles":[{"view":{"offset":0,"length":6480,"count":90,"stride":72},"attributes":[{"name":"a_position","format":32,"isNormalized":false},{"name":"a_normal","format":32,"isNormalized":false},{"name":"a_texCoord","format":21,"isNormalized":false},{"name":"a_tangent","format":44,"isNormalized":false},{"name":"a_joints","format":42,"isNormalized":false},{"name":"a_weights","format":44,"isNormalized":false}]}]},"minPosition",8,[1,-0.009095229208469391,-0.00861329771578312,-0.0038153051864355803],"maxPosition",8,[1,-0.0022758706472814083,-0.0038237078115344048,0.002340445527806878]]],-1],0,0,[],[],[]],[[[48,"Skin-1",1546018204,["RootNode/Bip001/Bip001 Pelvis/Bip001 Spine/Bip001 Spine1/Bip001 Neck/Bip001 R Clavicle/Bip001 R UpperArm/Bip001 R Forearm/Bip001 R Hand/shield01"],[[[7,-26.09381103515625,47.70235824584961,-68.8729248046875,0,72.14216613769531,-23.883501052856445,-43.87446594238281,0,-42.59699249267578,-69.6702651977539,-32.11592483520508,0,0.23747046291828156,0.08072908967733383,-0.6914553046226501,1]],8]]],0,0,[],[],[]],[[{"name":"default_radio_button_off","rect":{"x":3,"y":3,"width":26,"height":26},"offset":{"x":0,"y":0},"originalSize":{"width":32,"height":32},"rotated":false,"capInsets":[13,13,13,13],"vertices":{"rawPosition":[-13,-13,0,13,-13,0,-13,13,0,13,13,0],"indexes":[0,1,2,2,1,3],"uv":[3,29,29,29,3,3,29,3],"nuv":[0.09375,0.09375,0.90625,0.09375,0.09375,0.90625,0.90625,0.90625],"minPos":{"x":-13,"y":-13,"z":0},"maxPos":{"x":13,"y":13,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[61]],[[[49,"Item"],[86,"Item",33554432,[-10,-11,-12,-13,-14],[[46,-2,[2,"9e8hEPMOBHZZQS4qWt6EuF"],[5,500,400],[0,0.5,1]],[110,-8,[2,"ba07wVRbtNOYxfe6u3N+f6"],-7,-6,-5,-4,-3],[113,-9,[2,"67/913JQBC47FHx3PHDYk+"]]],[0,"05cqZo8fxFQJfAkL2Aq/5W",-1,0],[1,0,96,0]],[45,"BCTYPE",33554432,1,[[[95,-15,[2,"97/BbSATJDJqAqmzRzZtOP"],[5,0,25.2]],-16],4,1],[0,"eek3vSAAJIDrxLcriz1vuD",1,0],[1,-198,-10.15,0]],[45,"Num",33554432,1,[[[46,-17,[2,"89xxjR88pEc47bMjFkdSAZ"],[5,0,25.2],[0,0,1]],-18],4,1],[0,"660pMwkB1CELAljCVX6s7S",1,0],[1,-126,-10.15,0]],[45,"type",33554432,1,[[[46,-19,[2,"eaQ04MSgtFarzLo0MmG4Pu"],[5,0,25.2],[0,0,1]],-20],4,1],[0,"02PdNYqgNCVZhWK/fpU/1o",1,0],[1,-60,-10.15,0]],[45,"Price",33554432,1,[[[46,-21,[2,"c9b8A+xNpMzJV8JqTJCZ+6"],[5,0,25.2],[0,0,1]],-22],4,1],[0,"0duweJ0CxJG7d55yXKTKpy",1,0],[1,46,-10.15,0]],[45,"time",33554432,1,[[[46,-23,[2,"43kuhVYcRDEKbnN85EKTvb"],[5,0,25.2],[0,0,1]],-24],4,1],[0,"2dwM5DlLpJOpz95sy49e+v",1,0],[1,154,-10.15,0]],[47,"",0,0,16,16,20,2,[2,"bdoKrCqYVLPIsS9zBDe30X"],[4,4278190080]],[47,"",0,0,16,16,20,3,[2,"51vC8Y18xK3JmH29AsetmM"],[4,4278190080]],[47,"",0,0,16,16,20,4,[2,"c4axIww4dBgY7OZXOS1pg/"],[4,4278190080]],[47,"",0,0,16,16,20,5,[2,"a6DEnvMfRPFa//DW3XT3ke"],[4,4278190080]],[47,"",0,0,16,16,20,6,[2,"469yaWGv5CgqoNde1Rp/NJ"],[4,4278190080]]],0,[0,13,1,0,0,1,0,30,11,0,31,10,0,32,9,0,33,8,0,34,7,0,0,1,0,0,1,0,-1,2,0,-2,3,0,-3,4,0,-4,5,0,-5,6,0,0,2,0,-2,7,0,0,3,0,-2,8,0,0,4,0,-2,9,0,0,5,0,-2,10,0,0,6,0,-2,11,0,20,1,24],[],[],[]],[[{"name":"default_scrollbar_vertical_bg","rect":{"x":0,"y":0,"width":15,"height":30},"offset":{"x":0,"y":0},"originalSize":{"width":15,"height":30},"rotated":false,"capInsets":[4,10,4,10],"vertices":{"rawPosition":[-7.5,-15,0,7.5,-15,0,-7.5,15,0,7.5,15,0],"indexes":[0,1,2,2,1,3],"uv":[0,30,15,30,0,0,15,0],"nuv":[0,0,1,0,0,1,1,1],"minPos":{"x":-7.5,"y":-15,"z":0},"maxPos":{"x":7.5,"y":15,"z":0}},"packable":true,"pixelsToUnit":100,"pivot":{"x":0.5,"y":0.5},"meshType":0}],[2],0,[0],[12],[62]]]]