The cel-shading process starts with a typical 3D model. Where cel-shading differs from conventional rendering is in its non-photorealistic illumination model. Conventional (smooth) lighting values are calculated for each pixel and then quantized to a small number of discrete shades to create the characteristic flat look – where the shadows and highlights appear as blocks of color rather than being mixed smoothly.
Black "ink" outlines and contour lines can be created using a variety of methods. One popular method is to first render a black outline, slightly larger than the object itself. Backface culling is inverted and the back-facing triangles are drawn in black. To dilate the silhouette, these back faces may be drawn in wireframe multiple times with slight changes in translation. Alternatively, back-faces may be rendered solid-filled, with their vertices translated along their vertex normals in a vertex shader. After drawing the outline, back-face culling is set back to normal to draw the shading and optional textures of the object. Finally, the image is composited via Z-buffering, as the back-faces always lie deeper in the scene than the front-faces. The result is that the object is drawn with a black outline and interior contour lines. The term "cel-shading" is popularly used to refer to the application of this "ink" outlining process in animation and games, although originally the term referred to the shading technique regardless of whether the outline was applied.
The Utah teapot rendered using cel-shading:
- The back faces are drawn with thick lines
- The object is drawn with a basic texture
Steps 2 and 3 can be combined using multi-texturing (see texture mapping).
Another outlining technique is to use 2D image-processing. First, the scene is rendered (with cel-shading) to a screen-sized color texture:
Then, the scene's depth and world-space surface normal information are rendered to screen-sized textures:
A Sobel filter or similar edge-detection filter is applied to the normal/depth textures to generate an edge texture. Texels on detected edges are black, while all other texels are white:
Finally, the edge texture and the color texture are composited to produce the final rendered image: