关于VFX Graph的学习

news2024/11/18 8:18:45

关于VFX Graph的学习

转载自我的有道云笔记,目前内容不多,后续如果继续使用会更新。

前言

出于实习工作需要和毕设需要,我开始使用VFXGraph。

以前准备第一批作品集的时候,就简单地使用过,但是只是跟着教程一顿乱连,很多地方没有理解。

始终跟着GabrielAguiarPro这位在学,好记性不如烂笔头,记录一下遇到的问题和解决方式吧,切莫反复踩坑。

在VFX中模拟Particle System的拉伸Billboard(Stretched Billboard)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当视角和平面夹角较大,会使其在Y轴方向有拉伸。

这个效果在VFX没有自带的模块,需要用脚本传入Y轴的拉伸值,直接接入到VFX文件的SetScale的Y轴上:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本来在VFX文件中计算就好了,但是VFX只能获取Scene中的Main Camera,如此,在Scene下就看不到效果了,调试很困难,于是写一个脚本计算Y轴拉伸,再传入VFX中:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using Sirenix.OdinInspector;

using UnityEngine.VFX;

 

[ExecuteAlways]

public class Camera_Angle_To_Effects_Stretch : MonoBehaviour

{

  public VisualEffect vfx;

  public Vector2 stretchRange = new Vector2(0.2f, 1f);

 

  private Camera _camera{

​    get{

​      \#if UNITY_EDITOR

​      return UnityEditor.SceneView.lastActiveSceneView.camera;

​      \#else

​      return Camera.main;

​      \#endif

​    }

  }

 

  private void Update() {

​    setValue();

  }

  public void setValue(){

​    vfx.SetFloat("Y轴拉伸", Yrotate2Strech(_camera.transform.eulerAngles.y));

  }

 

  private float Yrotate2Strech(float eulerAnglesY){

​    eulerAnglesY %= 180;

​    float strech = Mathf.Lerp(stretchRange.x, stretchRange.y, Mathf.Abs(Mathf.Sin(eulerAnglesY * Mathf.Deg2Rad)));

​    return strech;

  }

 

}

如此便能做到类似的效果。

在VFX中使用Particle System中的噪声——Turbulence、湍流

使用Turbulence(湍流)节点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在VFX中模拟Particle System中的随距离发射

这一点在原版中很容易实现:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是VFX中需要以下操作:

\1. 在发射器中加入随距离发射

\2. 把Local空间的原点、也就是特效物体在Scene中显示的轴心位置,转换到世界空间,然后传入发射器的Position接入口。

\3. 初始化时,更改粒子的位置到本地空间的原点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

【待完善】关于粒子贴花

和URP笔记中记录的贴花很像,在制作一些需要贴地的效果、如:地裂、地面灼烧痕迹时有用,因为其可以适配地形。

在VFX中,OutPut节点类里有一种就是贴花输出节点,可以用此输出节点来制作贴花效果。

我认为目前贴花效果存在一些根本问题。如果我想制作地裂,同时地裂的上方有玩家或者怪物,那么贴花会把效果也投射到玩家或怪物身上,造成穿帮。

关于这一点,必然是有解决办法的,但是目前从组件的面板来看我没有找到,需要再学习。

……待补充

在VFX中实现Particle System中的拖尾

在原版中,拖尾有以下属性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

挑些比较重要的聊一聊:

l Mode:有粒子和丝带两种。粒子模式是常用的模式,类似一个子发射器,当父粒子运动,拖尾就会根据父粒子运动的距离产生粒子。丝带模式没有用过,感觉很混乱。粒子之间会被直线的Quad连接。

l LifeTime:拖尾粒子的生命周期,直接决定了拖尾的长度,因为如果生命短,留存的就短,看上去粒子的拖尾自然就短了。

l Minimum Vertex Distance:最小顶点距离。不是说它是子发射器吗,那么运动多远才产生新的粒子,就是由这个参数决定。如果值很大,会导致拖尾新顶点产生稀疏,在一些高频变化的场合会出现走样。但是如果值很小,又会导致产生太多拖尾粒子,造成性能开销。

l Texture Mode:纹理模式,一般来说都是用拉伸的模式。不知道底层是怎么实现的,但是可以这么理解:

所有的拖尾粒子所覆盖的区域,作为一整个Mesh片,然后Texture Mode决定这个Mesh中贴图的Tilling。

在VFX中,没有做好的模块,需要使用GPU事件来制作拖尾,基本的思路为:

