【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判断,需要优化掉,边界区域可以添加多个来提升过渡效果。当然整体效果还是比较一般,跟大神的差距还是很大的。


微信图片_20220424154740.gif

图7 twitter@Ed_dv做的消融效果

相关文章
|
5月前
cocos creator shader 入门教程3:实现一个左右不同颜色的shader
cocos creator shader 入门教程3:实现一个左右不同颜色的shader
237 0
|
10月前
|
算法 Java 程序员
Unity Shader 概述
Unity Shader 概述
96 0
Unity Shader 概述
|
图形学
Unity Shader Graph 制作 Fade 淡入淡出效果
Unity Shader Graph 制作 Fade 淡入淡出效果
439 1
Unity Shader Graph 制作 Fade 淡入淡出效果
|
机器人 C# 图形学
Unity Shader Graph 制作Dissolve溶解效果
Unity Shader Graph 制作Dissolve溶解效果
143 0
Unity Shader Graph 制作Dissolve溶解效果
|
图形学
Unity Shader Graph 制作扫光效果
Unity Shader Graph 制作扫光效果
345 0
Unity Shader Graph 制作扫光效果
|
C语言 异构计算
OpenGL shader 程序基础
Shader, 即着色器,是一种类C语法的程序,用于封装硬件相关部分的代码。与普通程序的区别在于 shader 是通过GPU来执行的。 需要给GPU而不是CPU写程序的原因是GPU在处理图形相关运算时远远快于CPU。 不同的 shader 程序在使用时编译成本机硬件支持的机器指令。
139 0
|
图形学
【Unity3D Shader】学习笔记-UV画图
前言 本篇介绍在片段着色器中进行画图操作,主要使用极坐标的方式。具体极坐标方程就需要花时间去学习了,可以通过其中一两个公式进行详细的研究,这样大部分的曲线图就可以绘制出来了。 一、心形线的方程:r = 1 - asinθ
223 0
【Unity3D Shader】学习笔记-UV画图
|
图形学
【Unity3D Shader】学习笔记-位移动画
Unity3D Shader学习笔记系列,由于是个人理解后写的,因此可能会出现描述错误,理解不到位的地方。另外没有完全从基础的知识开始,对于刚开始学习的同学还需要看更基础的知识进行补充。 一、顶点动画 将顶点的坐标与三角函数进行算术运算,就可以得到一个在原始位置“左右上下”来回的动画效果。还可以通过定义一个_Direction方向向量来进行来回摆动方向。
365 0
【Unity3D Shader】学习笔记-位移动画
|
图形学
Shader特效——BRDF 的实现【Unity Shader】
Shader特效——BRDF 的实现【Unity Shader】
194 0
Shader特效——BRDF 的实现【Unity Shader】
|
Web App开发 图形学
Unity Shader基础
Shader NameShader “Custom/Myshader” //“Custom/Myshader”是在unity中找到该shader的路径{}Shader Properties//决定哪些参数在shader Inspector中显示//_Name("Display Name",type...
1183 0
相关产品
机器翻译
推荐文章
更多