[UE5] Taking a Look at the NOVA Shader
❄️To Build the Master Material
Recently, I posted on X about preparing a Master Material for UE5 specifically for students and VFX beginners, and I was thrilled to receive so many likes! ☺️
I’m currently in the middle of building the base material, and while it’s starting to take shape based on my own experience of what’s "essential," I decided to look into "NOVA Shader" for inspiration. For those who don't know, it's a general-purpose shader for VFX artists in Unity.
❄️What is NOVA Shader?

< https://github.com/CyberAgentGameEntertainment/NovaShader/blob/main/README.md >
It is a multi-functional shader for Unity's Particle System, released for free on GitHub by CyberAgent. It packs a wide range of common features needed for VFX production in Unity.
It is under the MIT License, so it can be used for commercial projects, modified, and redistributed freely. It is truly wonderful that this is available for use in actual game development ✨.
I will start by checking the features introduced in this video to see what NOVA Shader is all about.
🧩Custom Vertex Streams Integration
It is explained as "a Unity feature that allows passing values from the Particle System to the material, enabling things like curve animations." Since it seems to handle various types of information as vertex attributes, I wonder if it’s like a more versatile version of what we call "Dynamic Parameters" in UE. Dynamic Parameters are limited to a Vector4, after all...
In UE, we are familiar with Particle Color and Dynamic Parameters. It’s important to keep in mind that without using these particle-specific nodes, you can't achieve results where values differ for each individual particle.

🧩Flipbook (with Blending)
It seems that NOVA Shader supports blending between frames.
In UE, you need to use the Particle SubUV node instead of the standard Texture Sample node for texture sampling to enable blending, so that’s something to keep in mind.

🧩Multiplicative Coloring
It seems that they use the term "multiplicative color" (乗算色) because coloring is primarily done using Multiply. They also mentioned "coloring the rim," which in UE could be achieved by repurposing Fresnel for the Emissive Color.
Additionally, it seems possible to choose between using a single color or a texture. I wonder if it might be better to reduce material branching by using a pure white texture instead of a solid color... what do people think?
They also mentioned that 3D textures can be used, but since I have only tried them for things like 3D noise for volumetric fog, I’d like to know more about how they can be utilized.
🧩Flow Maps
It was mentioned that "they don't always have to be animated; if kept static, they can simply be used for distortion effects." Since I had always thought of them only as a technique for animation, this was a real eye-opener for me...
In an ideal world, UV distortion would use Flow Maps or Normal Maps to allow for movement in any direction, rather than just using grayscale textures. But that often comes at the cost of versatility.
Adding support for Flow Maps means requiring dedicated textures, which raises the bar for practical use. It also tends to make the texture data size a bit more "rich" (heavy)...
🧩Emission
The explanation was a bit unclear, so I'm not entirely sure if I caught it right, but I wonder if "gradient map" refers to applying color to a grayscale texture? As for the "edge" feature, it seems to achieve the same effect as making the edges glow in a dissolve effect.
🧩Dissolve
Dissolve is a staple feature in VFX. While I think having an emissive edge is essential when you want to clearly define the silhouette with color, I also feel like there are fewer occasions to use it than one might expect.
🧩Fade
In NOVA Shader's dissolve, it seems you can determine a gradient width rather than just clipping the alpha with a threshold like a Step function. Since that sounds quite similar to how a dissolve works, I wasn't entirely sure what the actual difference was...
🧩Distortion
In UE, we usually express this using Refraction, don't we? When we say "distortion," it’s easy to misunderstand it as distorting the UVs of a texture, but it’s a tricky term because using it to mean "distorting the screen" is also correct.
The video explains that the Distortion shader is a separate shader from the multi-functional one. In the Master Material I’m preparing, I’ve also kept Refraction as a dedicated material. This is because, in VFX, we rarely need to apply color to the refraction itself. If you want to represent something like glass or ice, it’s better to create a specific material for those.
🧩Impressions from the Demo Video
My impression is that this shader is designed with actual game production in mind. It seems the basic workflow is for a programmer to integrate it into development and customize it as needed, then provide it to artists who can simply use it.
In my case, however, my stance is reflected a bit differently. Rather than saying, "Please use this in your actual production," I want to help UE beginners avoid the need to build materials from scratch, while also providing something useful for learning how to create materials or for customizing to one's own liking.
In that sense, it seems that if you want to tailor NOVA Shader to your personal preference, you would need to write HLSL. In UE, the Material Editor allows you to visually modify materials without coding, so I think it would be good to provide a rich set of Material Functions. This way, those who are familiar with handling materials can "swap or add logic as they please."
As for the features, it seems to cover all the standard essentials. However, since there were several features not mentioned in the video (such as Soft Particles and Distance Fade), I’d like to dig a little deeper into the functionality of NOVA Shader!
❄️NOVA Shader’s Architecture
First, a quick disclaimer: I only have a little experience making effects in Unity from back when "Shuriken" was the only option, and I’m not familiar with the current state of Unity at all. Because of that, I didn't actually open NOVA Shader in Unity. Instead, I checked it by asking "Chappy-kun" (a Japanese nickname for ChatGPT) questions while providing the GitHub URL.
If I’ve written anything incorrect, I’d love to be corrected, so please let me know!
🧩Five Master Materials
According to Chappy-kun, NOVA Shader consists of these five master materials:
- Nova/Particles/UberUnlit: Base set / No lighting
- Nova/Particles/UberLit: Base set / With lighting
- Nova/Particles/Distortion: Refraction
- Nova/UIParticles/UberUnlit: Base set for UI / No lighting
- Nova/UIParticles/UberLit: Base set for UI / With lighting
🧩Provided Features
I had Chappy-kun list the features based on the GitHub repository.
Common Features
- Texture enabled (BaseMap)
- Vertex Color support
- Flipbook (UV Animation)
- UV Scroll
- Distortion (Warping) *Sometimes available in Unlit as well
- Fade (Distance / Soft Particles)
- Blend Mode switching (Additive / Alpha, etc.)
- Alpha Clip
- Normal Map (Mainly for Lit)
UberUnlit (General-purpose / No Lighting)
- Lighting: ❌
- Emissive Intensity
- Fresnel
- Dissolve
- Distortion (Optional)
👉 The closest thing to a "Full-featured VFX shader"
UberLit (General-purpose / With Lighting)
- Lighting: ⭕ (Simple PBR)
- Normal Map ON/OFF
- Specular ON/OFF
- Light Influence ON/OFF
- Ambient Light Influence
👉 A version of Unlit with lighting features added
Distortion (Warping only)
- Distortion: ⭕ (Main feature)
- Mask ON/OFF
- Intensity control
- UV distortion animation
👉 Essentially a "Refraction-only material"
❄️Things that caught my eye in NOVA Shader
I’ve picked out a few points that caught my interest and ran them by Chappy-kun to get his take. However, please keep in mind that there’s a good chance Chappy-kun might be "hallucinating" (lying), or that my way of asking questions led to some misunderstood answers... so take this with a grain of salt!
🧩Blend Mode Switching (Additive / Alpha, etc.)
Just like in UE, Blend Modes in NOVA Shader seem to be fixed within the shader. Even though you can "switch" them, it appears the UI handles multiple internal shaders and swaps them out under the hood.
In UE, we can change the Blend Mode via Material Property Overrides in a Material Instance. However, I’m still debating whether I should let users switch it there, or if I should provide separate Master Materials for each Blend Mode... it's a tough call.

