Blog / Making Of

Arnold C4DtoA Toon Experiment

Jason Clark — November 29, 2020

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:

  1. Edge > Edge detection > Mask color
  2. Using a bump map and angle threshold to add edges
  3. 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.