Warning: Some of the screenshots include assets not included in this Plugin. One of my examples is made by throwing this system onto a Modular Dungeon Pack. Keep in mind that this is a system for custom lighting in the material editor, not an asset pack!
Short preview Video
Documentation
Example Project
All things considered is a product primarily aimed at a very specific minority of Unreal Engine users.
If you, just like me:
- Want to make (a) stylized or cel shaded game(s)
- Tried everything to make desired your look work, including post processing cel shaders, material based cel shaders or even building your own custom engine shading model from source but for some reason couldn't get it to look just right
- Still ended up with results that either look uncanny, off or even outright too simple
Then this may be exactly the thing you've been looking for.
In essence, my Virtual Lighting System is a Plugin that allows you to easily create beautiful, complex and dynamic Material based(!) cel shaders that are able to react to the outside influences of being currently lit/unlit, a potentially infinite amount of dynamic movable point lights with a potentially infinite amount of possible colors (within the RGB spectrum of UE ;)) all at the same time!
How do we do that? Simple, by attaching a custom Actor component to our cel shaded actors that'll take care of generating dynamic material instances at runtime and live update their unique parameters to ensure everything is handled smoothly for you.
"But why would I use material based cel shading when things like post processing already exist?!"
There was one simple reason for me why using post processing (only) for my cel shading wasn't an option and that reason is visual clarity. Subjectively speaking post process based cel shading will always look a bit off, as it will always be based on physically "accurate" lighting information, which will never match the simply beautiful clarity of a basic unlit material, nor does it give me the creative freedom to precisely fine tune each object and characters shading the way I'd want to.
If you're interested in objective reasons only, here's the list of benefits I've found so far:
- Post processing based cel shading breaks when using volumetrics. The ScreenUV based texture coordinate of post processing simply doesn't allow this, which means they lose you the ability to use actual volumetrics in your game
- Post processing cel shading does only allow for very janky implementations of colored lights. There are indeed workarounds that make things look somewhat right, but the result is never 100% accurate.
- Post processing materials do have a large performance cost and simply making one or two characters who may not even be on screen at all times cel shaded you'll have to render out the full screen view and do, what you could call a cut out, afterwards
- You have complete creative freedom over stylistic choices because your lighting system is not bound to any physical accuracy anymore. Want your Postprocess based outlines to be simple, but have extremely detailed shading visuals? Just do you shading calcs but don't actually use the normal map. Want your default shading to smooth and simple, but have extremely detailed shading when exposed to another external light source? No issue, just use different Normal-Solutions for the different lighting calculations.