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

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

相关推荐:

怎么在Unity3D中利用DoTween实现卡牌翻转效果

这篇文章将为大家详细讲解有关怎么在Unity3D中利用DoTween实现卡牌翻转效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。关于DoTweenDoTween是一款十分强大且好用的动画效果插件,有免费版和收费版,免费版就可以满足大部分需求了,在U...

ShaderLab学习小结(二)通过Shader变换物体形状

运行环境:Win10x64Unity5.5.4目的:在场景中建立plane平板,通过shader使平板在y坐标上有突起,且随y值定义不同的颜色先看下效果: Shader代码如下: Shader"Custom/ChangeShapeY"{ Properties{//定义变量,这些可在物体Inspect...

Unity Shader如何实现序列帧动画效果

小编这次要给大家分享的是UnityShader如何实现序列帧动画效果,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。 实现原理主要的思想是设置显示UV纹理的大小,并逐帧修改图片的UV坐标。(可分为以下四步)1、我们首先把_Time.y和速度属性_Spe...

Unity shader实现高斯模糊效果

本文实例为大家分享了Unityshader实现高斯模糊效果的具体代码,供大家参考,具体内容如下 正常图: 高斯模糊效果图: shader代码: Shader"Custom/GaoSiMoHu" { Properties { _MainTex("Texture",2D)="white"{} _Blur...

unity shader如何实现玻璃折射效果

小编这次要给大家分享的是unityshader如何实现玻璃折射效果,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。Shader"Unlit/render_reflect" { Properties { _MainTex("Textu...

Unity Shader怎么实现径向模糊效果

本篇内容主要讲解“UnityShader怎么实现径向模糊效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“UnityShader怎么实现径向模糊效果”吧!在游戏里面有很多模糊效果,像赛车类游戏。当你加速时,会发现2边的场景变模糊。如下图:今天也来做一下径...

Unity3D Shader如何实现流光效果

这篇文章主要为大家展示了Unity3DShader如何实现流光效果,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。流光效果图:演示工程:下载地址//功能需求:模拟数据传送效果,高亮色块从模型上方移动到下方 //功能分析:这里采用UV动画的方式来实现,利用...

Unity Shader怎么实现模糊效果

本篇内容主要讲解“UnityShader怎么实现模糊效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“UnityShader怎么实现模糊效果”吧!本文实例为大家分享了UnityShader实现模糊效果的具体代码,供大家参考,具体内容如下今天分享一个超简单...