|
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
|