Toon Shading in Blender: Stylized Shaders and Freestyle Lines

Diego Cortés

Diego Cortés

Author

10 August, 2026

A comic or anime look without plugins: Blender toon shading comes from two native pieces, a shader that splits light into bands and a line engine called Freestyle. Most tutorials cover only one of the two halves; this one joins them so you end up with a complete stylized render.

What is non-photorealistic rendering (NPR) in Blender?

Photorealistic rendering tries to imitate reality; non-photorealistic rendering (NPR) deliberately tries not to. In Blender, Freestyle is the line-based NPR render engine: instead of computing the color of every pixel like a normal render, it analyzes mesh data and depth information (Z-depth) to draw strokes over the edge types you select.

The strength of Freestyle is that strokes do not have to be uniform. Line styles allow artistic looks such as "hand drawn" or "painted", with irregular strokes that mimic ink or pencil, or technical ones such as the hard line of a blueprint. The same model can read as an illustration or as a technical drawing: only the stroke setup changes, not the geometry. The full reference for the engine lives in the Freestyle introduction in the Blender manual.

Cel shading: color in bands

Cel shading (or toon shading) is the first half of the look: light stops fading continuously and gets quantized into flat bands of color. A lit object goes from a smooth gradient to two or three crisp tones, like in an animated cartoon.

Shader to RGB (EEVEE)

In EEVEE, the Shader to RGB node converts shading, meaning the already computed lighting information, into color information you can manipulate. Feeding it into a ColorRamp quantizes that light into bands: two or three color stops that define shadow, mid tone and highlight. That is the classic real-time cel shading setup.

An important warning: the Shader to RGB node only exists in EEVEE. It is not available in Cycles, so if your final render goes through ray tracing you need the alternatives in the next section.

Cycles alternatives

For Cycles there are two usual paths. The first is the Toon BSDF, a stepped shading shader that approximates the same banding effect without relying on the node that does not exist in that engine. The second is the inverted hull technique for the outline: a copy of the object with slightly increased scale and inverted normals, rendered in black behind the original to fake the silhouette line.

A typical setup

The most common EEVEE setup is a short chain: a Diffuse BSDF feeds a Shader to RGB node; its output goes into a ColorRamp configured with two or three stops; and the result is mixed with the object's base color before reaching the Principled BSDF. The ColorRamp is the main creative control: moving the stops changes where the shadow begins, and using constant interpolation guarantees hard bands instead of gradients.

Freestyle: enabling the line engine

With color in bands, the second half is missing: the lines. Freestyle is enabled in the view layer properties (or in the render properties) and, from that moment on, the engine generates lines according to the edge types you configure in your line sets. You do not have to mark anything on the mesh: the engine decides which edges to draw based on the criteria you give it.

Line sets and edge types

A line set is a collection of edges that are rendered together with the same line style. Inside each line set you choose which edge types take part in the calculation.

Edge types

Each edge type is identified by a color in the viewport: Silhouette in green, Crease in black, Border in blue and Edge Marks in red. You can also use Contour, Suggestive Contour (near-silhouette contours, useful for looser looks) or Material Boundary, among others. Each type can be included or excluded from the calculation; if one dirties the drawing, you remove it with the X next to it, as the manual explains on its line set page.

Crease angle

The Crease Angle is the threshold that decides what counts as a crease edge: if two adjacent faces form an angle smaller than the defined value, the edge between them is rendered when the Crease edge type is active. The same value also affects Silhouette selection, so it is the first control to touch when the drawing comes out too dirty or too clean.

Culling and organization

The Culling option ignores edges that fall outside the view, which speeds up the calculation. And since a view map can hold several line sets, each bound to its own line style, you can separate the outer silhouette from interior edges and give them different treatments.

Line styles: thickness, color and modifiers

The line style defines how the stroke is drawn. It is organized into color, alpha, thickness and geometry sections, and each section accepts modifiers to vary the stroke: pressure, noise, waviness or crests that break the uniformity of the line and give it a hand-drawn character.

A performance tip: the fewer edge types you have active, the faster the line render is calculated. For a quick test, leave only Silhouette and add Crease when the look calls for it.

Tips for a clean look

Iterate in EEVEE: the preview is almost instant and the final cel shading result barely differs. Adjust the Crease Angle so you do not dirty the drawing: a value that is too low leaves extra edges on curved surfaces. Combine the line color with the shadow bands: lines do not have to be black, a dark blue or a brown softens the look. And if you are going to animate, fix the same noise seed in the line style modifiers so the stroke does not shimmer between frames.

Conclusion

The complete stylized look is made of two halves that ship with Blender: banded color with Shader to RGB (or Toon BSDF in Cycles) and lines with Freestyle. Neither requires plugins and both are controlled from the viewport. If you want to see the workflow applied to real projects, the curated video tutorials on CGI Academy Hub are a good next step.