In this post, I’ll be continuing with my Niagara deep dive and going through the content examples in UE5!
Also! I got promoted from Associate Tech Artist to just Tech Artist! ✨
I found another great Niagara Overview talk from Wyeth Johnson: https://www.youtube.com/watch?v=bX6tdCdOEVA
- Most of the good stuff is at the end after16:38, going through the new features
Also found a good game dev beginner math presentation featuring Wyeth Johnson: https://www.youtube.com/watch?v=KrghZBIIsXc
- He goes into difference between clip space and screen space here: https://www.youtube.com/live/KrghZBIIsXc?si=IjP8ahe_tM_EFMfP&t=5920
2.1 Static Beams
- To view the parameters used in an emitter, you must click on the emitter. Otherwise, Niagara defaults to system level parameters only.
2.2 Dynamic Beams
Or is it? What does Absolute Beam End mean exactly? I checked the nodes:
Ok, next question – What is the coordinate space of simulation? How is it different than worldspace?
- Talked to my coworker, Justen, and came to the conclusion that local space is zeroed out position of the system.
- Simulation space is module specific which lets you offset simulations from local space. So it’s an additional local space that isn’t tied to the Niagara system.
Overview on making beams here: https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Niagara/HowTo/BeamEffect/
2.3 Multiple Renderers
- When using multiple renderers, properties of renderers can be customized using custom bindings
2.4 Location Events
- Events are CPU Emitter only (as of UE5.1, 8/17/2023)
- Is there a way to create this effect on the GPU?
2.6 Collision
- CPU collisions are expensive compared to GPU collisions – use sparingly!
- Collision generated events are CPU only
- Stackcontext.position?
A nice Beginner Niagara walkthrough: https://www.youtube.com/watch?v=T9pZTF_xB40
3.1 Static Mesh Sampling
3.3 Visibility Tag
- To assign different meshes to particles in a single mesh renderer, use the mesh array feature
- The visibility tag is when you want to pick between sprite, mesh, light, or other renderers
- How visibility tag works: The particle will render through the renderer with an index among the list of renderers that corresponds with the visibility tag number
3.4 Texture Sampling
- Texture Sampling is only supported on the GPU (as of 8/21/2023 UE5.1)
- Rejection Sampling? Kill Particles module doesn’t seem to change anything.
4.1 Play Audio Per Particle
4.2 Renderer with no Particles
- When Sprite and Mesh renderers have their source mode set to “Emitter”, the renderer can create a single sprite/mesh driven by emitter scripts. All particles namespace bindings also change to emitter namespace bindings.
4.3 Mesh Orientation vs. Rotational Force
Mesh Orientation: Inexpensive, rotational drag has no effect
Rotational Force: Requires Mass to be set per particle, more expensive and good for a more realistic simulation model
- Mesh Velocity/Drag: We can give a rotational kick with Rotation Force in Particle Spawn and add drag in Particle Update
- Rotation Force: Consistent force can be applied with the Rotation Force Module placed in Particle Update
Whew, that concludes the Niagara Particles Content Examples!
I feel like I have a general understanding of how Niagara is set up and its capabilities.
Now to go on to the fancier stuff in Niagara Advanced Particles and Niagara Fluids. It’s a big goal for me to understand the content examples in these halls. It’ll be highly beneficial for optimization, especially for VR development.
1.1 Simulation Stage Fill Render Target
- What is a simulation stage? A simulation stage is a “stack” like Particle Update which you can add to the total stack. It is unique because it can run multiple times in a single frame across all elements in it – like a “For Loop” that runs within the stack. Thus, it is perfect for simulations.
- Sprite Properties need to be set at the emitter level since our renderer source mode is set to emitter – there are no particles, so no sprite properties can be changed on the particle level.
- In this context, Exec Index means the iteration source element, i.e. a render target cell, grid 2d cell, etc.
- In Sprite Renderer: Material Bindings Parameter, assign Render Target –> Texture Object Parameter in Sprite Material
1.2 Advection
This is getting tough, here’s an in depth video from dokipen: https://www.youtube.com/watch?v=PCA5jQwFvug&t=1s
- Niagara dimensions corresponds with cm’s in the real world
- Why use the “Stackcontext” namespace instead of “Local” in a simulation stage? Stackcontext remains consistent over the stack, while local is per thread of the simulation stage.
- Stackcontext: Local to the Stack. Can be written and read from module to module. Persist over frames and stages.
- Transient: Local to the Stackcontext. Can be written and read from module to module. Does not persist over frames or stages.
Still confused over Stackcontext vs. Transient namespace. Will overlook for now.
~~~
💡IMPORTANT: Niagara is a bit outdated in dokipen’s video. In the current 5.1 Niagara you need to set resolution through an additional module.
This is a great tutorial on Grid2D to render target from Chris Zuko where I learned about the set resolution module: https://chriszuko.com/niagara-grid-2d-feels-like-a-superpower-drawing-locations-to-a-render-target-in-unreal-5-1/
I went through this tutorial previously once and understood maybe 50% of what was going on (lol)
The same thing as above in the scratch module using material nodes to explain visually:
Finished going through that video! Whew…took another look through the advection example in the content library and it makes way more sense to me now.
Feel like this is a good place to stop for now.
Onwards and Upwards!
Tech Art Diaries 02
In this post, I’ll be continuing with my Niagara deep dive and going through the content examples in UE5! Also! I got promoted from Associate Tech Artist to just Tech Artist! ✨ I found another great Niagara Overview talk from Wyeth Johnson: https://www.youtube.com/watch?v=bX6tdCdOEVA Most of the good stuff is at the end after16:38, going through…
Tech Art Diaries 01
It’s August of 2023 now, pretty much one year since I started my job in July as an Associate Technical Artist at Polyarc Games! I am now 24 years old and more knowledgeable about shaders, Blueprints, working on a team, and Unreal Engine than I was a year ago… I’ve got some topics I want…