生成头粒子 ——> 在头粒子的Update中添加触发器 ——> 使用该触发器输出的GPU事件发射拖尾粒子(拖尾粒子系统的类型需要为Strip、即条带,可以通过Ribbon的模板创建) ——> 使用拖尾粒子系统的context控制拖尾的性质

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Strip模板的粒子系统类似原版的拉伸的纹理模式,如果需要调整个拖尾的Tilling,可以换节点的输出节点的UV模式到Scale。

再来聊一下如何做到类似原Trail系统的更改:

l 更改拖尾粒子的密度:对应原系统的Minimum Vertex Distance参数的修改,其修改方法为:在头粒子的触发器中,更改触发率:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里有随时间和随距离两种模式,估计Rate的单位是每秒或者每米(这是不合逻辑的,因为触发器在UpadateContext中,每帧执行一次)

发射粒子的频率越高,拖尾条带也越顺滑,但是性能的开销也越大。

l 调拖尾长度的逻辑和原版一样,拖尾粒子的寿命直接决定拖尾的长短。

l 例子拖尾默认并每不会连接上头粒子,因为缺少一步位置的继承:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

很多属性可以使用Inherit关键字来从头粒子获取。

由于拖尾粒子的特殊的条带渲染模式,生命周期的属性实际表现为对应到拖尾长度的表现。

如我把拖尾粒子的生命周期颜色改为前白后黑,那么表现为拖尾离头粒子近处白远处黑。这很好理解,不多赘述。直接记住这一点可以加快某些效果的分析过程。

【待完善】在VFX中实现子发射器

原版:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

子发射器很好理解,就是以父粒子为中心,开始发射一个新的子粒子系统。

有一个条件控制什么时候发射,官方的有以下几种:

……

生成Shader时,出现无法打开包的问题

Output Particle Quad’: Couldn’t open include file ‘Packages/com.unity.visualeffectgraph/Shaders/VFXCommon.hlsl’

环境:

Unity 2021.3.4f1

VFX12.1.7

这是Unity的Bug,在Player Setting中的安卓的图形API中删去OpenGLSE即可

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


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

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

相关文章

PENDLE会是打响LSDFI赛道的第一枪吗?以bitget钱包为例

Pendle Finance是什么? PENDLE是Pendle Finance的原生通证,因此,在介绍Pendle币之前,我们需要对Pendle Finance有一个简单的了解。、 Pendle是一个建立在以太坊区块链上的无需许可的去中心化金融(DeFi)协议&#xff…

长三角智能科技高端盛会—南京人工智能展览会(南京智博会)

南京,作为一座历史悠久的文化名城,早已不仅仅以其深厚的文化底蕴和独特的自然风貌著称于世。而今,这座古老而又年轻的城市,正以其卓越的科技实力和创新精神,成为中国乃至全球科研领域的一颗璀璨明珠。南京不仅是中国三…

打造高质感的电子画册,这篇文章告诉你

​在数字化时代,电子画册作为一种全新的视觉传达方式,正逐渐成为各行各业展示形象、传播信息的重要工具。相较于传统的纸质画册,电子画册具有更高的质感、更好的互动性以及更低的制作成本,使得它愈发受到众多企业的青睐。那样怎么…

【umi-max】初识 antd pro

修改端口号 根目录下的 .env 文件: PORT8888目录结构 (umijs.org) 新增页面 在 umirc.ts 中进行配置。 新增页面 - Ant Design Pro 这里有一个配置 icon:string,可以在菜单加 icon 图标,默认使用 antd 的 icon 名,默认不适用二…

pands使用openpyxl引擎实现EXCEL条件格式

通过python的openpyxl库,实现公式条件格式。 实现内容:D列单元格不等于E列同行单元格时标红。 #重点是formula后面的公式不需要“”号。 from openpyxl.styles import Color, PatternFill, Font, Border from openpyxl.styles.differential import Dif…

记录深度学习GPU配置,下载CUDA与cuDnn

目标下载: cuda 11.0.1_451.22 win10.exe cudnn-11.0-windows-x64-v8.0.2.39.zip cuda历史版本网址 CUDA Toolkit Archive | NVIDIA Developer 自己下载过11.0.1版本 点击下载local版本,本地安装,有2个多GB,很大,我不喜欢network版本,容易掉线 cuDnn https://developer.nvi…

selenium源码学习

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Zookeeper的watch 机制

Watch机制介绍 我们可以把Watch理解成是注册在特定Znode上的触发器。当这个Znode发生改变,也就是调用了create,delete,setData方法的时候,将会触发Znode上注册的对应事件,请求Watch的客户端会收到异步通知 ZooKeeper…

