I having been focusing back into Arnold renderer lately. I find Arnold just has a quick beauty about it and I keep finding myself wanting to do more toon rendering with it. My previous toon tool was Cinema4D's Sketch and Toon which is hardly interactive which Arnold is awesome at.
I grabbed the latest Renderman challenge model set and used the robot to dive more into the toon shading. You can get the model set here: https://renderman.pixar.com/shipshape-pup-asset
Learned a few things using:
- Edge > Edge detection > Mask color
- Using a bump map and angle threshold to add edges
- Using camera projection along with OSL half-tone shader masked with a Utility Lambert node
Basic Setup
The basic look of this shader using mix of a tone mapped base colour and an emission colour. Upon this, I added additional edge detection tweaks and bump map. The scene is lit with an Arnold distant light. The background is a toon shader using a shadow catcher node and C4D noises for break up.
Edge Detection > Mask Color
Using the mask colour, I was able apply a texture map to generate some abstract details. I would later use this same map to compliment using bump map and angle threshold. For the texture I used JSplacement by @WindMillArt for abstract techlines. This image gets piped the Edge Detection > Mask Color node. Additionally within the image node I adjusted the Multiply value to reduce detail.
Bump map with angle threshold to add edges
To add more details within the techlines to compliment the modifed image file mask colour, I used the same image through a bump2d node into the toon Geometry > Normal port and notice the default Angle threshold of 180 degrees:
Reduce the angle threshold to your liking, in my case 46 degrees:
OSL Halftone, Camera Projection, Utility Masking
Staring with the half-toning. I first masked off 2 different areas for the half-toning to attempt fading larger dots to smaller dots for shadow density. I'll admit this needs work still because various layer combining wasn't working as I had intended. The important piece here is to use a ramp_rgb node to tweak the lambert shading results.
Large dot mask:
Small dot mask
OSL Half-tone with camera projection:
I drove the OSL Half-tone texture scale with an OSL absolute float node to uniformly drive the large and smaller dots. The OSL half-tone nodes were piped to a camera projection node and mixed with the lambert masks. The two half-tone nodes are then multiplied together, layered with a ramp_rgb node to drive the Base Tonemap.