ShaderTools = ShaderTools or {} ShaderTools.List = { ["Alpha_shader"] = false, ["Gray_level_shader"] = false, ["Unlit_Texture_Mask"] = false, -- ["mb_flowalphablendmask_mask"] = false, -- ["mb_uvrolladd_culloff_mask"] = false, -- ["mb_uvrollalphablend_culloff_mask"] = false, -- ["ParticleAdd_mask"] = false, -- ["ParticleBlend_mask"] = false, -- ["ParticleAlphaBlend_mask"] = false, -- ["mb_uvrolladd_mask"] = false, -- ["mb_flowalphablendmaskui"] = false, -- ["Unlit-Texture-NoFog"] = false, -- ["Mask_ParticleAdd"] = false, -- ["Mask_ParticleAlphaBlend"] = false, -- ["mb_flowadd_add_mask"] = false, -- ["mb_alphablend_front_mask"] = false, -- ["MobileParticleAddNoFog"] = false, -- ["MobileParticleAlphaNoFog"] = false, -- ["ParticleAlphaBlendNoFog"] = false, -- ["Particle Add_NoFog"] = false, -- 摄像机特效 ["ScreenEffect"] = false, ["BlurEffect"] = false, ["DualBlur"] = false, ["GrayImageShad"] = false, ["RadiusBlur"] = false, } ShaderTools.ReplaceData = { ["Mobile/Diffuse"] = {"Lightmap_Diffuse", 1900}, ["Legacy Shaders/Transparent/Cutout/Diffuse"] = {"Lightmap_Cutout", 2450}, ["Legacy Shaders/Transparent/Diffuse"] = {"Lightmap_Transparent", 2950}, ["T4MShaders/ShaderModel2/Diffuse/T4M 4 Textures"] = {"CustomTerrain", 2500}, } ShaderTools.SceneMaterial = {} ShaderTools.TMPSharedMaterialType = { --HKYTW7字体 HKYTW7FFDefault = "HKYTW7SDFDefault", --无字体特效 HKYTW7OutlineBlueTab = "HKYTW7SDFOutlineBlueTab", --蓝色标签 HKYTW7OutlineDarkBlueBtn = "HKYTW7SDFOutlineDarkBlueBtn", --蓝色按钮 HKYTW7OutlineBrightBlueTitle = "HKYTW7SDFOutlineBrightBlueTitle", --蓝色标题 HKYTW7OutlineOrangeTab = "HKYTW7SDFOutlineOrangeTab", --橙色标签 HKYTW7OutlineDarkOrangeBtn = "HKYTW7SDFOutlineDarkOrangeBtn", --橙色按钮 HKYTW7OutlineDarkGrayBtn = "HKYTW7SDFOutlineDarkGrayBtn", --灰化按钮 HKYTW7OutlineGreenTab = "HKYTW7SDFOutlineGreenTab", --通用绿色描边 HKYTW7OutlinePurple = "HKYTW7SDFOutlinePurple", --紫色描边 HKYTW7OutlineGreenUp = "HKYTW7SDFOutlineGreenUpNumText", --绿色提升数字描边 HKYTW7OutlineRedDown = "HKYTW7SDFOutlineRedDownNumText", --红色降低数字描边 --FZZZ字体 FZZZDefault = "FZZZSDFDefault", --无字体特效 FZZZOutlineBlueTab = "FZZZSDFOutlineBlueTab", --页签标题特效 FZZZOutlineDarkOrangeBtn = "FZZZSDFOutlineDarkOrangeBtn", --橙色按钮 FZZZOutlineDarkBlueBtn = "FZZZSDFOutlineDarkBlueBtn", --蓝色按钮 FZZZOutlineDarkGrayBtn = "FZZZSDFOutlineDarkGrayBtn", --灰化按钮 FZZZOutlineDarkBrownNumber = "FZZZSDFOutlineDarkBrown_Number", --褐色描边 FZZZOutlineDarkPinkNumber = "FZZZSDFOutlineDarkPink_Number", --粉色描边 FZZZOutlineShadowBrownBlack = "FZZZSDFShadowBrownBlack", --黑色描边 FZZZOutlineDarkActBrownBtn = "FZZZSDFOutlineDarkActBrownBtn", --活动按钮材质(充点小钱) FZZZOutlineDarkPurpleTitle = "FZZZSDFOutlineDarkPurpleTitle", --紫色描边 FZZZOutlineDeepPurpleTitle = "FZZZSDFOutlineDeepPurpleTitle", --深紫色描边 FZZZOutlineDarkOrangeTitle = "FZZZSDFOutlineDarkOrangeTitle", --橙色描边 FZZZOutlineDarkBlueTitle = "FZZZSDFOutlineDarkBlue_noData", --蓝色描边 FZZZOutlineDarkYellowNumber = "FZZZSDFOutlineDarkYellow_Number",--黄色描边 FZZZSDFColorSpacielTipRed = "FZZZSDFColorSpacielTipRed", --红色描边 } function ShaderTools.Load() --预加载字体材质 for key, mat_name in pairs(ShaderTools.TMPSharedMaterialType) do local call_back = function(objs) if objs and objs[0] then ShaderTools.TMPSharedMaterialType[mat_name] = objs[0] end end if string.find(mat_name, "HKYTW7SDF") then resMgr:LoadMaterial("hkytw7sdf_asset", mat_name, call_back, ASSETS_LEVEL.HIGHT) elseif string.find(mat_name, "FZZZSDF") then resMgr:LoadMaterial("fzzzsdf_asset", mat_name, call_back, ASSETS_LEVEL.HIGHT) else print('can not find tmp shared material', mat_name) end end for index,name in pairs(XRayShaderMode) do ShaderTools.List[name] = false end for shader_name,value in pairs(ShaderTools.List) do local call_back = function(objs) if objs and objs[0] then ShaderTools.List[shader_name] = objs[0] end end resMgr:LoadShader("scene_shader",{shader_name}, call_back, ASSETS_LEVEL.HIGHT) end for shader_name, data in pairs(ShaderTools.ReplaceData) do local call_back = function(objs) if objs and objs[0] then data[3] = objs[0] end end local newShaderName = data[1] resMgr:LoadShader("scene_shader",{newShaderName}, call_back, ASSETS_LEVEL.HIGHT) end local function LoadMaterialCallBack(objs) if objs and objs[0] then ShaderTools.function_hitfresnel_prefab = objs[0] end end resMgr:LoadMaterial("scene_material", "hit_outline" , LoadMaterialCallBack, ASSETS_LEVEL.HIGHT) local function LoadTileMatCallBack(objs) if objs and objs[0] then ShaderTools.tile_mat = Material.New(objs[0]) end end resMgr:LoadMaterial("scene_material", "tile_mat" , LoadTileMatCallBack, ASSETS_LEVEL.HIGHT) local function LoadShadow2CallBack(objs) if objs and objs[0] then ShaderTools.shadow2 = objs[0] end end resMgr:LoadMaterial("scene_material", "shadow2" , LoadShadow2CallBack, ASSETS_LEVEL.HIGHT) local function LoadAlphaEffectCallBack(objs) if objs and objs[0] then ShaderTools.alphaeffect = objs[0] end end resMgr:LoadMaterial("scene_material", "alphamodel" , LoadAlphaEffectCallBack, ASSETS_LEVEL.HIGHT) local function LoadDissolveTransferCallBack(objs) if objs and objs[0] then ShaderTools.dissolve_transfer_material = Material.New(objs[0]) end end resMgr:LoadMaterial("scene_material", "dissolve_transfer" , LoadDissolveTransferCallBack, ASSETS_LEVEL.HIGHT) local function LoadDissolveEffectCallBack(objs) if objs and objs[0] then ShaderTools.dissolve_mat = Material.New(objs[0]) end end resMgr:LoadMaterial("scene_material", "DissolveEffect_Mat" , LoadDissolveEffectCallBack, ASSETS_LEVEL.HIGHT) local function LoadDissolveEffect2CallBack(objs) if objs and objs[0] then ShaderTools.dissolve_mat2 = Material.New(objs[0]) end end resMgr:LoadMaterial("scene_material", "DissolveEffect_Mat2" , LoadDissolveEffect2CallBack, ASSETS_LEVEL.HIGHT) ShaderTools.gray_mat = Resources.Load("material/Gray") end function ShaderTools.ClearMaterialData() ShaderTools.SceneMaterial = {} ShaderTools.SceneInstancedMaterial = {} end function ShaderTools.ChangeMaterial(mat) if ShaderTools.SceneMaterial[mat] == true then return end local shaderData = mat.shader local data = ShaderTools.ReplaceData[shaderData.name] if data == nil then return end ShaderTools.SceneMaterial[mat] = true --local renderQueue = mat.renderQueue local newShader = data[3] mat.shader = newShader mat.renderQueue = data[2] end function ShaderTools.GetHitfresnelMaterial() if ShaderTools.function_hitfresnel_prefab then return Material.New(ShaderTools.function_hitfresnel_prefab) end end function ShaderTools.GetOutLine2DMaterial() if ShaderTools.shader_outline2d then return Material.New(ShaderTools.shader_outline2d) end end function ShaderTools.GetOutLine3DMaterial() if ShaderTools.shader_outline3d then return Material.New(ShaderTools.shader_outline3d) end end function ShaderTools.GetShader( shader_name ) return ShaderTools.List[shader_name] end function ShaderTools.GetScreenEffectMaterial() local screen_effect = ShaderTools.GetShader("ScreenEffect") if screen_effect then return Material.New(screen_effect) end end function ShaderTools.GetBlurEffectMaterial() local screen_effect = ShaderTools.GetShader("BlurEffect") if screen_effect then return Material.New(screen_effect) end end function ShaderTools.GetDualBlurMaterial( ) local screen_effect = ShaderTools.GetShader("DualBlur") if screen_effect then return Material.New(screen_effect) end end function ShaderTools.GetGhostModeShader( ) local ghost_shader = ShaderTools.GetShader("GhostModeShader") if ghost_shader then return ghost_shader end end function ShaderTools.GetImageGrayShader( ) local image_gray_effect = ShaderTools.GetShader("GrayImageShad") if image_gray_effect then return Material.New(image_gray_effect) end end function ShaderTools.GetDissolveMaterial( ) if ShaderTools.dissolve_transfer_material then return ShaderTools.dissolve_transfer_material end end function ShaderTools.GetTMPSharedMaterial( mat_type ) if ShaderTools.TMPSharedMaterialType[mat_type] then return ShaderTools.TMPSharedMaterialType[mat_type] end end function ShaderTools.GetRadiusMaterial( ) local radiusBlur_effect = ShaderTools.GetShader("RadiusBlur") if radiusBlur_effect then return Material.New(radiusBlur_effect) end end