A toon shader for VRChat.
Features:
- PBR
- Emissions
- Outlines
- Glitter
- Explosion
- PBR detail maps x4
- Matcaps x2
- Rim lighting x2
- Rendering modes: opaque, cutout, fade, transparent, transclipping
- Culling modes: front, back, none
- OKLCH color adjustment
- Reflection probe override
- Min/max brightness limits
- Flat/realistic normals
- Geometry scroll (similar to Poiyomi's shatterwave)
- UV scroll
- Clones
- LTCGI
- Shadows (both casting and receiving)
- Extensive use of variants to minimize performance cost
Disclaimers:
- This is a WIP.
- I am not a graphics expert.
- Stability is a non-goal. Keywords are likely to change in the interest of performance and simplicity.
Strawman FAQ
- Why create another toon shader?
To deepen my understanding of lighting and to have a "simple" foundation on top of which to create bespoke shader effects. lilToon and Poiyomi are both way too fucking huge and complicated to fit my needs.
- Does it work?
Sort of. I haven't implemented shadow receiving yet, so some water effects are fucked up.
- Is it optimized?
Sort of. I haven't benchmarked it. I know it's slower than Poiyomi.
I use keywords on every feature so it shouldn't be obscenely bad. But I haven't gotten to the point of like, deduplicating all computation and shoving as much as possible into the vertex shader. So it's like. Sort of optimized.
I'd like to strike a balance between performance and readability. Since it's mostly for my use, I don't feel a need to make it totally optimal.
- Demos?
This avatar uses it: gumroad.
I'm working on a world but haven't published yet.
Will update this section with real demos later.