My Unity tools for working on VFX

Hello guys :kissing_smiling_eyes:
I check a lot this forum, but for confidence reasons I didn’t post yet. But there is a topic I’m confident enough : tools for VFX.

In my VFX artist life, I always worked with default tools such as Particle System in Unity, Material Editor in Unreal, etc. They are cool for working alone but can be limited with a project with tricky gameplay effects.
As tools are complicated to obtain on a project because everyone is already busy, I decided one day to try make my own.

This topic is actually an answer to this one : Help me gather information to make a unity vfx tool for my university final project
I thought my answer would be better if I created a proper full explained topic, so here it is.

  • DioramaScene

First of all, I can’t preview my VFX integrated without launching the engine. It’s a problem because I would need to rebuild the packages each time I modify my effect, wait several minutes to get in the game and hope to have a debug action or find the correct item/action to trigger my effect (or simply the game wouldn’t launch because programmers are working on hard features)
When making small details, this can be quickly frustrating.

So here’s my answer, the Diorama scene :
(I made pretty ugly demo content, can’t show my work sorry)

I make a diorama for each effect I want to work on, and name the diorama game object properly.
In each diorama there is a diorama prefab, an in game title, a characted if needed, and of course the effect.

image
Then, at play, my Diorama script will generate a button for each activated child it got.
It also sort buttons by alphabetical order, and get a color based on the diorama prefix (here, C, F or S for curse, feedback and skill).

image

Then, I hit the button of the effect I want to see. Other diorama are hidden, and the current diorama is moved in front of my camera.


The vertical slider is handling luminosity (and also drive exposure and light orientation, only between two values, with an extra light setup script binded with the UI), and the horizontal one is a volume controller if I have the matching effect sound in my diorama.

But it’s not enough to have a proper preview for all effects. Quick details :

Loop maker
As my effects generally doesn’t loop in game, or loop but have a start effect, I have an extra script to put on a parent containing the vfx to make it loop :

image
I can also put the sound if I have it and it will be triggered too.
As I’m a cool kid, my fancy code to make it loop is desactive and reactive my vfx gameobject :sunglasses:
Also, really cool thing, if I put an animation on the character, it will loop too, so I can preview and adjust my vfx on it.

Animation Parameter
If the animation doesn’t play well because it needs an extra parameter, I can check its animator, then force the parameter value with it :

image

Bullet controller
Because not all effects are static, I have a bullet controller to move them.
Designed to work with the loop maker, It works with a curve on forward axis, and can hide or not the projectile at life end.

image
I may already used it to move a character and add an option to not hide it at the end… :roll_eyes:
Can be useful if the effect is not “destroyed” at the movement end though.

That’s more or less all of it for my Diorama scene.

Two other tools that helps me to work easier :

  • Timescale tool

Sometimes you just want to be a time lord and freeze the action or watch it in slow mo.
Unity already has a time tool when you are on a particle system but I thought it would be useful to have a global tool for that and I use it from time to time. Anyway, my game designers love that tool :smile:

image
It works with Unity’s delta time. Stop set it to 0, Pause to 0.1, Play reset it to 1 and Forward to 5. Maybe it could have better icons but I didn’t want to add external resources.

  • VFXToolbox

That magic box is really helping a lot. Instead of looking for your scene and loose some focus on your work, why not have a button? You’re looking for your effect prefabs? there’s a button. To integrate your effects in your feedback ? Yup, button. It’s just easier to navigate trough my project’s data and find my assets.

image
Also, as my effects need to have some information on their prefabs, I made a quick setup button so I don’t have to remember which script is needed. I love it because it reduce human error.
If I can automate repetitive tasks that may lead to an error, making a button will take me around an hour ONCE, instead of doing 5min setup every day of the production.
Also, if you have a new member in your team, the on boarding is way easier.

I have another part for “Tools” in my toolbox. It contains mostly check function to be sure my effects and data are correct, for human error reason or because the project is evolving and sometimes data breaks.
If you are modifying several prefabs, “Apply all prefabs” is a mental health and wrist savior.
I think this Tools part is highly customisable and related to current project.

check
And because I’m so an artist, I have fancy errors in the console :smile:
Actually it helps seeing my errors in all the messages, and I like my tool verbose, telling me exactly which effect isn’t working and why. For my coworker (and myself :roll_eyes:) , I even put an extra message telling maybe what you should do with what kind of error.

debug

BONUS PART
:sparkles: Custom Shader Inspector :sparkles:
WOOOOH :boom:

Yup, I’m so proud of it I need to talk about it. IT’S SO USEFUL. FOR REAL.
I spend my life in material. Default inspector isn’t enought.
I will not speak a lot about the shader, I has basic function like sampling several textures, blend them, colors parameters and extra features like dissolve. Some of those buttons triggers shader keyword for performance reasons.
Also, it’s really, really cool when you’re displaying only things you’re using. In this screenshot, “Third texture” pannel is hidden.
I put special efforts making it compact, but easy to use.

I think a lot of things may be better designed because I’m self-educated in programming :thinking:
But at least it works well enough for me, and helps me not spending energy on useless things and make my daily life better at work.

That’s all, thanks for reading ! it’s a bit long sorry :sweat_smile:

11 Likes

Super curious stuff!

Been there, done that. The loop maker, the bullet controller and the timescale tools are similar to some tools I’ve also made myself at some point out of necessity.

The VFX Toolbox and the Custom Shader Inspector look sooo useful. That “you’re a good boy” message there tho :joy: Only thing I’d change about the CSI would be the textures, I think I’d be better if they displayed themselves in a 1:1 square aspect ratio.

Awesome job! :sparkles:

2 Likes

You’ve set the bar quite high, these tools are awesome. It’s obvious you’ve put a lot of work in these tools. Most of all you can see how you have made the tools out of your own experience and necessities, that’s what I want to do but I don’t have that experience myself. That’s why this post is really helpful in my case, thanks a lot, really.

Also, I wonder what happens if you use special mode. Does that make you a bad boy?

2 Likes

It’s not because it’s a tool that it can’t be enjoyable :smile:
I have other secret colored messages hidden hahaha. They change color based on time, when the inspector is refreshed :stuck_out_tongue:
Totally agree for the texture display. I used a builtin function as it was good enough, so I don’t spend too much time on it.

Thank you !

1 Like

Cool ! I’m happy this post is useful ! Hope you get a lot of ideas from it !
If I can provide some help please poke me.

Actually, it may display a kaomoji :eyes: Making VFX automatically flags you as a good boi anyway