🧩Render Face
It seems you can choose from three types: Front Face (single-sided), Back Face (single-sided), or Double-Sided.
This is quite a handy feature to have. In UE, if you set the material to Double-Sided and use the TwoSidedSign node, you can treat the front and back surfaces differently. For example, you can use it in the Opacity channel to specify different transparency levels for each side, which gives you a lot of control.

🧩ZWrite
I assume this refers to whether or not to write to the depth buffer. In VFX, it’s common to write depth for things like water where characters might be submerged, or when you want Depth of Field (DOF) to work properly. In UE, there is a flag called "Output Depth and Velocity" for this.

🧩ZTest
In UE, there is a flag called "Disable Depth Test" in the material settings, which we use occasionally. However, since it's a relatively rare use case, I suspect that enabling this would likely result in a more specialized, unique material rather than being a standard feature of a general-purpose one.

🧩Vertex Deformation
It’s great to see that vertex deformation features are well-supported! The implementation seems quite orthodox, where a specified texture controls the strength of vertex displacement along the normals.
In UE, you can achieve the same result by using World Position Offset (WPO).

🧩Is Flipbook Playback Implemented on the Material Side?
Unity's Particle System apparently has a feature called "Texture Sheet Animation," so I was curious why it was implemented within NOVA Shader itself. I wonder if it’s to make up for missing features, such as a lack of support for blending between frames, or the inability to specify start and end frames?
In UE, you can configure SubUV settings and blending directly within Niagara's Sprite Renderer, and playback can be controlled via modules. However, if you want to do something a bit more complex, you end up having to implement it yourself within the material... it’s one of those trade-offs.
🧩Selecting Texture Channels (RGB)
It seems you can choose whether to use the texture as full color (RGB) or select a single channel (R, G, or B) to use as grayscale. While packing different patterns into the R, G, and B channels is a common practice overseas, I’m still debating whether to implement this in my own master material.
Packing different images into a single texture is undeniably efficient for memory and data size. However, from a workflow perspective, I’m not a fan of it because it becomes hard to track which image is in which channel, and you can't tell what’s inside just by looking at the thumbnails in the Content Browser...
🧩UV
NOVA Shader includes a setting for Mirroring. That’s a really nice touch!
UV-related settings are a bit of a nightmare for material creators; they easily lead to "Parameter Hell." As a creator, it’s a real dilemma because you want to keep the parameter list as clean and minimal as possible for the user, but features like Rotation, Scale, and Mirroring are just too useful to leave out... It’s a tough call.
🧩Tone Mode
It supports both 3-step and 5-step tone mapping.
🧩Rim (Fresnel)
This feature is primarily used to add color or transparency to the "rim" (the outer edges) of an object. It includes an Inverse parameter, which allows the effect to be applied to the inner area instead.
However, from what I've seen, it looks like you can't apply colors to the outer and inner areas at the same time. In practice, it's quite nice when you can do both—for example, if you're using a sphere mesh to create a ring-like dome that needs a subtle fade on both the inside and outside.

