It is an reading note of UE5 Niagara Advanced Example, related about usage of Simulation Stage, Grid 3D, PBD, SDF and so on.
The article can’t cover all details, it just a reading note. Implementation details are so complex that it is recommended to have a look on original source.
In offical showcase project ContentExample, you can see detailed comment in Niagara System examples.
Niagara_Particles level is about basic of Niagara, here we assume readers have read it. This article mostly focus on Niagara_Advanced_Particles level.
There is also some offical tutorial:
Advanced Niagara Effects Inside Unreal
1.1 What is simulation stage
Niagara System: FIllRenderTarget.
If you need custom lifetime hook, that is my personal understanding, or in their way, stack, you should add Simulation Stage.
Enable Simulation Stages on a GPU emitter by checking “Enable Simulation Stages” in advanced emitter properties
That is weird, I can’t find Enable Simulation Stages in emitter properties, even in their example. So I leave it alone.
You can’t create a lifetime for arbitrary usage, UE set Simulation Stage is a For loop.
Think of a simulation stage as an additional “stack” like Particle Update. The difference is it can iterate, meaning run multiple times on a single frame across all the elements in it.Think of it like a “For Loop” in the stack.
It is also unique because its “Iteration source” can be more than just particles. A Simulation Stage can iterate over every grid cell in a Grid 2d collection to create solvers, iterate over every pixel in a render target to write to it, or iterate over every particle.
Then you know:
-
Simulation Stageis likeParticle Update, it is called per frame. -
It is a basic operation
For loop.
As for this example, you can see how it iterate all texels of render target, calc UV of render target by iteration index, sample from a texture according to this UV.
Once you know this, you will know the input and output of Simulation Stage. Input is your Niagara System parameters, and you can expose some build-in anyway. Output is void. So Simulation Stage is a function void update(user parameters).
1.2 Advect 2d Collection
Niagara System: AdvectGrid.
This example is mainly about how to sample from 2D Texture and store it into RenderTarget.
If you need some cool effect, fill RenderTarget and change sampling UV or something in Simulation Stage.
Considering adverting fluid-like emitter, I guessed it is implementing famous paper Stable Fluid at the first time. But after I click into the emitter, I found it only have two steps: diffuse and advect. These two module are completely different from what I know from Stable Fluid. Diffusion is made by simply averaging nearby four grids, advection is made by random UV offset, or in other word, random advection velocity.
How to expose variable in module to Niagara System
When I try to reproduce the work, I find my new variable created in module doesn’t appear in Niagara System Parameters window. After several tries, I find the reason that new variable must be a pin of Map get or Map set, only then it can appear in Niagara System Parameters window.
I don’t know clearly why. Maybe it is a optimation by UE, that variable which reference =

本文介绍了如何在UnrealEngine5的Niagara系统中使用SimulationStage、Grid3D、PBD和SDF等技术进行高级粒子效果的创建,包括定制生命周期、纹理采样、渲染目标操作以及与外部系统交互等内容。
最低0.47元/天 解锁文章
2132

被折叠的 条评论
为什么被折叠?



