shader实例溶解,燃烧效果

游戏中物体腐化消失,燃烧消失时,会有从局部慢慢消失的效果,然后配合一些粒子特效,就能达到非常好的美术效果。

类似效果如下:

shader实例(三十)溶解,燃烧效果

注:

_DissColor为溶解主色,_AddColor为叠加色,按照溶解的移动方向来看开始色为DissColor+AddColor

上图中DissColor为红色,AddColor为绿色

所以燃烧时

开始色为DissColor + AddColor = 黄色

默认色为DissColor 红色

然后配上火的粒子特效,这样就能模拟比较真实的燃烧效果。

我们也可以设置其他的颜色,比如被各种魔法,化学物品击中.....算了,不敢想象了,好残忍shader实例(三十)溶解,燃烧效果shader实例(三十)溶解,燃烧效果

 

代码和原理如下:

  1. Shader "Dissolve/Dissolve_TexturCoords"  
  2.     Properties  
  3.         _Color ("主颜色"Color) (1,1,1,1                      // 主色  
  4.         _MainTex ("模型贴图"2D) "white" {}                      // 主材质  
  5.         _DissolveText ("溶解贴图"2D) "white" {}                 // 溶解贴图  
  6.         _Tile("溶解贴图的平铺大小"Range (01)) 1                // 平铺值,设置溶解贴图大小  
  7.   
  8.         _Amount ("溶解值"Range (01)) 0.5                     // 溶解度  
  9.         _DissSize("溶解大小"Range (01)) 0.1                   // 溶解范围大小  
  10.   
  11.         _DissColor ("溶解主色"Color) (1,1,1,1                 // 溶解颜色  
  12.         _AddColor ("叠加色,与主色叠加为开始色[R|G|B>0表示启用]"Color) (1,1,1,1// 改色与溶解色融合形成开始色  
  13.      
  14.     SubShader   
  15.         Tags "RenderType"="Opaque"  
  16.         LOD 200  
  17.         Cull off  
  18.       
  19.         CGPROGRAM  
  20.         #pragma target 3.0  
  21.         #pragma surface surf BlinnPhong  
  22.   
  23.         sampler2D _MainTex;  
  24.         sampler2D _DissolveText;  
  25.         fixed4 _Color;          // 主色  
  26.         half _Tile;             // 平铺值  
  27.         half _Amount;           // 溶解度  
  28.         half _DissSize;         // 溶解范围  
  29.         half4 _DissColor;       // 溶解颜色  
  30.         half4 _AddColor;        // 叠加色  
  31.         // 最终色  
  32.         static half3 finalColor float3(1,1,1);  
  33.   
  34.         struct Input  
  35.             float2 uv_MainTex;  // 只需要主材质的UV信息  
  36.         };  
  37.   
  38.         void surf (Input IN, inout SurfaceOutput o)  
  39.             // 对主材质进行采样  
  40.             fixed4 tex tex2D(_MainTex, IN.uv_MainTex);  
  41.             // 设置主材质和颜色  
  42.             o.Albedo tex.rgb _Color.rgb;  
  43.             // 对裁剪材质进行采样,取R色值  
  44.             float ClipTex tex2D (_DissolveText, IN.uv_MainTex/_Tile).r;  
  45.   
  46.             // 裁剪量 裁剪材质R 外部设置量  
  47.             float ClipAmount ClipTex _Amount;  
  48.             if(_Amount 0 
  49.              
  50.                 // 如果裁剪材质的R色值 设置的裁剪值  那么此点将被裁剪  
  51.                 if(ClipAmount 0 
  52.                  
  53.                     clip(-0.1);  
  54.                  
  55.                 // 然后处理没有被裁剪的值  
  56.                 else  
  57.                  
  58.                     // 针对没有被裁剪的点,【裁剪量】小于【裁剪大小】的做处理  
  59.                     // 如果设置了叠加色,那么该色为ClipAmount/_DissSize(这样会形成渐变效果)  
  60.                     if(ClipAmount _DissSize)  
  61.                      
  62.                         if(_AddColor.x == 0 
  63.                             finalColor.x _DissColor.x;  
  64.                         else  
  65.                             finalColor.x ClipAmount/_DissSize;  
  66.   
  67.                         if (_AddColor.y == 0 
  68.                             finalColor.y _DissColor.y;  
  69.                         else  
  70.                             finalColor.y ClipAmount/_DissSize;  
  71.             
  72.                         if (_AddColor.z == 0 
  73.                             finalColor.z _DissColor.z;  
  74.                         else  
  75.                             finalColor.z ClipAmount/_DissSize;  
  76.                         // 融合  
  77.                         o.Albedo  o.Albedo finalColor 2 
  78.                      
  79.                  
  80.              
  81.             o.Alpha tex.a _Color.a;  
  82.          
  83.         ENDCG  
  84.     }//endsubshader  
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值