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

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

(0)

相关推荐

  • Unity shader实现消融效果

    本文实例为大家分享了Unity shader实现消融效果的具体代码,供大家参考,具体内容如下 效果图: shader代码: // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Custom/EdgeColo" { Properties { _MainTex ("Texture", 2D) = "white" {} _N

  • Unity3D使用Shader实现腐蚀消失

    本片shader实现的效果是模型腐蚀消失,且腐蚀的边缘大小可以调.颜色可调.效果图如下: 设置面板如下: 使用时需要给ClipMask参数给一张噪点图,设置合适的cliplinesize和cliplinecolor,然后调整clipalpha就可以了. 原理是通过获取噪点图上对应的颜色,转换成灰度,然后用灰度与clipalpha对比,如果大于则被剪裁掉. shader实现如下: Shader "XM/CorrosionEffect" { Properties { _Color (&qu

  • Unity3D中shader 轮廓描边效果实现代码

    Unity3D中shader 轮廓描边效果 想利用Unity3D中shader这个功能实现描边轮廓边框效果该怎么做呢,相信有很多搞开发的人想知道,为此下面就给大家介绍下方法. Shade实现描边效果,如下图中的3D球效果图         Shade代码如下: Shader "Outlined/Silhouetted Diffuse" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _OutlineCo

  • Unity3D Shader实现扫描显示效果

    本文实例为大家分享了Unity3D Shader实现扫描显示的具体代码,供大家参考,具体内容如下 通过Shader实现,从左向右的扫描显示,可自定义扫描颜色.宽度.速度. 效果图如下 编辑器界面如下 Shader源码如下 Shader "XM/ScanEffect" { Properties { _MainTex("Main Tex", 2D) = "white"{} _lineColor("Line Color", Colo

  • Unity3D Ui利用shader添加效果

    本文实例为大家分享了Unity3D Ui利用shader添加效果的具体代码,供大家参考,具体内容如下 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "UI/Unlit/Flowlight" { Properties { [PerRendererData] _MainTex("Sprite Texture", 2D) = "w

  • Unity3D Shader实现动态星空

    本文实例为大家分享了Unity3D Shader实现动态星空的具体代码,供大家参考,具体内容如下 Shader "Unlit/Test" { Properties { [Gamma][Header(CubeMap)]_MainColor("MainColor",COLOR)=(0.5,0.5,0.5,1) _Spec("Spec",Range(1,8))=1 [NoScaleOffset]_Tex("CubeMap",CUBE

  • Unity3D Shader实现镜子效果

    本文实例为大家分享了Unity3D Shader实现镜子效果的具体代码,供大家参考,具体内容如下/p> Shader部分代码: Shader "Custom/FanShe" { Properties{ _MainTex("Albedo",2D) = "white"{} _MainTint("Diffuse Color",Color)=(1,1,1,1) _Cubemap("Cubemap",CUBE)

  • Unity3D Shader实现流光效果

    本文实例为大家分享了Unity3D Shader实现流光效果的具体代码,供大家参考,具体内容如下 流光效果图: 演示工程:下载地址 //功能需求:模拟数据传送效果,高亮色块从模型上方移动到下方 //功能分析:这里采用UV动画的方式来实现,利用Alpha贴图控制流动的形状 // 利用Alpha遮罩贴图,控制模型中哪些地方需要进行流动 Shader "Custom/DataFlowEffect" { Properties { _MainColor("Main Color"

  • Unity3D旧电视滤镜shader的实现示例

    实现思路 既然是要实现旧电视的后处理效果,那么只要回忆一下那些古旧的电视的显示效果然后进行模拟就可以了. 1.首先那种大头电视一般屏幕有一些曲率,并不是完全的一个平面,而且一般是向外凸起,这种凸起会造成中间的显示区域会比原来更近一些,边缘的显示区域会比原来更远一些.这种效果我们直接用简单的二次函数来实现. 2.那种老旧电视会有不断运动的噪声,我们直接使用噪声函数加上时间变量来实现. 3.屏幕上会有一些条纹效果,这种周期性的条纹效果一般用三角函数来实现. 当然不可能模拟的完全准确..也没有完全准确

  • Unity3D Shader实现扫描显示效果(2)

    上一篇使用的方式是对UV进行剪裁,如果用于模型的话,会出现一些问题.本篇使用的方式是对模型进行模型空间的剪裁,可设置剪裁方向.效果如下: 设置界面如下: mode用于设置剪裁方向. clip用于设置剪裁值. shader实现如下: Shader "XM/ScanEffect2" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = &q

  • Unity3D Shader实现贴图切换效果

    本文实例为大家分享了shader实现基于世界坐标的贴图置换效果. 效果如下: 设置面板如下: 可在面板上设置切换方向,与切换对象,及其切换速度. shader实现如下: Shader "XM/Effect/SwapTexture" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Targ

随机推荐