当前位置:   article > 正文

Unity Shader 燃烧消融效果(surface表面着色器)_shader 折叠效果

shader 折叠效果

有些时候需要让角色死亡时逐渐燃烧消失,用表面着色器很容易实现。

可以用一张黑白图片控制各部位的消融顺序,比如让该图片的某通道和一个变量相比,小于该变量则舍弃片元。变量从0不断变大,则消融面积逐渐扩大。

 

燃烧部分的颜色则读取自一张渐变贴图,类似于渐变纹理。可以取代纹理颜色或进行差值,也可以直接当做自发光(Emission)。

 代码:

  1. Shader "Test"
  2. {
  3. Properties
  4. {
  5. _MainTex ("Albedo (RGB)", 2D) = "white" {} //纹理贴图
  6. _DisolveTex("DisolveTex",2D) = "white"{}//噪声图,影响哪些位置被消融
  7. _Threshold("Threshold",Range(0,1)) = 0 //控制消融程度
  8. _EdgeLength("EdgeLength", Range(0,0.2)) = 0.1 //过渡部分多少大
  9. _BurnTex("BurnTex", 2D) = "white"{} //渐变图,过渡部分用
  10. _BurnInstensity("BurnInstensity", Range(0,5)) = 1 //过渡部分的强度
  11. }
  12. SubShader
  13. {
  14. Tags { "RenderType"="Opaque" }
  15. CGPROGRAM
  16. #pragma surface surf Standard fullforwardshadows
  17. #pragma target 3.0
  18. sampler2D _MainTex;
  19. sampler2D _DisolveTex;
  20. half _Threshold;
  21. sampler2D _BurnTex;
  22. half _EdgeLength;
  23. half _BurnInstensity;
  24. struct Input
  25. {
  26. float2 uv_MainTex;
  27. float2 uv_DisolveTex;
  28. };
  29. UNITY_INSTANCING_BUFFER_START(Props)
  30. UNITY_INSTANCING_BUFFER_END(Props)
  31. void surf (Input IN, inout SurfaceOutputStandard o)
  32. {
  33. //读取纹理贴图
  34. fixed4 c = tex2D (_MainTex, IN.uv_MainTex) ;
  35. o.Albedo = c.rgb;
  36. //消融
  37. float cutout = tex2D(_DisolveTex, IN.uv_DisolveTex).r;
  38. //值小于0时舍弃该片元。
  39. clip(cutout - _Threshold);
  40. //temp越接近0的位置越接近消融边界。
  41. float temp = saturate((cutout - _Threshold) / _EdgeLength);
  42. //用temp当uv坐标读取渐变纹理。temp越接近0读取位置越靠近左下,temp越接近1读取位置越靠近右上。
  43. fixed4 edgeColor = tex2D(_BurnTex,float2(temp,temp));
  44. //将过渡的燃烧颜色作为自发光。temp=1时该片元完全不显示过渡颜色,当小于1时显示过渡颜色。
  45. fixed4 finalColor = _BurnInstensity * lerp(edgeColor, fixed4(0,0,0,0), temp);
  46. o.Emission = finalColor.rgb;
  47. o.Alpha = c.a;
  48. }
  49. ENDCG
  50. }
  51. FallBack "Diffuse"
  52. }

增大_Threshold值的效果:

 如果想要用c#代码控制消融,先获得材质

material = GetComponent<SkinnedMeshRenderer>().materials[0];

之后就可以修改material.SetFloat("_Threshold", 值);

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/107883
推荐阅读
相关标签
  

闽ICP备14008679号