Hi all! I am developing a cel-shaded 3D game and I want to include some sort of cel-shaded style particles/effects. I really admire how beautiful of a game The Legend of Zelda: Breath of the Wild is, and I quite like the particles/animated effects that the game presents. How would I go about making particles that are of a similar style to most BoTW particles? That includes the fire, weapon hit particles, the effect when you get a spirit orb, elemental effects, etc… Thanks for any help!
Theres literally nothing special about them.
What exact component do you find interesting? Maybe we can help more if we know what exactly you mean
For the particle effects you don’t even need a special shader, just the right textures.
In BotWs case that’s textures with very hard edges plus either an overlay with a strong blur or bloom as post processing (both will do the same thing but it depends on what other factors what you should use).
From what I can see they don’t use fancy displacement maps or distorsion shaders (and tbh I doubt you’d get a good quality with them either), but instead animated texture sheets. Especially visible in explosions and fire, those definitely use texture sheet animation.
The spirit orb effect? Which one exactly there are many things going on when you get a spirit orb, you really need to post a screenshot or something
Maybe even editted in paint with a red circle (I’m not even kidding)
They are not (most of the time) using texture sheets. They’re using an alpha erosion technique like this one:
http://www.alkemi-games.com/a-game-of-tricks-iii-particles-fun-part1/
Its a great technique for stylized effects as you can make very smooth animations with out needing a giant texture atlas. The downside is it can be very time consuming to author each texture (which I suspect is why every explosion in BotW looks like it’s using the same base smoke shape). If you combine something like this with a normal map, and a 2D gradient look up texture you can get some really complicated looking effects using very little texture memory.
See the second part of the above link for an example of using the gradient texture:
http://www.alkemi-games.com/a-game-of-tricks-v-particles-fun-part2/
Also see this page for an example from fallout 4, though in this case used in conjunction with a looping texture atlas animation:
https://simonschreibt.de/gat/fallout-4-the-mushroom-case/
As stated, it’s not texture sheets, it’s some basic shader tricks. The name of the technique bgolus mentioned above is “smooth step”. That’s what you can search for if you want more info on it. The smoke in BOTW was probably done using a smooth step material that was probably different from the diffuse, which is why it faded away in a swirly shape when the smoke itself wasn’t really swirly. They may have also put a subtle flow or perturb on it to push the spiral even further as it faded.
The fire probably isn’t using a texture at all, it looks to be a result of shader math using Perlin noise and a fresnel to give each “tongue” of fire an interior gradient. How they get it to blow in the wind, though… is beyond me.
Smoothstep is a simple polynomial function for adding some gentle ease in and out and clamping to a value range. It’s even a built in function for hlsl and glsl.
The technique I described is not directly related to smoothstep, though using smoothstep is an easy way to implement it. I personally don’t use smoothstep for my erosion shaders.
Fire is absolutely using a texture still. Just a panning noise texture and some displacement on top of a nice base texture. They’re likely using a method similar to what’s described here:
https://simonschreibt.de/gat/stylized-vfx-in-rime/
On the subject: I did a fire effect with just noise (no additional textures) that came out pretty good. Here’s a reddit post I made about it. There’s a some great noise functions in this thread (use the one at the bottom, since it fixes some issues). Learning how to use noise is a pretty great way to get into dynamic effects, since there’s so much you can do. I also made a fun torch:
Also just a random thanks to @bgolus for helping out so much on this forum, learning shaders can be a pretty daunting task without solid resources.
EDIT: Forgot to say, also made the dynamic twinkling star skybox with noise! Noise is the best!