Toon shading model

EDIT: now released and available on github, see page two for details :slight_smile:

ToonShading1.png

Although UE4 is great in many ways I feel like it is lacking for stylized/non-photo real rendering. To remedy (and to better learn how UE4ā€™s deferred shading system works internally) I have been working on a toon shading model that should allow for a greater range of visual styles while seamlessly integrating with the rest of the rendering system.

Hereā€™s a screenshot of some of the features that work right now:

There are still some issues to resolve, especially with the mobile/html5 version, but the basics are done.

However, Iā€™m not exactly sure what to do with it. would seem like something that would fit well on the marketplace and the revenue would help me to further develop and support it. Sadly that seems to be technically impossible. The way the deferred shading system works means that most of my changes are all over Epicā€™s code and canā€™t easily be separated into their own files. And that is assuming code plugins ever get their own shader source folder, which they currently canā€™t have.

A second option would be to finish it up and make a pull request to get it added to the main engine repository. If the marketplace route is impossible I would prefer giving it to the community way over not making it available at all. However, before it is anywhere near good enough for that I would have to put in quite a bit of additional work so it would be nice to know if Epic would even be interested in adding something like .

So I guess my question towards both Epic and the rest of the community is: Would you be interested in such a shading model?

5 Likes

Thatā€™s pretty slick!

I know right now code assets arenā€™t sold on the marketplace but I think they have said that will change in the future.

Thanks!

In a recent stream Epic indeed said that code plugins should be allowed in the near future. However, as far as I understand the issues I listed would still be a problem then, as they are issues with the plugin system itself. Although it would be great to be proven wrong in :slight_smile:

Having it as a git pull would be pretty great to me!

Sell it on Sellfy ā€¦ turn it in to a set of DIFFs and have a decent manual for the installation of it.

Creating DIFFs is pretty straight forward and is the standard for shipping source code changes.

The Ten Minute Guide to diff and patch

How to create a patch

http://git-scm.com/docs/git-diff

Your challenge is validating that the person is licensed with Epic for Unreal Engine as per the FAQ:

I know how to make a patch, but I agree that legally that would be problematic. Additionally Iā€™m afraid you wouldnā€™t really be able to reach most UE4 users on a site like that Sellfy.

Anyway, Iā€™m glad people at least like it, so before trying to figure out what to do with it Iā€™ll first continue development :slight_smile:

To test the versatility Iā€™ve started to try and recreate some iconic non-photo-real styles in UE4 using my toon shading model, hereā€™s the first: (or does count as two :P)

1 Like

I absolutely would be interested in ! Iā€™ve been trying to experiment with Windwaker-style toon shading for my game, but I just gave up on it as rendering is something I know very little about and the only thing Iā€™ve seen the community produce until now was outline post process materials, which is only half of what I want. So seeing gives me some hope. Iā€™d pick it up in a heartbeat! I donā€™t really care if I have to pay for it. Iā€™m just desperate for some actual toon shading in UE4. :stuck_out_tongue:

Arnage, is super cool. We would love to support renderer extensions like , but unfortunately wonā€™t be able to any time soon via code plugins and the like due to the amount of work involved.

It seems to me a nice implementation of custom shading is that thereā€™s a Custom Shading Model you can pick per Material, and each project gets to supply a material which does the custom shading given Normal, LightVector, etc. is really difficult to implement though as there are lights that arenā€™t punctual, like sky lights and lightmaps, where there isnā€™t a LightVector at all. You have to write some spherical harmonic code for that and know a lot of math, so it wonā€™t be the user friendly thing thatā€™s desired.

The next best thing is to have a ā€˜Remapped Shading Modelā€™ which simply allows the specification of a Lookup Texture for diffuse (addressed by dot(N, L)) and specular. It seems to me would be enough to implement all of your examples, is that the case? one is quite feasible to implement and similar to the Subsurface Profile shading model.

Thanks!

A full custom shading model might indeed get quite complex. Maybe you could provide a number of preset methods to handle those special case lights while providing full control over the easier to understand regular light handling? I think that should be enough for most use-cases, while not being too complicated for the user.

Regarding a ā€œRemapped Shading Modelā€: that would indeed work for case. The only thing Iā€™m not sure about would be mobile, which would be a shame as NPR visuals tend to be quite common in mobile games. You would lose one of the already scarce texture samplers and Iā€™m not sure you wouldnā€™t get texture filtering artifacts due to lower precision combined with the high contrast lookup textures that would be needed for toon shading.

I want so bad!!! Will you be selling anywhere any time soon?

Only the outlines is missing.

Moreover is perfect.:wink:

Iā€™ve updated the interaction of the shading model and settled on the following input:

To prevent over-complicating the material editor I reused the two clear coat properties as they work in a very similar manner. The properties work like :

Toon: Blends between regular shading an toon shading (defaults to full toon)
Toon Roughness: controls the sharpness of the transition between light and shadow. By separating from the regular roughness property you can control specular response and reflections independent of the toon shading roughness.
Toon Step Size: create stepped lighting by lowering below the default of 1.0. A value of 0.25 would result in four discreet steps in the lighting.

Additionally the mobile version now works. However, in a similar way to how the clear coat and subsurface shading models handle mobile it uses a cheaper, simplified version with less control. Hereā€™s a mobile link as an example:

462e7e9e2efdb9682dbde9476ef97aa799d7e660.jpeg

@lunyBunny: It wouldnā€™t make much sense to implement an outline in a shading model. However, there are many ways to achieve outlines in UE4 that could be easily combined with .

is exactly what Iā€™m looking for. It would be so useful if shading models could be added as plugins Epic plz

OMG. I love cell shading so much. I use it all the time in other rendering systems. If you sold , or somehow got it integrated. I would love you forever.

forever.

I hope something like will be integraed into the engine someday.

What I am curious about is the versatility of shading model. I mean, sure, you called it a toon shading model, so I reckon it is pretty clear what it does at its base, but what if you try to get creative with it? Is it possible to expose various variables you are using to create your own derivatives? Like for instance, in the stepped lighting, would I be able to influence the individual steps, like turning it into a rainbow or something? One of the things I miss in the UE4 engine (and yes, I know why it is missing) is the custom lighting model thing. While possibly not a perfect copy of the possibilities, I reckon that toon shader could be a step in the very right direction to get to a ā€œcustom lighting modelā€ for UE4.

is excellent!

Tommy.

Aw man, so awesome. Iā€™d love to see integrated into the engine! What are your plans with it?

The second you release , I will buy it.

is great! Iā€™d love to get my hands on it!
I know that Epicā€™s main focus is towards realism and PBR but I hope theyā€™re flexible enough to allow you to have your toon shader in their code, should you decide to donate it to Epic.