[转载]使用粒子实现Logo消融效果

2023-11-26 18:40

本文主要是介绍[转载]使用粒子实现Logo消融效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载自unity 官方中文论坛  点击这里查看原文

本文将由游戏开发者Mirza分享使用Unity的默认Shuriken粒子系统,在不使用插件或编写脚本的情况下,实现Logo消融效果。

 

 

这是一个Unity中运行的实时效果,你可以使用任意图片实现该效果,无论图片是否是彩色的。本教程将使用纯白色纹理来制作,根据该纹理调整设置,你可以改变部分粒子颜色,使其更符合自己使用的图片。

Part 1:Logo淡入淡出效果
我们首先处理粒子系统,实现整个Logo图片的淡入和淡出效果。
 



创建一个新材质,将Logo贴图赋予此材质。将其设置为使用Particles/Alpha Blended着色器。
 



我们需要确保纹理拥有读写权限。如果没有的话,基于纹理的粒子发射效果将只在编辑器中可用,无法在游戏中实现。
 



创建一个新的粒子系统。每次创建时,请重置Transform属性,这样游戏对象不会出现平移或旋转,除非打算使其以某种方式移动和旋转。
 



打开Renderer模块,并将粒子材质设置为刚刚创建的材质。如果想提高亮度,并且正使用着后期处理的泛光效果,我们可以将颜色调为纯白色,并将Alpha调到最大。

如下图对材质Tint Color进行的处理,将Render Alignment设为Local。我们不会让Logo的基础纹理粒子面向摄像机,这样能确保粒子面向本地变换的方向。
 



我们只打算发射一个粒子,所以查看Emission模块并按照下图进行设置。
 



现在我们可以进行Main模块设置。我们不需要循环播放该效果中的任何粒子系统,所以取消勾选Looping属性来禁用循环过程。

为了能通过脚本轻松地调整模拟时间,我们将Start Lifetime设为1。如果你不打算处理该数值,应该将它设为更合适的值。你可以将其设为较大数值,使观看者有足够时间看到Logo,再让Logo爆炸为精美的粒子。

如果我们不使用正方形纹理,则可能需要启用3D Start Size并处理参数。我们发射的是2D粒子,所以只要处理X和Y值。图像分辨率为1024*512,宽高比为2:1,所以将X值设为2,Y值设为1,使它匹配宽高比,避免使图片变形。

我们还降低了Start Color的Alpha值,因为使用后期处理设置的泛光效果时,图像的亮度会过高。
 



现在,我们需要使用Color over Lifetime模块来设置Alpha动画。下图是处理Logo淡入和淡出效果的设置。

Alpha淡入时间为总时间的25%,从25%~75%的时间显示Logo,然后再完全淡出。因为我们将该粒子持续时间设为1,所以分别设定的时间为0.25和0.75。
 



Part 2:Logo爆裂效果
在这一部分,我们将使用的粒子系统制作Logo分散的爆裂效果。
 



首先创建新粒子系统。我们有三种方法可以选择:
1、为点精灵图片创建简单的粒子纹理,将其指定给附加材质。
2、使用Ultimate VFX资源的点材质。
3、使用Inferno VFX中的附加发光球体材质。

这三种方法均可用于本文教程,Ultimate VFX 和Inferno VFX都是由本文作者Mirza所创作,如果你不想自己制作纹理和材质,也不打算付费购买资源,可以下载免费的Inferno VFX。

打开新建粒子系统的Renderer模块并设置材质,不必修改其它设置。
 



请按照下面的内容设置Main模块和Emission模块。

Start Delay会按指定时间推迟发射过程,以秒为单位。我们希望该效果在Logo淡出时发生,也就是从前面粒子系统的透明动画开始,即整个过程的第0.75秒。

这些粒子会很小,因此我们将Start Size设为单位大小的1/8,即0.125。粒子不用太亮,所以需要大幅降低Start Colour的Alpha值。

因为会有大量微小粒子,我们需要将Max Particles设为10,000,并将Emission模块中Bursts属性的Count数值也设为10,000。
 



现在让这些粒子从Logo纹理的形状发射出来,请按下面内容设置。

将Shape设为Box,指定Logo图片到Texture字段。如果想让粒子继承Logo的颜色,请勾选Color affects Particles。

