Unity3D使用Shader实现腐蚀消失

 更新时间:2019年02月28日 11:07:37   作者:星空不语  
这篇文章主要为大家详细介绍了Unity3D使用Shader实现腐蚀消失,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本片shader实现的效果是模型腐蚀消失,且腐蚀的边缘大小可以调、颜色可调。效果图如下:

设置面板如下:

使用时需要给ClipMask参数给一张噪点图,设置合适的cliplinesize和cliplinecolor,然后调整clipalpha就可以了。

原理是通过获取噪点图上对应的颜色,转换成灰度,然后用灰度与clipalpha对比,如果大于则被剪裁掉。

shader实现如下:

Shader "XM/CorrosionEffect" {
 Properties {
 _Color ("Color", Color) = (1,1,1,1)
 _MainTex ("Albedo (RGB)", 2D) = "white" {}
 _Glossiness ("Smoothness", Range(0,1)) = 0.5
 _Metallic ("Metallic", Range(0,1)) = 0.0
 _ClipMaskTex ("Clip Mask", 2D) = "white" {}
 _ClipGray ("Clip Alpha", Range(0.0,1.0)) = 0.0
 _ClipLineSize ("Clip Line Size", Range(0,1)) = 0.0
 _ClipLineColor("Clip Line Color", Color) = (1,1,1,1)
 }
 SubShader {
 Tags { "RenderType"="Opaque" }
 LOD 200

 CGPROGRAM
 // Physically based Standard lighting model, and enable shadows on all light types
 #pragma surface surf Standard fullforwardshadows

 // Use shader model 3.0 target, to get nicer looking lighting
 #pragma target 3.0

 sampler2D _MainTex;
 sampler2D _ClipMaskTex;

 struct Input {
  float2 uv_MainTex;
 };

 half _Glossiness;
 half _Metallic;
 fixed4 _Color;
 fixed _ClipGray;
 fixed _ClipLineSize;
 fixed4 _ClipLineColor;

 void surf (Input IN, inout SurfaceOutputStandard o) {
  fixed4 m = tex2D (_ClipMaskTex, IN.uv_MainTex);
  fixed gray = Luminance(m.rgb);
  if(gray >= _ClipGray)
  {
  clip(-1);
  }

  fixed4 c;
  if(gray >= _ClipGray - _ClipLineSize)
  {
  c = _ClipLineColor;
  }
  else
  {
  // Albedo comes from a texture tinted by color
  c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
  }

  o.Albedo = c.rgb;

  // Metallic and smoothness come from slider variables
  o.Metallic = _Metallic;
  o.Smoothness = _Glossiness;
  o.Alpha = c.a;
 }
 ENDCG
 }
 FallBack "Diffuse"
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • C# 将Excel转为PDF时自定义表格纸张大小的代码思路

    C# 将Excel转为PDF时自定义表格纸张大小的代码思路

    这篇文章主要介绍了C# 将Excel转为PDF时自定义表格纸张大小的代码思路,转换前的页面大小设置为该版本中写入的新功能,在旧版本和免费版本中暂不支持,感兴趣的朋友跟随小编一起看看实例代码
    2021-11-11
  • C#中txt数据写入的几种常见方法

    C#中txt数据写入的几种常见方法

    这篇文章主要给大家介绍了关于C#中txt数据写入的几种常见方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • c# 实现的支付宝支付

    c# 实现的支付宝支付

    这篇文章主要介绍了c# 实现的支付宝支付的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • C#中foreach实现原理详解

    C#中foreach实现原理详解

    这篇文章主要为大家详细介绍了C#中foreach实现原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • C# 根据字符串生成二维码的实例代码

    C# 根据字符串生成二维码的实例代码

    这篇文章主要介绍了C# 根据字符串生成二维码的实例,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#函数式编程中的惰性求值详解

    C#函数式编程中的惰性求值详解

    这篇文章主要介绍了C#函数式编程中的惰性求值详解,本文讲解了惰性求值的相关知识并给出代码实例,需要的朋友可以参考下
    2015-01-01
  • C#实现windows form拷贝内容到剪贴板的方法

    C#实现windows form拷贝内容到剪贴板的方法

    这篇文章主要介绍了C#实现windows form拷贝内容到剪贴板的方法,涉及C#操作Clipboard的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 图文介绍c#封装方法

    图文介绍c#封装方法

    在本篇内容里小编给大家分享的是关于c#使用封装方法以及相关知识点,对此有需要的朋友们可以学习下。
    2018-12-12
  • C# 泛型集合类List<T>使用总结

    C# 泛型集合类List<T>使用总结

    本文主要主要介绍了C# 泛型集合类List<T>使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-05-05
  • C#.NET字符串比较中忽略符号的方法

    C#.NET字符串比较中忽略符号的方法

    C#.NET字符串比较中忽略符号的方法,需要的朋友可以参考一下
    2013-04-04

最新评论