2D火焰特效

news2025/3/27 5:16:39

Unity面片实现火焰效果

一、效果说明

大家好,我是阿赵。这是一个火焰的效,不过它不是粒子做的,是用一个面片做的,可以理解成是2D的特效。这个例子很简单,但可以拓展一下思路,原来除了用序列帧和粒子做动画,还可以用Shader来实现。
在这里插入图片描述
在这里插入图片描述

二、分步制作原理

1、颜色部分

这里主要是使用了一张噪声图作为火焰的模拟

通过控制UV坐标,让噪声图有一个从下到上滚动的效果
在这里插入图片描述

float2 noiseUV = i.uv*_NoiseTex_ST.xy + _NoiseTex_ST.zw +_Time.y*_Speed;
half4 noiseCol = tex2D(_NoiseTex, noiseUV);

接下来用一张渐变图实现火焰上下过渡的效果:
在这里插入图片描述
在这里插入图片描述

可以看到,通过噪声图和渐变图,面片上已经有一点火焰的感觉了。但现在的火焰是黑白的,我们还要乘以一个颜色。
在这里插入图片描述
在这里插入图片描述

float2 noiseUV = i.uv*_NoiseTex_ST.xy + _NoiseTex_ST.zw +_Time.y*_Speed;
half4 noiseCol = tex2D(_NoiseTex, noiseUV);
half noiseVal = noiseCol.r;

half4 genCol = tex2D(_GenTex, i.uv);
float genVal = genCol.r;

float finalG = (1 - genVal)*_EndVal*noiseVal*_ColChange + _Color.g;
finalG = clamp(finalG, 0, 1);

half3 finalRGB = half3(_Color.r, finalG, _Color.b);
finalRGB = finalRGB * _Bright;

注意到代码里面有一个finalG的变量,用于最终输出颜色的G通道,然后RB通道都是直接使用了一个指定的颜色_Color。其实这里也可以整个_Color和渐变色、噪声图颜色一起做乘法的,效果会是这样
half3 finalRGB = _Color.rgb* genVal*noiseVal;
在这里插入图片描述

感觉没有单独用G通道去计算的效果好。

2、透明度部分

这里使用一张黑白的遮罩图,对上面得到的颜色结果进行裁剪,得到只有在遮罩范围内才显示:
在这里插入图片描述
在这里插入图片描述

现在的形状过于整齐,火焰燃烧时应该是有一定的抖动效果,所以在计算这个遮罩的时候,把噪声图和渐变图也加入进去,让火焰的边缘产生不规则的抖动:
在这里插入图片描述

三、完整Shader