🧩Parallax Map
It looks like Parallax Mapping is also supported!
However, parallax is a feature often used with Decals, so I’m a bit curious why NOVA Shader doesn't seem to have a dedicated Decal material. According to Chappy-kun, it seems Unity might not handle Decals directly within its effect tools?
🧩Alpha Transition
This controls transparency, allowing you to choose between Fade and Dissolve. One thing I really liked was the "2nd Texture Blend Mode," which lets you choose the blending method for two textures, such as Average or Multiply.
Ideally, I’d love to let users choose how to blend textures for Emissive, Opacity, or Dissolve when using two layers. However, I can't just provide a massive list of every possible blend mode, so it’s a real dilemma.
Personally, I feel that Average can be tricky because mixing white and black just results in gray, and Add or Multiply can easily lead to blown-out highlights or crushed blacks. I’m starting to think that blending with Min or Max might be the sweet spot... I’ll need to look into this further.
🧩Vertex Color
NOVA Shader also has a feature to let the mesh's vertex colors affect the color. According to Chappy-kun, it seems to be a simple "100% multiply" rather than a weighted influence.
While it is possible to use a Lerp to control the strength of the vertex color influence... I wonder if there actually many cases where that's necessary.

🧩Fade (Distance / Soft Particles)
Just like in UE, Soft Particles here refers to fading based on the depth difference.
There is also a feature for Camera Distance Fade, which allows you to set both Near and Far distances and define the fade width. I wonder if it’s internally set up to skip rendering when the Alpha hits zero, similar to how games like Monster Hunter handle it?
🧩What is the Purpose of UberLit?
Since this is a "Lit" material, I assume it’s intended for things like smoke or rocks.
According to the README, you can choose between two PBR workflows: Specular and Metallic. It also seems to support various textures like Normal, Metallic, Specular, and Smoothness.
However, it doesn't seem to have features like blending a Base Normal with a Detail Normal. If you're working on highly realistic, physical objects like rocks, it might be better to prepare a dedicated master material for that specific purpose.
🧩Which Material Should Be Used for Explosions?
I noticed a Flipbook animation of an explosion in the NOVA Shader showcase video, so I wondered if it used UberLit. According to Chappy-kun, it’s actually more likely to be UberUnlit. Thinking about it, that does seem like it would be sufficient for most cases.
In UE, especially for photo-realistic games, the standard approach is to separate the textures for smoke and combustion. You’d typically use Lit for the smoke (expressed through BaseColor) and Additive/Translucent for the combustion (expressed through EmissiveColor).
It’s always a tough choice whether to represent an explosion with a single, specialized material or by combining two different materials.
🧩The Texture "Sampler Type" Problem
I’m not as familiar with Unity’s specifics, but in UE, when you use a Texture Sample Parameter to allow texture switching, the Sampler Type determines which texture formats can be used. For example, if you want to support both BC1/3/7 and BC4, you normally have to use a Static Switch Parameter to swap them. This makes the material graph more complex and, you guessed it, leads to a shader permutation explosion.

Because of this, I’m thinking the best approach might be to standardize almost all basic textures to BC1/3/7 (excluding Normal and Flow maps). Even though the quality is slightly lower for grayscale than BC4, it keeps the workflow much simpler.
🧩Feature to Remove Unused Parameter References
NOVA Shader reportedly has a feature to clean up unnecessary parameter references.
In UE, as you experiment with various Static Switch Parameters, you often end up with textures that are still being referenced in hidden, inactive branches. Does this actually get optimized away during the cook process? I wonder... You can check this manually by clicking the "Show Inactive" button at the top of the Material Instance, but honestly, it’s best to have a programmer set up a tool to batch-clear these references for us.

