vault backup: 2024-02-20 13:30:31

This commit is contained in:
BlueRose 2024-02-20 13:30:31 +08:00
parent 8f94f5d76d
commit c85e482e37

View File

@ -0,0 +1,41 @@
---
title: Niagara Module笔记
date: 2024-02-20 11:14:46
excerpt:
tags:
rating: ⭐
---
# 前言
- UE4 Niagara源码解析:https://zhuanlan.zhihu.com/p/362638250
不论Niagara Emitter有多少的ModuleModule里有多少的脚本脚本中写了多少东西。我们当然要抓住本质数据其都是更新某个渲染器所需要的必要参数也就是如下图所示的信息。
![](https://pic4.zhimg.com/80/v2-46e1c558d019994e189f44cb96bd3e3b_720w.webp)
也就是说只有这些信息是每个渲染器所需要的其会传递给渲染线程并最终提交渲染。任何其他参数仅仅为中间变量。因此我们首先关心的是这个数据是存储在什么地方的。由于一个Emitter可以拥有多个不同的Renderer。因此其本身存储在Emitter级别而不是在Renderer级别。
因此我们最终传递给渲染线程的数据存储在每个Emitter实例FNiagaraEmitterInstance的FNiagaraDataSet身上。不论是GPU粒子还是CPU粒子。
![](https://pic3.zhimg.com/80/v2-6ec8d1bc1de249f2c872f9439b5782d6_720w.webp)
# Module 变量类型
- InputModule输入的变量。
- Local单帧内存在的变量。
- Particle粒子级别**持久存在**的变量。
- Emitter发射器级别**持久存在**的变量。
- Engine引擎提供的只读变量。
# 粒子属性读取
在Module中在ParticleAttributeReader中可以读取对应的例子属性。引用的数据的方式有两种粒子的ID或者Index索引。但是难就难在最初的我不太了解这两个是啥。大致知道是某种编号。ID的话倒是了解一点但不知道它结果分为Index 和Acquire Tag组合在一起的。
PS.**Niagara Debugger**工具可以用于检查粒子ID以及对应变量的变化情况。
# 其他
1. **发射器固定粒子ID**:勾选发射器上**RequiresPersistentIDs**选项即可固定。
#
Particle的Module都是c++级别写死的。基本位于`Engine\Source\Runtime\Engine\Classes\Particles`目录。基类为**UParticleModule**Niagara的Module都是蓝图资产引擎自带的都在 `Engine\Plugins\FX\Niagara\Content\Modules`。基类为**UNiagaraScript**。
- UNiagaraScriptBase定义了一些编译相关的接口。ModifyCompilationEnvironment()、ShouldCompile()以及获取模拟元数据接口GetSimulationStageMetaData()。
- UNiagaraScript排除掉Editor相关函数主要的函数为
- IsXXXScript()系列判断函数。
- 相关接口PreSave、Serialize、PostLoad基类接口实现。
- FNiagaraVMExecutableData相关
- 编译相关。
- 其他。