玩神界原罪2,感觉人物被建筑遮挡时,建筑的“溶解”效果很有意思,想实现一下。然后发现连溶解都没实现过,emmmmm。。。。先来把溶解实现了~

  原理就是根据一张噪声图的值是否大于某个阈值,来判断是否丢弃像素值。然后阈值从0到1就可以让物体从有到无了。然后加了一条溶解的过渡带,为了显得不那么突兀。

  改变阈值从0到1再从1到0,效果如下:
代码如下: // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Custom/Dissolve" {
Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {}
_DissolveTex("DissolveMap", 2D) = "white"{}//噪声图
_DissolveThreshold("DissolveThreshold", Range(,)) =
_EdgeWidth("EdgeWidth",Range(,))=0.01 //过渡边界的宽度
_EdgeColor("EdgeColor",Color)=(,,,) //过渡边界的颜色 }
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc" sampler2D _MainTex;
float4 _MainTex_ST;
sampler _DissolveTex;
float _DissolveThreshold;
float _EdgeWidth;
float4 _EdgeColor; struct v2f{
float4 pos:SV_POSITION;
float2 uv:TEXCOORD0; }; v2f vert(appdata_full i){
v2f o;
o.pos=UnityObjectToClipPos(i.vertex);
o.uv=TRANSFORM_TEX(i.texcoord,_MainTex); return o;
} float4 frag(v2f i): SV_Target{
float4 dValue=tex2D(_DissolveTex,i.uv);
float4 outColor=tex2D(_MainTex, i.uv);
if(dValue.r<_DissolveThreshold){//小于阈值的丢弃
discard;
} float delta=dValue.r-_DissolveThreshold;
float temp=sign( _EdgeWidth-delta);//负数的话表示是超过边界宽度的,正数表示是小于宽度的,sign取符号。
float4 endColor=lerp(outColor,_EdgeColor,saturate(temp));//saturate一下,那么超过宽度的都显示正常的颜色,小于宽度的都显示边界颜色。
return endColor;
}
ENDCG
}
}
FallBack "Diffuse"
}

溶解shader的更多相关文章

  1. Unity中溶解shader的总结

    在实际的游戏工程中,经常美术和策划会提出溶解的表现要求.比如子弹在飞行的时候,弹道不断的消融:角色受到大型炮弹的攻击,在击飞的时候不断的消融等等诸如此类的表现.一般的消融都是结合粒子系统来实现,通过给 ...

  2. (转)溶解shader

    游戏中物体腐化消失,燃烧消失时,会有从局部慢慢消失的效果,然后配合一些粒子特效,就能达到非常好的美术效果.类似效果如下: 注:_DissColor为溶解主色,_AddColor为叠加色,按照溶解的移动 ...

  3. 小强学渲染之Unity Shader噪声应用

    之前玩Tencent的仙剑4手游时,杀死boss会看到boss有“消融”的效果,就是身体上有多个洞洞然后往四周扩散直至尸体完全消失,但效果是没有关闭背面剔除的“穿帮”效果,可能也是考虑性能因素. em ...

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

    效果: 图左:一道金光闪过,瞬间灰飞烟灭 图右:燃烧效果,先过渡到黄色,然后渐渐过渡到黑色,最后消失殆尽. 这是游戏中常见的效果,各位可以想想自己玩过的游戏. 手头正在玩的,梦三国手游,死亡的时候就是 ...

  5. unity3d 游戏插件 溶解特效插件 - Dissolve Shader

    unity3d 游戏插件 溶解特效插件 - Dissolve Shader   链接: https://pan.baidu.com/s/1hr7w39U 密码: 3ed2

  6. pixijs shader 贴图溶解效果教程

    pixijs shader 贴图溶解效果教程 我直接贴代码了 没什么好讲解了 稍微有点基础的人应该能看懂 const app = new PIXI.Application({ transparent: ...

  7. Shader之溶解效果的几种实现方法

    这里通过 “是否丢弃像素”的2种方法,写2个shader,效果是一样的,也提到了,丢弃某个像素的3种方式. 是否丢弃: 1.通过脚本控制shader变量判断当前是否丢弃像素,需要额外脚本: 2.sha ...

  8. Shader Forge 刀光溶解

    实际特效时,时间可以控制vertex color.a,shader forge 还只是玩具,试验用具,离商业产品质量还有差距. 其实,有技术美术的画,很多问题,美术能自己解决,都是一些欠缺通道的问题, ...

  9. 学习游戏渲染(Shader)的用处

     本文在讨论的主题并不限于具体引擎或具体语言,为了说明方便可能会提到Unity的一些内容. 最近渐渐发现很多从事游戏开发的新人,对于学会写Shader似乎总是有几分神往,但一般入了门或者学了一段时间后 ...

随机推荐

  1. 全面剖析Smarty缓存机制二[清除缓存方法]

    前段时间,写了一篇 Smaryt缓存机制的几种缓存方式 ,详细介绍了三种缓存方式:全局缓存.部分缓存.局部缓存,以及通过is_cache()判断是否存在缓存来进行缓存生成.本来这篇早该完成,由于时间关 ...

  2. 从命令行运行 MyBatis Generator

    ? ? 一.准备 1. 获取最新jar包 2. 获取xml dtd <?xml version="1.0" encoding="UTF-8"?> & ...

  3. 设计模式15:Interpreter 解释器模式(行为型模式)

    Interpreter 解释器模式(行为型模式) 动机(Motivation) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变 ...

  4. 编写高质量代码改善C#程序的157个建议——建议89:在并行方法体中谨慎使用锁

    建议89:在并行方法体中谨慎使用锁 除了建议88所提到的场合,要谨慎使用并行的情况还包括:某些本身就需要同步运行的场合,或者需要较长时间锁定共享资源的场合. 在对整型数据进行同步操作时,可以使用静态类 ...

  5. Altera SOPC FrameBuffer系统设计教程

    Altera SOPC FrameBuffer系统设计教程 小梅哥编写,未经授权,严禁转载或用于任何商业用途 在嵌入式系统中,LCD屏作为最友好的人机交互方式,被大量的应用到了各个系统中.在基于ARM ...

  6. Raspberry Pi 3 安装 Lazarus 1.6.2(2017-02-09更新)

    Raspberry Pi3 Lazarus 1.6.2 安装步骤如下: 安装环境:Raspbian Jessie, RPi3 1.安装subversion和unzip Sudo Apt-get upd ...

  7. delphi实现窗体组建随窗体大小改变而改变

    在网上查了许多资料去论述如何在dephi中去实现组件随窗口大小的变化而变化,然都不尽如人意.有人说用组件的align + anchors 这两个属性去控制,但是我用了之后,让我大惊失色.把anchor ...

  8. [leetcode] 2. Pascal's Triangle II

    我是按难度往下刷的,第二道是帕斯卡三角形二.简单易懂,题目如下: Given an index k, return the kth row of the Pascal's triangle. For ...

  9. log4net 入门使用

    log4net 是dotnet平台下的一个日记记录组件. 一  NuGet中安装log4net包: 二 配置log4net.config文件 配置文件内容: <?xml version=&quo ...

  10. DateTime.Now.ToString("yyyy/MM/dd") 时间格式化中的MM为什么是大写的?

    如果MM是小写,就表示时间里的分钟yyyy-MM-dd HH:mm:ss (年-月-日 时:分:秒) yyyy-MM-dd HH:mm:ss 年-月-日 时:分:秒大写是为了区分“月”与“分” 顺便说 ...