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 '20 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\$ – Bob Daniels Jul 6 '20 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 '20 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\$ – Bob Daniels Jul 6 '20 at 21:02

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\$ – Bob Daniels Jul 6 '20 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 '20 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 '20 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\$ – Bob Daniels Jul 6 '20 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 '20 at 21:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.