基于LLM的优化器评测-非凸函数

基于LLM的优化器评测-非凸函数 目标函数测试结果测试代码测试日志 背景: ​ 很多时候我们需要为系统寻找最优的超参.比如模型训练,推理的量化等.本文尝试将LLM当成优化器,帮忙我们寻找最优的超参. 验证方法: 1.设计一个已知最优解的多项式,该多项式有3个变量(因为3个变量可以…

深度解析Java 11核心新特性

码到三十五 &#xff1a; 个人主页 < 免责声明 > 避免对文章进行过度解读&#xff0c;因为每个人的知识结构和认知背景都不同&#xff0c;没有一种通用的解决方案。对于文章观点&#xff0c;不必急于评判。融入其中&#xff0c;审视自我&#xff0c;尝试从旁观者角度认清…

基于python flask +pyecharts实现的气象数据可视化分析大屏

背景 气象数据可视化分析大屏基于Python Flask和Pyecharts技术&#xff0c;旨在通过图表展示气象数据的分析结果&#xff0c;提供直观的数据展示和分析功能。在当今信息化时代&#xff0c;气象数据的准确性和实时性对各行业具有重要意义。通过搭建气象数据可视化分析大屏&…

【Linux】Linux基本指令1

1.软件&#xff0c;OS&#xff0c;驱动 我们看看计算机的结构层次 1.1.操作系统 操作系统是一款做 软硬件管理 的软件 操作系统&#xff08;计算机管理控制程序&#xff09;_百度百科 (baidu.com) 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&a…

60. UE5 RPG 使用场景查询系统(EQS,Environment Query System)实现远程敌人寻找攻击位置

UE的Environment Query System&#xff08;EQS&#xff09;是环境查询系统&#xff0c;它是UE4和UE5中用于AI决策制定过程中的数据采集和处理的一个强大工具。EQS可以收集场景中相关的数据&#xff0c;利用生成器&#xff08;Generator&#xff09;针对用户的测试&#xff08;T…

身份认证页面该怎么设计更加合理?

一、认证页面的作用 认证页面在应用程序中具有以下几个重要的作用&#xff1a; 验证用户身份&#xff1a;认证页面的主要作用是验证用户的身份。通过要求用户提供正确的凭据&#xff08;如用户名和密码、生物特征、验证码等&#xff09;&#xff0c;认证页面可以确认用户是合法…

安卓开机启动阶段

目录 概述一、boot_progress_start二、boot_progress_preload_start三、boot_progress_preload_end四、boot_progress_system_run五、boot_progress_pms_start六、boot_progress_pms_system_scan_start七、boot_progress_pms_data_scan_start八、boot_progress_pms_scan_end九、…

Docker(三) 容器管理

1 容器管理概述 Docker 的容器管理可以通过 Docker CLI 命令行工具来完成。Docker 提供了丰富的命令&#xff0c;用于管理容器的创建、启动、停止、删除、暂停、恢复等操作。 以下是一些常用的 Docker 容器命令&#xff1a; 1、docker run&#xff1a;用于创建并启动一个容器。…

ubuntu22.04安装调节显示器亮度工具

1 介绍 软件名叫 DDC/CI control&#xff0c;官网 2 安装方法 sudo apt install intltool i2c-tools libxml2-dev libpci-dev libgtk2.0-dev liblzma-dev3 效果 进入软件&#xff0c;忽略告警信息

selenium 学习笔记(一)

pip的安装 新建一个txt curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 把上面的代码复制进去后&#xff0c;把后缀名改为.bat然后双击运行 当前目录会出现一个这个文件 然后在命令行pyhon get-pip.py等它下好就可以了selenium安装 需要安装到工程目…

【进程空间】通过页表寻址的过程

文章目录 前言介绍页表、页框、页目录的概念页框页表页目录页表和页目录的分配 一级页表和二级页表一级页表寻址过程 二级页表寻址过程 一级页表和二级页表的对比 前言 我们知道每个进程都有属于自己的虚拟地址空间&#xff0c;且每个进程的虚拟地址都是统一的。要想通过虚拟地…

OrangePi AIpro测评:智能与创新的完美结合

OrangePi AIpro上手指南 简介 香橙派与华为合作发布的香橙派AiPro为Ai主力&#xff0c;为边缘设备的Ai计算提供了可能。 集成图形处理器&#xff0c;拥有8GB/16GB LPDDR4X&#xff08;我这个是8G内存版本的&#xff09;&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&a…