【Unity3D Shader】学习笔记-消融效果

简介: 前言 消融效果一般用于怪物的死亡表现,主要原理通过随时间修改消融的阈值,丢弃小于阈值的颜色实现消融(也可以通过alpha设为0)。一、简单消融效果图2 面版参数 简单的消融效果,Threshold的值是随时间从0-1进行变化。对扰动图采样取r值,通过比较Threshold与R值的大小来进行消融。Noise图可以控制消融的形状,代码如下。

【Unity3D Shader】学习笔记-消融效果


前言


   消融效果一般用于怪物的死亡表现,主要原理通过随时间修改消融的阈值,丢弃小于阈值的颜色实现消融(也可以通过alpha设为0)。

  [声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我]

一、简单消融效果


微信图片_20220424154714.gif

图1 消融效果


微信图片_20220424154718.png

图2 面版参数


   简单的消融效果,Threshold的值是随时间从0-1进行变化。对扰动图采样取r值,通过比较Threshold与R值的大小来进行消融。Noise图可以控制消融的形状,代码如下。


fixed4 col = tex2D(_MainTex, i.uv);
float value = tex2D(_DissolveTex, i.uv).r;
// 扰动采样的值r小于外部动态修改的阈值就丢弃,实现消融
if(value <= _DissolveThreshold) 
{
    discard;
}
return col;


二、消融增加边界区颜色


微信图片_20220424154723.gif    

图3 消融边界区域颜色


微信图片_20220424154726.png

图4 面版增加边界颜色和阈值


消融增加边界区颜色,当采样的R值小于消融阈值*边界区域阈值,混合边界颜色形成消融过渡。


fixed4 col = tex2D(_MainTex, i.uv);
float value = tex2D(_DissolveTex, i.uv).r;
// 扰动采样的值r小于外部动态修改的阈值就丢弃,实现消融
if(value <= _DissolveThreshold)
{
    discard;
}
// 消融的阈值乘以边界的范围实现边界染色
if(value <= _DissolveThreshold*_EdgeThreshold)
{
    col.rgb *= _EdgeColor.rgb; //这里直接赋值效果也很好
}
return col;


三、消融带定向飘散效果


微信图片_20220424154731.gif

图5 定向飘散


微信图片_20220424154735.png


   在顶点着色器中对模型顶点进行位移来实现飘的效果,通过消融阈值和方向来控制飘的方向等参数。


// 顶点着色器中对坐标进行偏移w控制从什么时候开始位移,_WaveParams.xyz控制方向
v.vertex.xyz += saturate(_DissolveThreshold - _WaveParams.w) * _WaveParams.xyz;


四、后记


   本篇中的代码全部使用了if判断,需要优化掉,边界区域可以添加多个来提升过渡效果。当然整体效果还是比较一般,跟大神的差距还是很大的。


网络异常,图片无法展示
|

图7 twitter@Ed_dv做的消融效果

相关文章
|
4月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
310 0
|
4月前
|
缓存 图形学
Unity3D学习笔记12——渲染纹理
Unity3D学习笔记12——渲染纹理
42 2
|
4月前
|
API C# 图形学
Unity3D学习笔记9——加载纹理
Unity3D学习笔记9——加载纹理
49 2
|
4月前
|
API 图形学 异构计算
Unity3D学习笔记7——GPU实例化(2)
Unity3D学习笔记7——GPU实例化(2)
32 2
|
4月前
|
存储 缓存 图形学
Unity3D学习笔记11——后处理
Unity3D学习笔记11——后处理
64 1
|
4月前
|
测试技术 C# 图形学
Unity3D学习笔记10——纹理数组
Unity3D学习笔记10——纹理数组
58 0
|
4月前
|
图形学 异构计算
Unity3D学习笔记8——GPU实例化(3)
Unity3D学习笔记8——GPU实例化(3)
54 0
|
4月前
|
存储 API 图形学
Unity3D学习笔记6——GPU实例化(1)
Unity3D学习笔记6——GPU实例化(1)
70 0
|
4月前
|
API 图形学 索引
Unity3D学习笔记5——创建子Mesh
Unity3D学习笔记5——创建子Mesh
34 0
|
4月前
|
API C# 图形学
Unity3D学习笔记4——创建Mesh高级接口
Unity3D学习笔记4——创建Mesh高级接口
43 0