TUT: cel-shading

i’ve been fighting with this - finally i made it work. mesh-based cel-shading.

take a mesh (head, monkey, whatever you like). leave edit mode. give it a material. set to shadeless. turn on ZTrans. set color to white.

duplicate the object (wihtout moving it’s position!). enter edit-mode, press ALT+S (scale along normals). scale a little bit - the more, the thicker the cel-outline will be (though that can be controlled by an other setting later, too). leave edit mode.

in the material panel, make the material of the second, scaled object single user. change the color to black.

go back to the first object. in the material settings, activate ZInvert. turn up ZOffs to something between 0.07 and 0.10.

for both objects, turn on SubSurf, level 1 to 2 (if desired).



the higher the ZOffs value is, the “less” lines are visible.

the same technique is used to have cel-shaded objects in the game-engine, unfortunately at the cost of doubling the vertices used.

c&c welcome,


Very nice solmax. I always wondered if there was a way to do it without the limited post-pro method. Of course if there was a more functional material system cough people wouldn’t need to struggle to find ways of faking SSS, caustics and cell-shading. Oh well.

Great that you can use it in the game engine though - you couldn’t do that before could you? That XIII game was pretty cool.

thanks solmax. i just tried it and i thought it was pretty cool.

actually in the game engine it’s a pretty old trick. and much “easier” to achieve - since meshes are per default single sided you simply have to flip the normals of the outline-mesh and give it a solid blaxk color.

for rendering i always struggled because the material/object settings that i thought are responsible never worked. they were: doublesided off, flipped normals and ztransp for the outer “outline” mesh. unfortunately none of these took me even close to a solution. turning off doublesided and flipping the vertices didn’t have any result at all. it was more an accident that i played with Zinvert and ZOffset in the materials and succeeded.

happy to hear you find it useful.


And it works moderately well for animation as well. Here’s a quick spinning animation test that I did with this technique. There are some issues with seeing faces (yes, I did set smooth), but with some tweaking this could easily work as a quick solution.

I know caustics can be faked with light textures and spotlights and SS by having the transcluucency value of a material up and putting lamps inside the mesh, but these built in someday would be nice. Perferably before blender 3.0

well, that is pretty kewl

i always wondered how to do that with blenders limited edge settings too…

thanks for sharing