It seems most cell shader tutorials focus on individual shaders for materials, but the effect used in BOTW seems to be more like a filter, that is applied to everything.

I've researched multiple examples that have been done in UE4 like here and here but nothing in Unity.

How would I apply something like this in Unity?

  • \$\begingroup\$ Doing a quick search for "botw shader unity" or "post-process filter unity" turns up lots of examples and tutorials. Where have you run into trouble applying these examples to your project? Note that applying the cell shader to each object material individually will tend to give you more control over individual object appearance and special effects than relying on a single post-process filter for everything. \$\endgroup\$
    – DMGregory
    Jul 6, 2020 at 17:54
  • \$\begingroup\$ Sorry if I wasn't clear, the effects in those tutorials are very limited, usually only working with a direct light source, and rarely allow normals, and specular maps. In regards to the post-process filter, it seems like the only tutorials I could find were with very shallow effects, like turning the screen red, but not changing the lighting effects as a cel shader does. \$\endgroup\$ Jul 6, 2020 at 18:07
  • \$\begingroup\$ Do you prefer to create shaders using ShaderGraph or by programming? Is getting an asset from the store an option for you? \$\endgroup\$
    – Philipp
    Jul 6, 2020 at 19:24
  • \$\begingroup\$ I have found tonnes of excellent toon shaders online, but they need to be applied to material individually. There's nothing wrong with this, but I felt like I could get a better effect if I used the system which BOTW does, which is applying it as a filter. \$\endgroup\$ Jul 6, 2020 at 21:02

1 Answer 1


You can write your own screen-space post-processing effects. One solution for doing this would be to create a custom effect for the official Post-Processing Stack v2 from the Unity Package Manager. See this page for information on getting started.

  • \$\begingroup\$ So I could use an existing shader, and add it to the post-processing stack? \$\endgroup\$ Jul 6, 2020 at 17:52
  • \$\begingroup\$ I haven't implemented a custom post-processing effect myself, but that is what it sounds like from the documentation I linked to. Obviously the shader should be designed for this purpose. Shaders that should be applied to an entire rendered image are sometimes referred to as "screen space" shaders; they are going to function differently than material shaders. \$\endgroup\$
    – Kevin
    Jul 6, 2020 at 18:12
  • 1
    \$\begingroup\$ If you're using HDRP/URP and shader graphs, I show an example of how to add a post-process filter into the scriptable render pipeline in this answer. \$\endgroup\$
    – DMGregory
    Jul 6, 2020 at 18:59
  • \$\begingroup\$ @DMGregory Your tutorial was excellent and well thought out. Unfortunately, I think that type of system won't work for this situation. I ran your script with a toon shader and all it seemed to do was brighten up the image a bit. I realize it's because treating it as a post-processing effect is basically just applying a toon shader to a flat image, not the individual objects. I'm really stumped now, how does BOTW do it if not like this? \$\endgroup\$ Jul 6, 2020 at 21:01
  • \$\begingroup\$ They likely apply the toon shader to every object material individually, like I recommended to you originally. \$\endgroup\$
    – DMGregory
    Jul 6, 2020 at 21:10

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .