源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

265 行
8.5 KiB

  1. ShaderTools = ShaderTools or {}
  2. ShaderTools.List = {
  3. ["Alpha_shader"] = false,
  4. ["Gray_level_shader"] = false,
  5. ["Unlit_Texture_Mask"] = false,
  6. -- ["mb_flowalphablendmask_mask"] = false,
  7. -- ["mb_uvrolladd_culloff_mask"] = false,
  8. -- ["mb_uvrollalphablend_culloff_mask"] = false,
  9. -- ["ParticleAdd_mask"] = false,
  10. -- ["ParticleBlend_mask"] = false,
  11. -- ["ParticleAlphaBlend_mask"] = false,
  12. -- ["mb_uvrolladd_mask"] = false,
  13. -- ["mb_flowalphablendmaskui"] = false,
  14. -- ["Unlit-Texture-NoFog"] = false,
  15. -- ["Mask_ParticleAdd"] = false,
  16. -- ["Mask_ParticleAlphaBlend"] = false,
  17. -- ["mb_flowadd_add_mask"] = false,
  18. -- ["mb_alphablend_front_mask"] = false,
  19. -- ["MobileParticleAddNoFog"] = false,
  20. -- ["MobileParticleAlphaNoFog"] = false,
  21. -- ["ParticleAlphaBlendNoFog"] = false,
  22. -- ["Particle Add_NoFog"] = false,
  23. -- 摄像机特效
  24. ["ScreenEffect"] = false,
  25. ["BlurEffect"] = false,
  26. ["DualBlur"] = false,
  27. ["GrayImageShad"] = false,
  28. ["RadiusBlur"] = false,
  29. }
  30. ShaderTools.ReplaceData = {
  31. ["Mobile/Diffuse"] = {"Lightmap_Diffuse", 1900},
  32. ["Legacy Shaders/Transparent/Cutout/Diffuse"] = {"Lightmap_Cutout", 2450},
  33. ["Legacy Shaders/Transparent/Diffuse"] = {"Lightmap_Transparent", 2950},
  34. ["T4MShaders/ShaderModel2/Diffuse/T4M 4 Textures"] = {"CustomTerrain", 2500},
  35. }
  36. ShaderTools.SceneMaterial = {}
  37. ShaderTools.TMPSharedMaterialType = {
  38. --HKYTW7字体
  39. HKYTW7FFDefault = "HKYTW7SDFDefault", --无字体特效
  40. HKYTW7OutlineBlueTab = "HKYTW7SDFOutlineBlueTab", --蓝色标签
  41. HKYTW7OutlineDarkBlueBtn = "HKYTW7SDFOutlineDarkBlueBtn", --蓝色按钮
  42. HKYTW7OutlineBrightBlueTitle = "HKYTW7SDFOutlineBrightBlueTitle", --蓝色标题
  43. HKYTW7OutlineOrangeTab = "HKYTW7SDFOutlineOrangeTab", --橙色标签
  44. HKYTW7OutlineDarkOrangeBtn = "HKYTW7SDFOutlineDarkOrangeBtn", --橙色按钮
  45. HKYTW7OutlineDarkGrayBtn = "HKYTW7SDFOutlineDarkGrayBtn", --灰化按钮
  46. HKYTW7OutlineGreenTab = "HKYTW7SDFOutlineGreenTab", --通用绿色描边
  47. HKYTW7OutlinePurple = "HKYTW7SDFOutlinePurple", --紫色描边
  48. HKYTW7OutlineGreenUp = "HKYTW7SDFOutlineGreenUpNumText", --绿色提升数字描边
  49. HKYTW7OutlineRedDown = "HKYTW7SDFOutlineRedDownNumText", --红色降低数字描边
  50. --FZZZ字体
  51. FZZZDefault = "FZZZSDFDefault", --无字体特效
  52. FZZZOutlineBlueTab = "FZZZSDFOutlineBlueTab", --页签标题特效
  53. FZZZOutlineDarkOrangeBtn = "FZZZSDFOutlineDarkOrangeBtn", --橙色按钮
  54. FZZZOutlineDarkBlueBtn = "FZZZSDFOutlineDarkBlueBtn", --蓝色按钮
  55. FZZZOutlineDarkGrayBtn = "FZZZSDFOutlineDarkGrayBtn", --灰化按钮
  56. FZZZOutlineDarkBrownNumber = "FZZZSDFOutlineDarkBrown_Number", --褐色描边
  57. FZZZOutlineDarkPinkNumber = "FZZZSDFOutlineDarkPink_Number", --粉色描边
  58. FZZZOutlineShadowBrownBlack = "FZZZSDFShadowBrownBlack", --黑色描边
  59. FZZZOutlineDarkActBrownBtn = "FZZZSDFOutlineDarkActBrownBtn", --活动按钮材质(充点小钱)
  60. FZZZOutlineDarkPurpleTitle = "FZZZSDFOutlineDarkPurpleTitle", --紫色描边
  61. FZZZOutlineDeepPurpleTitle = "FZZZSDFOutlineDeepPurpleTitle", --深紫色描边
  62. FZZZOutlineDarkOrangeTitle = "FZZZSDFOutlineDarkOrangeTitle", --橙色描边
  63. FZZZOutlineDarkBlueTitle = "FZZZSDFOutlineDarkBlue_noData", --蓝色描边
  64. FZZZOutlineDarkYellowNumber = "FZZZSDFOutlineDarkYellow_Number",--黄色描边
  65. FZZZSDFColorSpacielTipRed = "FZZZSDFColorSpacielTipRed", --红色描边
  66. }
  67. function ShaderTools.Load()
  68. --预加载字体材质
  69. for key, mat_name in pairs(ShaderTools.TMPSharedMaterialType) do
  70. local call_back = function(objs)
  71. if objs and objs[0] then
  72. ShaderTools.TMPSharedMaterialType[mat_name] = objs[0]
  73. end
  74. end
  75. if string.find(mat_name, "HKYTW7SDF") then
  76. resMgr:LoadMaterial("hkytw7sdf_asset", mat_name, call_back, ASSETS_LEVEL.HIGHT)
  77. elseif string.find(mat_name, "FZZZSDF") then
  78. resMgr:LoadMaterial("fzzzsdf_asset", mat_name, call_back, ASSETS_LEVEL.HIGHT)
  79. else
  80. print('can not find tmp shared material', mat_name)
  81. end
  82. end
  83. for index,name in pairs(XRayShaderMode) do
  84. ShaderTools.List[name] = false
  85. end
  86. for shader_name,value in pairs(ShaderTools.List) do
  87. local call_back = function(objs)
  88. if objs and objs[0] then
  89. ShaderTools.List[shader_name] = objs[0]
  90. end
  91. end
  92. resMgr:LoadShader("scene_shader",{shader_name}, call_back, ASSETS_LEVEL.HIGHT)
  93. end
  94. for shader_name, data in pairs(ShaderTools.ReplaceData) do
  95. local call_back = function(objs)
  96. if objs and objs[0] then
  97. data[3] = objs[0]
  98. end
  99. end
  100. local newShaderName = data[1]
  101. resMgr:LoadShader("scene_shader",{newShaderName}, call_back, ASSETS_LEVEL.HIGHT)
  102. end
  103. local function LoadMaterialCallBack(objs)
  104. if objs and objs[0] then
  105. ShaderTools.function_hitfresnel_prefab = objs[0]
  106. end
  107. end
  108. resMgr:LoadMaterial("scene_material", "hit_outline" , LoadMaterialCallBack, ASSETS_LEVEL.HIGHT)
  109. local function LoadTileMatCallBack(objs)
  110. if objs and objs[0] then
  111. ShaderTools.tile_mat = Material.New(objs[0])
  112. end
  113. end
  114. resMgr:LoadMaterial("scene_material", "tile_mat" , LoadTileMatCallBack, ASSETS_LEVEL.HIGHT)
  115. local function LoadShadow2CallBack(objs)
  116. if objs and objs[0] then
  117. ShaderTools.shadow2 = objs[0]
  118. end
  119. end
  120. resMgr:LoadMaterial("scene_material", "shadow2" , LoadShadow2CallBack, ASSETS_LEVEL.HIGHT)
  121. local function LoadAlphaEffectCallBack(objs)
  122. if objs and objs[0] then
  123. ShaderTools.alphaeffect = objs[0]
  124. end
  125. end
  126. resMgr:LoadMaterial("scene_material", "alphamodel" , LoadAlphaEffectCallBack, ASSETS_LEVEL.HIGHT)
  127. local function LoadDissolveTransferCallBack(objs)
  128. if objs and objs[0] then
  129. ShaderTools.dissolve_transfer_material = Material.New(objs[0])
  130. end
  131. end
  132. resMgr:LoadMaterial("scene_material", "dissolve_transfer" , LoadDissolveTransferCallBack, ASSETS_LEVEL.HIGHT)
  133. local function LoadDissolveEffectCallBack(objs)
  134. if objs and objs[0] then
  135. ShaderTools.dissolve_mat = Material.New(objs[0])
  136. end
  137. end
  138. resMgr:LoadMaterial("scene_material", "DissolveEffect_Mat" , LoadDissolveEffectCallBack, ASSETS_LEVEL.HIGHT)
  139. local function LoadDissolveEffect2CallBack(objs)
  140. if objs and objs[0] then
  141. ShaderTools.dissolve_mat2 = Material.New(objs[0])
  142. end
  143. end
  144. resMgr:LoadMaterial("scene_material", "DissolveEffect_Mat2" , LoadDissolveEffect2CallBack, ASSETS_LEVEL.HIGHT)
  145. ShaderTools.gray_mat = Resources.Load("material/Gray")
  146. end
  147. function ShaderTools.ClearMaterialData()
  148. ShaderTools.SceneMaterial = {}
  149. ShaderTools.SceneInstancedMaterial = {}
  150. end
  151. function ShaderTools.ChangeMaterial(mat)
  152. if ShaderTools.SceneMaterial[mat] == true then
  153. return
  154. end
  155. local shaderData = mat.shader
  156. local data = ShaderTools.ReplaceData[shaderData.name]
  157. if data == nil then
  158. return
  159. end
  160. ShaderTools.SceneMaterial[mat] = true
  161. --local renderQueue = mat.renderQueue
  162. local newShader = data[3]
  163. mat.shader = newShader
  164. mat.renderQueue = data[2]
  165. end
  166. function ShaderTools.GetHitfresnelMaterial()
  167. if ShaderTools.function_hitfresnel_prefab then
  168. return Material.New(ShaderTools.function_hitfresnel_prefab)
  169. end
  170. end
  171. function ShaderTools.GetOutLine2DMaterial()
  172. if ShaderTools.shader_outline2d then
  173. return Material.New(ShaderTools.shader_outline2d)
  174. end
  175. end
  176. function ShaderTools.GetOutLine3DMaterial()
  177. if ShaderTools.shader_outline3d then
  178. return Material.New(ShaderTools.shader_outline3d)
  179. end
  180. end
  181. function ShaderTools.GetShader( shader_name )
  182. return ShaderTools.List[shader_name]
  183. end
  184. function ShaderTools.GetScreenEffectMaterial()
  185. local screen_effect = ShaderTools.GetShader("ScreenEffect")
  186. if screen_effect then
  187. return Material.New(screen_effect)
  188. end
  189. end
  190. function ShaderTools.GetBlurEffectMaterial()
  191. local screen_effect = ShaderTools.GetShader("BlurEffect")
  192. if screen_effect then
  193. return Material.New(screen_effect)
  194. end
  195. end
  196. function ShaderTools.GetDualBlurMaterial( )
  197. local screen_effect = ShaderTools.GetShader("DualBlur")
  198. if screen_effect then
  199. return Material.New(screen_effect)
  200. end
  201. end
  202. function ShaderTools.GetGhostModeShader( )
  203. local ghost_shader = ShaderTools.GetShader("GhostModeShader")
  204. if ghost_shader then
  205. return ghost_shader
  206. end
  207. end
  208. function ShaderTools.GetImageGrayShader( )
  209. local image_gray_effect = ShaderTools.GetShader("GrayImageShad")
  210. if image_gray_effect then
  211. return Material.New(image_gray_effect)
  212. end
  213. end
  214. function ShaderTools.GetDissolveMaterial( )
  215. if ShaderTools.dissolve_transfer_material then
  216. return ShaderTools.dissolve_transfer_material
  217. end
  218. end
  219. function ShaderTools.GetTMPSharedMaterial( mat_type )
  220. if ShaderTools.TMPSharedMaterialType[mat_type] then
  221. return ShaderTools.TMPSharedMaterialType[mat_type]
  222. end
  223. end
  224. function ShaderTools.GetRadiusMaterial( )
  225. local radiusBlur_effect = ShaderTools.GetShader("RadiusBlur")
  226. if radiusBlur_effect then
  227. return Material.New(radiusBlur_effect)
  228. end
  229. end