🧩Measures Against Shader Branching Explosion
While NOVA Shader is packed with features, which could easily lead to an explosion of shader permutations, it includes an API for creating optimized shaders that strip out unused features. It’s great to see that kind of official support and follow-up!
In UE (from 4.25 onwards), my understanding is that shaders are generated and stored only for the branches actually being used. So, I suppose we can assume it's already somewhat optimized without us having to worry about it too much?
❄️Final Thoughts
It took me about half a day, but I’ve managed to get a good overview of NOVA Shader! This research has been incredibly helpful—not just for Unity users, but for anyone like me who is looking to build a master material in UE.
There were several features I realized I’d love to add to my own master material, such as the Near/Far Fade.
I’m almost done with the master material itself, but I want to release it along with some sample effects placed in a level, so it might take just a little bit longer... hang in there!
Also, there are several other creators who have released their own master materials for VFX or shared their personal insights, so I’d like to introduce them here at the end. Please check them out if you’re interested! ✨
🧩taka-san's Master Material
taka-san has been writing a series called "UE5 × Niagara Game Effects Course" on note. In the "Environment Setup" page, she has released a full set of assets for the course, including a master material.
It’s a great reference for anyone looking to build their own master material in UE. For instance, she designed her Fresnel effect so that it can be applied to both the inside and outside simultaneously.
I also liked that she provides both a "Standard" version and a "Simple" version of the material.✨
🧩Kedama-san's Master Material
I haven't had a chance to dive deep into this one yet, but it looks like it will be highly informative! ✨
It’s fascinating to see how each creator’s philosophy manifests in their work. For instance, Kedama-san uses the prefixes "IN_ / Out_" for Material Function inputs and outputs. Personally, I tend to omit those because I prioritize at-a-glance visibility, but it’s an interesting approach.

Kedama-san also wrote an article about shader variants. They mention that increasing "Usage" flags leads to more shader variants, but I'm wondering if that's technically correct. While it does add shaders and increase file size, it might not be the same as increasing "variants" in the usual sense.
🧩SHOKEN-san’s Insights on Master Materials
SHOKEN-san has shared various insights that I find very intriguing.
Our philosophies align on using Material Functions to handle different Blend Modes—it makes maintaining variations so much easier. As shown in the image below, this approach simplifies things considerably, making the maintenance of different variations a breeze.

Allowing a switch to toggle between Multiply and Add for the preceding process.
For such simple calculations, instead of using a switch, it might be better to run both and use a Lerp to choose between them. This could be a more effective way to suppress shader permutation explosion.
Connect the opacity value to both the 'Opacity' and 'Opacity Mask' outputs of the material.
I assume this refers to switching between them using Material Property Overrides? If so, we need to be careful: using Soft Particles (Depth Fade) can cause errors when the material is set to Opacity Mask.
Master materials for different blend modes are created by simply duplicating them (rather than using instances). Apparently, this results in fewer shader variants...
Hmm. I’m not so sure about that. Since they are still treated as separate materials, I don't think it would make a difference in terms of variant count.
🧩To Modularize or Not?
I’m considering modularizing the material functions so they can be easily added or rearranged as needed. This approach offers high customizability—for example, as shown below, it makes swapping the processing order of Tiling and Panning a breeze.

However, I wouldn't say this is always the "best" solution, as there are definitely trade-offs.
One major challenge is maintenance: when you want to update parameter names, Sort Priority, or default values across the board, having them scattered across different Material Functions makes it quite a task. At the very least, I feel that Dynamic Parameters should be kept at the top level; otherwise, it becomes hard to keep track of which index is used for what, making conflicts more likely.
Building a master material is full of these kinds of tough decisions. When I finally release the first version, I plan to include a write-up explaining the reasoning behind the choices I made.
🧩Addendum:
Yoeri -Luos- Vleer-san suggested two tools to me! Thank you so much! ✨
TFlow
This is a tool sold on Fab. It appears to be able to generate motion vectors from existing flipbooks and bake them into textures, which seemingly allows for very smooth interpolation during playback.
While IlluGen reportedly has a similar feature, the advantage of TFlow seems to be that it can be done entirely within UE.
However, since it adds an extra texture for motion vectors, the decision to use it would depend on whether it allows you to reduce the number of flipbook frames effectively, and whether the game has many slow-motion scenes.
Material Analyzer
This tool appears to have been standard in UE since version 4.22. It is said to analyze specified materials and list material instances and overridden parameters, which seems useful for optimization. I’m definitely going to start using this right away. ✨
I’ll also link an introductory article here.
Discussion