Unreal 5 官方在Niagara里模拟大型群体笔记

news2024/12/25 8:54:52

官方视频地址:https://www.bilibili.com/video/BV1FX4y1T7z2/
如果需要,请查看官方视频。

性能测试

在讲解Niagara之前,视频首先做了一个性能测试,首先放置了100个AI角色,可以想目标角色移动的ai,然后测试了400个,接着是900个。100个的时候,性能还可以, 400个帧率降为30帧每秒,900个帧率只有10+。
接下来打开了`(1键左边的键),输入了stat unit,打开查看性能问题。
在这里插入图片描述
为了得到更多的信息,使用了Unreal Insights(官方文档有相关介绍)
检测发现性能下降的问题主要有两大块,一块是移动组件每帧循环耗费的性能,另一块是和骨骼网格体相关的运算。
然后再进行测试,通过关闭某些功能查看性能:

  1. 关闭骨骼网格体更新,帧率较之前提升一倍,达到了20
  2. 关闭移动组件,帧率飙升到了60
  3. 开移动组件,关闭物理碰撞检测 20+

接下来抛出了需求,希望士兵和方块有交互,能够移动并且有动画。
然后告诉我们理解瓶颈在哪里,是cpu还是gpu或者drawcall,不要无脑考虑全优化,一定要多分析。
如果面数太多,使用lod,可以减少骨骼网格体的面数,来减少运算,打开骨骼模型蒙皮,在lod设置这里设置自动lod,修改lod层数
在这里插入图片描述
Lod设置可以点击生成一个设置,在里面调整相关内容
加粗样式
在中间显示区域,缩小模型,可以查看lod的变化,当前模型占用屏幕大小,以及当前模型的三角面数以及顶点数。
在这里插入图片描述
你也可以直接选择层级查看,我直接查看最后一层,发现轮廓很差,但是对于离得很远,已经够用了。面数和顶点数量和之前相比已经少了很多。
在这里插入图片描述
如果需要计算的骨骼网格体太多,需要使用Animation Budget Allocator(动画预算分配器),它会动态管理网格体。现在没需求,就没研究。
如果阴影性能差,使用级联阴影,或者使用胶囊体阴影。
如果actor生成太慢,可以考虑使用对象池,进行复用,可以大大简化内存分配过程,另一个方法就是跨多个帧生成,需要使用c++实现,或者在蓝图中使用延迟节点,每个延迟0秒生成(延迟0秒其实就是延迟一帧的时间)
如果小兵太多,就使用群集话,制作小组进行行动。
如果物理碰撞不需要则关闭,如果需要,可以在主角一定距离内再开启。
如果drawcall太多,可以使用Animation Sharing Manager(动画共享管理器)降低成本。
对ai进行分级,高级ai就是我们默认制作的,中级ai就是简单的动画低模,低级ai只需要让玩家有个感觉就行。
然后解说的话可以替换掉中级ai,让远平面最大化,实现几十万的模型。就是说,他修改的是中距离和远距离的模型,实现大批量的渲染。

使用顶点动画替代骨骼网格体动画

顶点动画其实就使用贴图记录顶点的变换位置,来实现模型的动画,替换掉原来的那一套骨骼蒙皮动画。这种好处是去掉了每个顶点位置需要通过骨骼变换去计算了过程,大大减少了运算。
然后介绍了官方的3dmax骨骼转顶点动画工具
https://docs.unrealengine.com/5.1/zh-CN/vertex-animation-tool-in-unreal-engine/
这里我没有使用,本人3dmax的功底差,索性直接购买了flocks插件,直接可以在虚幻引擎内部直接烘焙出相应的模型和动画。

创建Niagara

鼠标右键 FX,找到Niagara系统,可以创建一个Niagara
在这里插入图片描述
打开Niagara,鼠标右键创建一个新的发射器
在这里插入图片描述
然后输入empty,创建一个空的发谁
在这里插入图片描述
空的发射器里面也带有一些相关内容
在这里插入图片描述
然后将含有的粒子生成组件和渲染粒子删除掉
在这里插入图片描述
在渲染添加一个模型渲染MeshRender
在这里插入图片描述
在右侧选择自己需要渲染的模型
在这里插入图片描述
在发射器生成这里,添加一个Spawn Burst Instantaneous,这个节点的大概意思就是粒子生成时需要生成粒子个数
在这里插入图片描述
将其生成个数设置为1
在这里插入图片描述
选择粒子更新里面的粒子状态
在这里插入图片描述
将Kill Particles When Lifetime Has Elapsed(生命周期结束时删除粒子)设置为false
在这里插入图片描述
然后选择整个发射器,找到右边的循环模式,设置为自身,循环行为只有一次,并且无限循环下去,这样,就可以实现自身的长期存在。
在这里插入图片描述

创建Niagara可视化脚本

接下来视频讲解了如何去更新在Niagara里更新静态模型网格体。使用Niagara内的新的可视化脚本去更新。这个英文名称为New Scratch Pad Module
在这里插入图片描述
打开以后是这个效果
在这里插入图片描述
然后他使用了一个在Niagara中运行的脚本,我们可以在FX里面找到并创建
在这里插入图片描述
使用的这个不是在虚幻引擎中内置的,大家应该在别的项目里面找到,他这个节点的主要作用是根据你设置的状态,和设置的帧,去播放相应动画的帧动画。
在这里插入图片描述

这里需要说的是新版的节点没有了if,而是改成了选择switch节点。区别就是更清晰让你自动连的啥。
在这里插入图片描述
这个函数一共返回了三个值,分别是当前模型需要渲染的帧,当前模型存在的时间,以及当前模型播放的哪个动画
在这里插入图片描述
由于每个粒子的状态不同,所以使用了粒子空间,让粒子保持独立,只能在当前粒子使用
在这里插入图片描述
然后在粒子属性里可以看到输出的这三个值,并将粒子存在时间这个拖入,保证了循环
在这里插入图片描述
Play Animation的播放速度和每秒帧率这两个值直接拖入到左侧,让我们可以在外部手动输入值来确定。
在这里插入图片描述
模块输入这里会出现这两个值
在这里插入图片描述
选中在右侧面板这里可以设置默认值
在这里插入图片描述
然后又将状态设置到了上一个状态,下面直接设置了默认值。
在这里插入图片描述
然后在粒子更新增加一个动态材质配置
在这里插入图片描述
右侧会显示材质可以配置的动态配置属性,然后将粒子的属性AnimationFrame拖拽到相应的属性后面,运行时会自动传递到材质上面。
在这里插入图片描述
实现动态材质属性的传递,你需要在编辑材质时,使用Dynamic Parameter节点去设置,每个节点可以传递四个数据。
在这里插入图片描述
材质也别忘记勾选,可以使用Niagara网格体粒子
在这里插入图片描述

增加多个实例

修改发生器更新里面的Spawn Burst Instantaneous里面的数量改为4,其实就生成了四个
在这里插入图片描述
在粒子生成这里增加一个组件为Shape Location,在一个形状里面生成位置。
在这里插入图片描述
形状旋转box,然后设置长宽,高度为0,那么都会生成在一个平面上,或者直接使用平面也可以,这里和视频里面的设置有区别的。
在这里插入图片描述
但是也可以看到一样的效果
在这里插入图片描述
为了保证动画的随机,将粒子的属性拖拽到粒子生成这里
在这里插入图片描述
已经播放的时间进行了一个范围和随机,其实就是生成的粒子不会都在一帧动画内开始播放。
在这里插入图片描述
如何随机动画,则是在刚才的暂存区块里面进行逻辑判断,这里也是知道为什么要修改掉这个节点的地方,选择的类型判断可以不光传入布尔类型,还可以传入整数,直接根据状态整数,设置开始帧和结束帧。
在这里插入图片描述
然后在外部进行范围内整数随机,你就会看到每个模型播放的动画都不一样,或者是播放的帧不一样
在这里插入图片描述
到这里,就实现了动画状态随机和动画帧随机
在这里插入图片描述

案例介绍

做到这里,视频就开始对当前的Niagara的案例进行介绍我这里就不在写了。

debug调试

我这个版本的的调试面板更新了,可以更方便的调试(5.1)
在这里插入图片描述
你只需要在属性上面选择 在Niagara调试器中观看参数
在这里插入图片描述
就可以生成相应的数据面板进行查看。
在这里插入图片描述

粒子的lod

他的实现是设置了三个渲染,然后设置了相关显示状态
在这里插入图片描述
然后在可视化脚本里面判断粒子和相机的距离,按距离设置不同的标签数值
在这里插入图片描述
高中低三层,中层使用低模,底层直接使用了粒子去渲染的,而且值制作了一个序列帧动画,然后播放序列帧动画实现
在这里插入图片描述

蓝图和Niagara之间的通信

视频里面就讲了过程,也没有相关工程,先截一张工程的图吧
这个其实就是获取到Niagara组件,然后调用里面的方法。这里面它会将粒子系统所需要的数据发送过去。然后你在Niagara组件里面,设置相应的参数,然后根据参数更新粒子。
在这里插入图片描述
然后Niagara内调用蓝图的回调这里没看懂,有看懂的小伙伴记得教教我
在这里插入图片描述
然后就触发了Niagara的事件回调
在这里插入图片描述
就实现了通信,暂且还不知道这个通信如何实现。

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

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

相关文章

C语言:猜凶手

题目: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。…

山西电力市场日前价格预测【2023-07-03】

日前价格预测 预测明日(2023-07-03)山西电力市场全天平均日前电价为333.50元/MWh。其中,最高日前电价为398.66元/MWh,预计出现在15: 15。最低日前电价为280.73元/MWh,预计出现在24: 00。 以上预测仅供学习参考&#x…

Spring第一讲:Spring基础概念和环境搭建

一、Spring是什么 Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 Spring 自诞生以来备受青睐,一直被广大开发…

二叉树各种函数的实现

如果你觉得迷茫,那就尽可能选择比较困难的路。 目录 前言: 🍀一.通过前序遍历创建二叉树 🍁二.二叉树的四种遍历 🍂1.二叉树的前序遍历 🌼2.二叉树的中序遍历 🍌3.二叉树的后序遍历 …

Mac VSCode配置运行单个C++文件

题外话:VSCode一键整理代码快捷键:ShiftoptionF 方法一:命令行直接编译 g -o 想创建的可执行文件名 ./cpp文件名 ./可执行文件名 以test.cpp为例,我创建的可执行文件名为test,运行结果如下: 方法二&#…

SpringCloud-Nacos配置管理

文章目录 Nacos配置管理统一配置管理在nacos中添加配置文件从微服务拉取配置 配置热更新方式一方式二 配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3)运行两个UserApplication,使用不同的profile3)运…

React教程(由浅到深)

文章目录 1. 基本语法1.1 初体验Hello React1.2 JSX语法的基本使用1.2.1 语句与表达式说明 1.3. React面向组件编程1.3.1 函数组件与类组件 1.4 组件实例的三大特性1.4.1 state数据存储状态1.4.2 props的使用1.4.2.1基本使用1.4.2.2 做限制类型,默认值使用1.4.2.3 简…

2、boostrap 多数据类型表单

fileinput 视频图片文本数据表单 插件下载地址&#xff1a;https://github.com/kartik-v/bootstrap-fileinput/ 1、多类型数据from测试 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</tit…

Jeston Xavier NX 模块将系统迁移到NVME存储

大家好&#xff0c;我是虎哥&#xff0c;最近完成了自己设计的第一个Xavier NX的载板设计和打样&#xff0c;虽然还有一些小的不完善的地方&#xff0c;但是可以正常使用&#xff0c;这里记录和分享一下我自己设计的载板上如何实现系统迁移。 我自己使用SDK Manager 安装了所有…

c# Invoke使用

在多线程编程中&#xff0c;我们经常要在工作线程中去更新界面显示&#xff0c;而在多线程中直接调用界面控件的方法是错误的做法&#xff0c;Invoke 和 BeginInvoke 就是为了解决这个问题而出现的&#xff0c;使你在多线程中安全的更新界面显示。 正确的做法是将工作线程中涉…

青少年机器人技术一级考试备考重点(三):简单机械

随着机器人技术的飞速发展&#xff0c;越来越多的青少年开始关注并参与其中。青少年机器人技术考试作为一项评估学生机器人技术水平的重要考试&#xff0c;备受广大青少年和家长的关注。为了更好地备战青少年机器人技术一级考试&#xff0c;了解考试的学习要点和备考重点是非常…

【C++初阶】11. list的使用及模拟实现

1. list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素。list与…

清华青年AI自强作业hw5:基于CNN实现CIFAR10分类任务

清华青年AI自强作业hw5&#xff1a;基于CNN实现CIFAR10分类任务 简述作业实现遇到的问题相关链接 一起学AI系列博客&#xff1a;目录索引 简述 hw5作业为利用深度卷积神经网络实现CIFAR_10数据集十分类问题&#xff0c;帮助理解CNN的前向传播结构。 CIFAR-10是一个常用的彩色图…

现代处理器结构

本文翻译自&#xff1a;Modern Microprocessors A 90-Minute Guide!&#xff0c;&#xff0c;我认为原文是相当好的计算机体系结构方面的概述&#xff0c;与时代相结合是国内计算机课本普遍缺失的一环&#xff0c;本文可作为一个有效的补充&#xff0c;向原作者和其他译者表示感…

青岛大学_王卓老师【数据结构与算法】Week03_09_线性表的链式表示和实现9_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

软件测试面试-银行篇

今天参加了一场比较正式的面试&#xff0c;汇丰银行的视频面试。在这里把面试的流程记录一下&#xff0c;结果还不确定&#xff0c;但是面试也是自我学习和成长的过程&#xff0c;所以记录下来大家也可以互相探讨一下。 请你做一下自我介绍&#xff1f;&#xff08;汇丰要求英…

如何在VUE项目中使用svg图标

一文带你搞定svg图标的使用&#xff01; 文章目录 前言一、SVG相较于字体图标的优点二、使用步骤1.新建一个vue2项目2.安装项目依赖3 .在src目录下新建文件夹4.创建svg-icon组件5.在main.js中引入icons下的index.js6.配置 vue.config.js7.步骤完毕&#xff0c;检验成果 总结 前…

LoadRunner负载均衡与IP欺骗

目录 前言&#xff1a; 一、IP wizard 二、一个IP欺骗测试脚本 三、Controller与Runtime setting设置 四、mdrv.dat配置调整 五、查看实现效果 【结语】 前言&#xff1a; 在使用 LoadRunner 进行负载测试时&#xff0c;负载均衡和 IP 欺骗是两个重要的概念。 这次出差…

【UE Unreal Camera】【保姆级教程】手把手教你通过UE打开摄像头/预览图像画面

【UE Unreal Camera】【保姆级教程】手把手教你通过UE打开摄像头/预览图像画面 概述 最近在做一个游戏的开发&#xff0c;需要通过UE去打开用户的摄像头&#xff08;ios,android上的手机摄像头&#xff1b;windows,mac上的电脑摄像头&#xff09;&#xff0c;预览图像&#xf…

NLP(五十七)LangChain使用Google Search Agent

大模型存在的问题 大模型在给人带来眼前一亮的表现&#xff0c;深深地震撼各行各业人们的同时&#xff0c;其本身也存在着不少问题。   以OpenAI的ChatGPT模型为例&#xff0c;其存在的问题有&#xff1a; 事实错误&#xff0c;容易一本正经地胡说八道&#xff0c;造成幻觉问…