shader编程学习(3)溶解

原创 2015年11月19日 11:50:40

shader代码

Shader "Custom/zxtest"
{
    Properties 
    {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _NoiseTex ("NoiseTex (R)",2D) = "white"{} //辅助图片
        _DissolveSpeed ("DissolveSpeed (Second)",Float) = 1//溶解时间
        _EdgeWidth("EdgeWidth",Range(0,0.5)) = 0.1//溶解边缘的宽度,比如纸片燃烧时边缘变黑
        _EdgeColor("EdgeColor",Color) =  (1,1,1,1)//边缘的颜色
    }
    SubShader 
    {
        Tags { "RenderType"="Opaque" }
        
        Pass
        {
            CGPROGRAM
            #pragma vertex vert_img//顶点着色器 它会自动把结果返回到一个v2f_img结构体中
            #pragma fragment frag
            #include "UnityCG.cginc"
             
            uniform sampler2D _MainTex;
            uniform sampler2D _NoiseTex;
            uniform float _DissolveSpeed;
            uniform float _EdgeWidth;
            uniform float4 _EdgeColor;
            
			//v2f_img 自带的结构体 包含顶点坐标,和uv坐标
            float4 frag(v2f_img i):COLOR
            {
				//时间比例 0-1
				//unity给我们提供了几个不同的时间参数都保存在_Time中,其中_Time.y是标准的时间,单位(s)
                float DissolveFactor = saturate(_Time.y / _DissolveSpeed);
				//取得r值
                float noiseValue = tex2D(_NoiseTex,i.uv).r; 
				//如果r值小于时间比例
                if(noiseValue <= DissolveFactor)
                {
					//discard,是由CG提供的,若出现在fragmentShader中表示立即放弃当前处理的片元。
					//也就是说当我们判定当前片元需要溶解的时候我们就使用discard命令
                    discard;
                }
             
                float4 texColor = tex2D(_MainTex,i.uv);
				//EdgeFactor(0-1)越小表示越快要溶解,即越接近边缘
                float EdgeFactor = saturate((noiseValue - DissolveFactor)/(_EdgeWidth*DissolveFactor));
                float4 BlendColor = texColor * _EdgeColor;
                //lerp(x,y,a) = x*(1-a) + y*a; 越靠近边缘,颜色越接近定义的边缘颜色
                return lerp(texColor,BlendColor,1 - EdgeFactor);
            }
            
            ENDCG
        }
    } 
    
    FallBack Off
}

效果




版权声明:本文为博主原创文章,未经博主允许不得转载。

[UnityShader3]溶解与重现效果

参考链接:http://www.cnblogs.com/Esfog/p/DissolveShader.html 效果图: 从颜色变化来说,有三种,一种是纹理颜色,一种是纹理与黑边的混合颜色...
  • lyh916
  • lyh916
  • 2015年06月10日 13:14
  • 3631

shader溶解特效

前言:在游戏中间我们常常看见物体会慢慢消融,变为灰烬,这个效果可以用于人物的消失,毁灭. 代码: Shader "Esfog/Dissolve" { Properties ...
  • xiaoge132
  • xiaoge132
  • 2016年06月15日 12:23
  • 1642

UnityShader实例08:溶解消融(Dissolve)材质

溶解消融(Dissolve)材质 在不少3D游戏中,角色死亡后会有一个溶解消融的特效,这个除了粒子特效以外还需要shader的配合。下面就是本例实现的一个效果,当然没有例子配合看起来是搓搓的,不过效果...
  • u011047171
  • u011047171
  • 2015年07月14日 09:35
  • 5868

Unity Shader-死亡溶解效果

简介 赶脚每个学习shader的,都得过死亡溶解这一关....毕竟这个效果灰常常用。今天,我也来研究一下死亡溶解效果的实现。 溶解效果实现...
  • puppet_master
  • puppet_master
  • 2017年05月22日 00:21
  • 18023

Unity Shader-非主流纹理采样研究(流光,溶解,隐身效果)

简介 今天来研究几个效果,最近比较忙,所以来研究几个比较简单的效果。不过也是游戏中常用的一些效果,流光效果,按照方向的溶解效果。其实这几个效果主要运用的就是世界空间采样的一个技术。不多说,下面进入...
  • puppet_master
  • puppet_master
  • 2017年08月11日 09:56
  • 1898

Shader forge 屏幕效果、溶解

本文章是根据Jason的shader forge教程笔记  原视频地址https://www.bilibili.com/video/av11127524/ 1、屏幕效果 (shader创建选...
  • KiwiFly_
  • KiwiFly_
  • 2017年11月10日 15:46
  • 239

shader实例溶解,燃烧效果

游戏中物体腐化消失,燃烧消失时,会有从局部慢慢消失的效果,然后配合一些粒子特效,就能达到非常好的美术效果。 类似效果如下: 注: _DissColor为溶解主色,_AddColor为叠加色,...
  • m0_37283423
  • m0_37283423
  • 2017年04月25日 13:35
  • 722

shader之——溶解

描述   在网上看到很多溶解的例子 ,有个点不太好理解,就是溶解的边缘加上颜色过度,可以控制过度的宽度以及颜色值, 今天来研究一下这个算法 代码如下: Shader "Unlit/NewUnl...
  • baicaishisan
  • baicaishisan
  • 2017年12月28日 10:39
  • 25

Shader简单例子之溶解

Shader "Custom/s2" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} ...
  • ycswjx
  • ycswjx
  • 2015年06月10日 20:14
  • 165

Shader forge 序列帧、漫反射、折射、环境光照

本文章是根据Jason的shader forge教程笔记  原视频地址https://www.bilibili.com/video/av11127524/ 1.序列图播放 ...
  • KiwiFly_
  • KiwiFly_
  • 2017年11月08日 16:07
  • 213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shader编程学习(3)溶解
举报原因:
原因补充:

(最多只允许输入30个字)