Shader "azhao/panelFire"
{
    Properties
    {
		_NoiseTex("NoiseTex", 2D) = "white" {} 
		_Speed("Speed", Vector) = (0,0,0,0)
		_Color("_Color", Color) = (1,0.7981879,0,0)
		_GenTex("GenTex", 2D) = "white" {}
		_EndVal("EndVal", Float) = 1
		_ColChange("ColChange", Float) = 0
		_Bright("Bright", Float) = 1
		_MaskOffset("MaskOffset", Float) = 1
		_MaskTex("MaskTex", 2D) = "white" {}
		_NoiseLen("NoiseLen", Float) = 0
    }
    SubShader
    {
        Tags { "Queue"="Transparent" }
        LOD 100
		ZWrite off
		Cull off
		Blend SrcAlpha OneMinusSrcAlpha
        Pass
        {
			
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag


            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            { 
                float4 vertex : SV_POSITION;
				float2 uv : TEXCOORD0;
            };
			sampler2D _NoiseTex;
			float4 _NoiseTex_ST;
			float2 _Speed;
			float4 _Color;
			sampler2D _GenTex;
			float _EndVal;
			float _ColChange;
			float _Bright;
			float _MaskOffset;
			sampler2D _MaskTex;
			float _NoiseLen;
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = v.uv;
                return o;
            }

            half4 frag (v2f i) : SV_Target
            {
                // sample the texture
				float2 noiseUV = i.uv*_NoiseTex_ST.xy + _NoiseTex_ST.zw +_Time.y*_Speed;
                half4 noiseCol = tex2D(_NoiseTex, noiseUV);
				half noiseVal = noiseCol.r;

				half4 genCol = tex2D(_GenTex, i.uv);
				float genVal = genCol.r;

				float finalG = (1 - genVal)*_EndVal*noiseVal*_ColChange + _Color.g;
				finalG = clamp(finalG, 0, 1);

				half3 finalRGB = half3(_Color.r, finalG, _Color.b);
				finalRGB = finalRGB * _Bright;
				float2 maskUV = i.uv;
				maskUV.x = (noiseVal * 2 - 1)*noiseVal*0.1*_MaskOffset + i.uv.x;
				half4 maskCol = tex2D(_MaskTex, maskUV);
				half alpha = smoothstep(noiseVal - _NoiseLen, noiseVal, genVal)*genVal*maskCol.r;
                return half4(finalRGB,alpha);
            }
            ENDCG
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/490572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将页面元素隐藏的10种方法

在Web开发中,隐藏页面元素使其视觉不可见是一个非常常见的需求。为了实现这一目标,我们通常会采用多种方法,最常用的例如CSS的display属性,只要设置为node即可隐藏元素。 本文将通过对当前所有可用的隐藏元素的方法做一个总结&…

Flink系列-11、Flink DataStream的Sink

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址:https://flink.apache.org/ 学习资料:https://flink-learning.org.cn/ 目录 Flink在批处…

云效/git 删除特殊字符远程分支

云效/git 删除特殊字符远程分支 一、查看所有分支二、删除分支三、验证 在使用云效时,不小心添加了一个错误分支 de’vdev ,在云效手动删除时,报错“找不到分支”,无法删除。只能启动git命令进行查看,将步骤总结如下&a…

【JAVA】#详细介绍!!! 文件操作之文件内容操作(2)!

本文主要是针对文件内容的操作进行展开,文件内容操作无非就两种 1.针对文件进行“读” 2.针对文件进行“写” 目录 文件内容读写的形式 字符流 字节流 文件内容操作 InputStream:以字节流的形式进行读操作 创建方式: FileInputStream的…

2023年深圳CPDA数据分析师认证到这里就对了哦

CPDA数据分析师认证是大数据方面的认证,助力数据分析人员打下扎实的数据分析基础知识功底,为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论,提升工作效率和决策能力,遇到问题能够举一反三&#xff0c…

MySQL索引的底层实现原理

索引的底层实现原理 数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘块(对应索引树的节点),索引树越低,越“矮胖”,磁盘IO次数…

主动式和被动式电容笔的区别在哪?苹果平替笔性价比高的

被动式电容笔与主动式电容笔最大的不同之处在于主动式电容笔具有更加广泛的应用领域,可以与各种种类的电容式屏幕相匹配。随着对电容笔的了解,电容笔的使用也日益广泛。而且平替电容笔的制造工艺已经日趋成熟,正在走向实用,并且已…

易观千帆 | Q1运营报告:手机银行MAU超5.3亿,行业“内卷”超出想象

易观:由中国电子银行网、易观分析联合发布的“2023中国手机银行综合运营报告”显示:在经济企稳回升的大背景下,中国手机银行第一季度综合运营指数季度内呈平稳上升态势,手机银行活跃人数环比增幅逐月递增,促使活跃用户…

Redis主从复制和哨兵模式

Redis主从复制 概念 主从复制,是指将一台Redis服务器的数据,复制到其他的Reds服务器。前者称为主节点(master / leader),后者称为从节点(slave / follower)。 数据的复制是单向的,只能由主节点到从节点。 Master以写为主,Slave…

无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】

目录 视频教程 1. Linux CentOS安装cpolar 2. 创建TCP隧道 3. 随机地址公网远程连接 4. 固定TCP地址 5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不…

Go语言的基础语法以及变量和常量

目录 基础语法 行分隔符 注释 标识符 变量 声明 赋值 作用域 常量 声明 iota 基础语法 行分隔符 在Go程序中,一般一行就是一个语句,不像Java等可以在一行写多个语句一样,而且最后也不需要用";"来结尾。 例如&#xf…

【华为OD机试 2023最新 】箱子之字形摆放(C语言题解 100%)

文章目录 题目描述输入描述输出描述备注用例题目解析C语言题目描述 有一批箱子(形式为字符串,设为str), 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。 例如:箱子ABCDEFG,空地宽度为3,摆放结果如图: 则输出结果为: AFG BE C…

Linux Shell编程入门到实战(六)

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

国考省考结构化面试:整体介绍,考试题型,考试流程,仪表着装,如何备考?

国考省考结构化面试:整体介绍,考试题型,考试流程,仪表着装,如何备考? 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重…

基于ChatGPT的文档知识库客服系统-支持上传网址/文本/docx等数据

现在,很多公司都有自己的内容知识库,会产生大量的碎片话的内部知识,但是这样内部知识难以整合搜索。 我开发的文档知识库客服系统 gofly.v1kf.com ,可以应用于企业内部知识库管理,用户可以使用自然语言提问&#xff0c…

杂谈:铜钱儿

我个人是比较喜欢铜钱儿的。 收藏其实谈不上,因为我不买什么名品,都是玩儿一些屌丝钱,穷嘛,这个也没啥好掩饰的~ 瞎聊点儿钱币的话题吧。 小时候是家里偶尔能发现铜钱儿,一般都是清朝的,乾隆居多。有时候地…

【苹果IM群发家庭推日历推群发】筛选“兼容性”,默认为高效,挑选“兼容性”视频和图象不操纵HEVC的新格式,承袭使用旧的MPEG格式

推荐内容IMESSGAE相关 作者✈️IMEAE推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容3.日历推 *** …

Vue学习笔记(0504)

此页面对应着创建的Vue项目的显示页面 默认可以从下面的地址进行访问:http://localhost:8080 这里由于创建项目时我们选择了语法规范,所以我们在保存时哪些不符合代码规范的地方就会报错,只有修正代码规范后错误才会消失。 这里可以看出我们…

PyQt5桌面应用开发(7):文本编辑+语法高亮与行号

本文目录 PyQt5桌面应用系列代码编辑和语法高亮的亿点点细节作为用户报表的文本控件作为编辑器的文本控件代码编辑器的需求 代码编辑[^1]语法高亮[^2]小结 PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQt5桌面应用开发(2&…

三、Spring Cloud Alibaba组件nacos

一、什么是Nacos 官方地址: https://nacos.io/zh-cn/docs/v2/what-is-nacos.html 概念: 服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。即集注册中心配置中心服务管理的一个平…