Shader实例:溶解效果(Dissolve)
效果:

图左:一道金光闪过,瞬间灰飞烟灭
图右:燃烧效果,先过渡到黄色,然后渐渐过渡到黑色,最后消失殆尽。
这是游戏中常见的效果,各位可以想想自己玩过的游戏。
手头正在玩的,梦三国手游,死亡的时候就是溶解消失。
代码有注释:
Shader "Custom/Dissolve"
{
Properties
{
_MainTex("main tex",2D) = ""{}
_DissolveTex("dissolve tex",2D) = ""{}//溶解纹理,根据这张图的R值(也可以是其它通道的值)来做溶解判断,简单的说就是利用这张图的特征来作为溶解的样式
_DissolveColor("dissolve color",Color) = (,,,)//溶解颜色
_EdgeColor("edge color",Color) = (,,,)//边缘颜色
_DissolveSpeed("dissolve speed",Range(,)) = //溶解速度
_DissolveFactor1("dissolve factor1",range(,)) = 0.7//溶解因子1,大于这个因子就向溶解色过渡
_DissolveFactor2("dissolve factor2",range(,)) = 0.9//溶解因子2,大于这个因子就向边缘色过渡
} SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc" struct appdata_custom
{
float4 vertex:POSITION;
float4 texcoord:TEXCOORD0;
}; struct v2f
{
float4 pos:POSITION;
float2 uv:TEXCOORD0;
}; sampler2D _MainTex;
float4 _MainTex_ST; sampler2D _DissolveTex;
float4 _DissolveColor;
float4 _EdgeColor;
float _DissolveSpeed;
float _DissolveFactor1;
float _DissolveFactor2; v2f vert(appdata_custom v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
} half4 frag(v2f IN):COLOR
{
half4 c = tex2D(_MainTex,IN.uv);
float dissolve_c_r = tex2D(_DissolveTex,IN.uv).r;
float factor = saturate(_Time.y*_DissolveSpeed/);
if(factor>dissolve_c_r)
{
discard;
//clip(-1.0);
} float rate = factor / dissolve_c_r;
if(rate > _DissolveFactor1)
{
//向溶解色过渡
c.rgb = lerp(c.rgb,_DissolveColor.rgb,rate); if(rate>_DissolveFactor2)
{
//向边缘色过渡
c.rgb = lerp(c.rgb, _EdgeColor.rgb,rate);
}
}
return c;
}
ENDCG
}
}
FallBack "Diffuse"
}
clip:如果输入向量中的任何元素小于0,则丢弃当前像素。
discard:丢弃当前像素,功能同clip
lerp:线性插值,eg:lerp(a,b,f),a*(1-f)+b*f,随着f增大,a会越来越趋向于b
CG函数,无需记忆,待用到之时再去查阅即可。
- 本文固定链接: http://www.shihuanjue.com/?p=290
- 转载请注明: 乔 2016年01月13日 于 是幻觉 发表
Shader实例:溶解效果(Dissolve)的更多相关文章
- Esfog_UnityShader教程_溶解效果Dissolve
溶解效果在游戏中是很常见的,比如在一些神话或者魔法世界中,一些NPC角色在剧情需要时候会身体会渐渐的消失掉.甚至有一些更炫的,比如用火焰喷射器把目标燃尽.这些都可以用到溶解效果.这篇文章主要是讲解一下 ...
- Shader之溶解效果的几种实现方法
这里通过 “是否丢弃像素”的2种方法,写2个shader,效果是一样的,也提到了,丢弃某个像素的3种方式. 是否丢弃: 1.通过脚本控制shader变量判断当前是否丢弃像素,需要额外脚本: 2.sha ...
- 【OpenGL】Shader实例分析(七)- 雪花飘落效果
转发请保持地址:http://blog.csdn.net/stalendp/article/details/40624603 研究了一个雪花飘落效果.感觉挺不错的.分享给大家,效果例如以下: 代码例如 ...
- pixijs shader 贴图溶解效果教程
pixijs shader 贴图溶解效果教程 我直接贴代码了 没什么好讲解了 稍微有点基础的人应该能看懂 const app = new PIXI.Application({ transparent: ...
- Shader实例:NGUI制作网格样式血条
效果: 思路: 1.算出正确的uv去采样过滤图,上一篇文章说的很明白了.Shader实例:NGUI图集中的UISprite正确使用Shader的方法 2.用当前血量占总血量的百分比来设置shader中 ...
- unity3D 涂涂乐使用shader实现上色效果
unity3D 涂涂乐使用shader实现上色效果 之前我博文里面发过一个简单的通过截图方式来实现的模型上色方法,但是那个方法不合适商用,因为你需要对的很准确才可以把贴图完美截取下来,只要你手抖了一下 ...
- Unity Shader实现描边效果
http://gad.qq.com/article/detail/28346 描边效果是游戏里面非常常用的一种效果,一般是为了凸显游戏中的某个对象,会给对象增加一个描边效果.本篇文章和大家介绍下利用S ...
- pixijs shader 制作百叶窗效果
pixijs shader 制作百叶窗效果 直接贴代码了 const app = new PIXI.Application({ transparent: true }); document.body. ...
- 关于Unity中顶点片元Shader实例
补充 float4 fixed4 _Time 1: float4是内置向量 (x, y, z, w); float4 a; 访问单独成员a.x, a.y, a.z, a.w;2: fixed4 是内置 ...
随机推荐
- 复习(2)【postman,charles,filezilla server】
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.通常我们可以用它来测试接口. Charles是在Mac下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的 ...
- JAVA基础学习——1.2 环境搭建 之eclipse安装及中文化
安装好jdk,配置好环境变量以后,下面就可以进行安装eclipse了. 闲话少说,eclipse下载地址:http://www.eclipse.org/downloads/ 不大用关注checksum ...
- tp框架获取常量信息、方法、命名空间
获取系统常量信息: public function ShowInFo() { var_dump(get_defined_constants(true)); //如果参数为true,则分类显示 } 在这 ...
- 如何在Linux中搭建禅道8.4.1(httpd+php+mysql)
1.安装httpd 命令:yum install httpd 然后一路y即可 2.安装php 命令:yum install php 3.安装php-mysql 命令:yum install php ...
- Mac Pro 8G 安装MyEclipse提示虚拟内存为0 安装失败
看的一个大神的博客,一句话解决了.哈哈 百度一下很多人都说开多一点程序,让程序占满内存,使其虚拟内存使用就能通过这一步骤,但这里有个更好一点的方案 通过执行: memory_pressure -l ...
- WPF 如何画一颗心
如何用WPF画一个心. MainWindow.xaml <Window x:Class="Heart.MainWindow" xmlns="http://schem ...
- IOS __ 面试题
1.下面四种内部排序算法中哪一种在最差的情况下时间复杂度最高:(B) A.快速排序 B.冒泡排序 C.堆排序 D.归并排序 2.Shell中,将command1的输出作为command2的输入应该 ...
- 病毒四度升级:安天AVL Team揭露一例跨期两年的电信诈骗进化史
自2014年9月起,安天AVL移动安全团队持续检测到一类基于Android移动平台的间谍类病毒,病毒样本大多伪装成名为"最高人民检察院"的应用.经过反编译逆向分析以及长期的跟踪调查 ...
- 二.TimesTen原理及应用场景
声明:本文章转自麻袋爸爸 一,TimesTen应用场景 在谈论TimesTen内存数据库应用场景之前,我们先来介绍一下什么是内存数据库,及其工作原理吧.内存数据库,顾名思义就是将数据存放在内存中,并通 ...
- Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性
早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: ...