类似之前的粒子系统Start Size设置,我们调整了发射器边界,通过设置Scale为[2, 1, 0],使其匹配图片的宽高比。Z值为0,因为希望让发射器在平面上发射。
 



此时,当粒子在Start Delay后发射时,我们会看到类似下图的效果。现在有了在纹理形状发射的基础,我们可以实现任何想要的效果。
 




现在处理分散的文字。启用Velocity over Lifetime模块。

点击该属性最右侧箭头设置Linear属性,选择Random Between Two Curves。指定相似曲线到所有轴,范围从-1~1。曲线会随时间慢慢增强分散效果,而不是立即分散,因此它能更好地融合前面的粒子系统,并提供过渡转变为噪声分散粒子系统。

为方便起见,这里使用了Speed Modifer来调整数值,但是为每个轴直接设置数值会更好,这样粒子系统可以自动剔除。本示例是一个Logo动画效果,所以这样处理意义不大。
 



最后,按下图启用并编辑Color over Lifetime模块和Size over Lifetime模块。
 



Part 3:Logo噪声分散效果
接下来,我们将会制作第一个噪声分散效果,如下图所示。该效果需要一个新的粒子系统,我们可以将刚制作好的粒子系统复制过来,因为许多设置是相同的。
 



我们需要修改部分设置,在Main模块和Emission模块中有一些区别。

Start Delay和Start Lifetime的数值会在1到2秒之间随机选取,Start Size较小,Max Particles设为20000,Burst中的Count值也设为20000。为了随机选取Start Lifetime数值,点击下拉箭头,选择Random Between Two Constants。
 



Color over Lifetime模块也有不同。
 



引入噪声后,就变得有趣了,现在启用Noise模块,按下面内容进行设置。

我们将Strength改为使用曲线,这样粒子不会立即以噪声方式分散,从而更好地与其它效果融合。右键点击曲线的控制点,选择Edit Key… 来直接控制并编辑点在视图上的位置,使用Broken切线模式允许你修改左边或右边的切线,而不改变另一侧的曲线。

通过使用这二个方法,我们将控制点设在0.25s,该点左边为直线,右边为曲线。得到的结果是0.25s前不使用噪声,之后会突然上升为1。

频率为1.5时效果看起来不错,它能控制“混乱”等级,因为粒子由渐变场操控。Scroll Speed设为1会使噪声在粒子生命周期生成动画。

我们使用了大量粒子,如果将Quality设为Medium (2D)会加速模拟效果,且不会与最终效果有太大区别。
 



我们将Render Mode改为Stretched Billboard,设置Speed Scale为0.1,Length Scale设为1,这样会稍微根据当前的移动速度和方向拉伸粒子,产生近似运动模糊的效果。
 



其它设置可以保留原样,因为我们重用了之前粒子系统的设置。

Part 4:Logo噪声分散2
复制我们刚刚制作的粒子系统,开始制作最后一个粒子系统,它或许是该效果中最精美的部分。
 



我们需要修改Main模块和Emission模块中的部分设置。

Duration设为0.75。这是因为这里不会在一次爆炸中发射粒子,而是会使用Rate over Time。我们还修改了Start Delay和Start Lifetime数值,并提高了Start Color的Alpha值。
 



按下图设置Color over Lifetime模块和Size over Lifetime模块。让粒子从蓝色变为桔红色,每个粒子的大小会快速增大然后缓慢减小。
 



最后,修改Noise模块的设置,将Strength和Frequency设为1。你可以将Quality改为Medium (2D)。
 



Part 5:组合所有效果
到这里就差不多完成了,让我们重新看一遍已经制作做好的独立粒子系统,然后将所有效果结合成一个可播放对象。


我们可以将这些粒子系统命名并分组为另一个粒子系统,将所有模块禁用,这样它们会在你选择其中任一对象时一起播放。如果禁用Looping并设置Stop Action为Destroy,可以将其用作可实例化效果,它会在Duration时间(以秒为单位)结束后自毁。
 



本文到此结束,结合所有粒子系统后,精美Logo消融效果就制作完成了,最后的效果如下图所示。

小结
使用粒子实现Logo消融效果,你学会了吗?是不是制作特效非常简单。更多Unity教程尽在Unity官方中文论坛(UnityChina.cn) !

这篇关于[转载]使用粒子实现Logo消融效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426161

相关文章

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.