My Ideas - Mainly Cel Shading.

Sorry in advance if I bring up anything here that Blender can already do - if so, it’s pretty obvious that I don’t know how it’s done and so would appreciate some pointers :wink:
I was just thinking about a few things for the Cel shader in Blender. I know it’s great and all, but it’s just not up to standard given the rest of the rendering options. At the very least, I think the user should be able to choose exactly which Objects get Edges and and what intensity, rather than applying the same settings for all objects. I imagine this shouldn’t be too hard to implement. I think it would be useful as you could easily achieve more artistic / traditional cel images with it - using darker or more intense lines to accentuate something in a drawing helps define character and focus.
Also, the ability to apply alphas to the lines themselves would be a fantastic feature! That way it would be easier to replicate different surface mediums and different styles of lines can drastically change the way the image looks. Being able to animate these alphas would be incredible too :slight_smile:

Basically, I want to see something like this eventuate in Blender:

http://www.finalrender.com/products/products.php?UD=10-7888-35-788&PID=37
Ambitious I know, but who else would want to see this? Anyone?

You can largely get there already with normal projected colour maps and the toon shader.

But, I see what you’re on about. Personally I think having single sided faces in the renderer would be useful too (can you do this??? I seem to remember it’s only double sided) and then the same trick you can use in real time games can be used.

Ultimately this is all part of a bigger shader network, which I seem to remember certain people looked at doing and being scared by (to do with how Blender currently does it), so we have the current shader system.

Well right now, the edge rendering system is really very simple, and runs as a separate step after rendering. Basically it does edge detection of the image’s zbuffer (depth for each point), and draws edges depending upon the amount of change there is between adjacent points.
It works, but it is deffinately insufficient for serious use. Simple to be able to use it in a project with interlaces output I had to edit it because outwise it gerates edges two times thicker in the Y axis than in the X axis. (the same problem applies in any case of nonsquare pixels like anamorphic wide screen) Also, trying to adapt it to operate on certain objects and not others would actually be a bit of a challenge, since it isn’t really operating on objects.
Matching that finalToon product is quite a tall order. It even handles good reflection and refration of edges. But I have been playing around with ideas myself for implementing a better (but not that good) edge system. (Though who knows when I’ll get around to it.) Edges would still be rendered as an after effect, but it would actually the render edges, not performing a dilter on the zbuffer. Objects would have properties to:

  • Render outlines – to render or no render an edge is determined by the two faces attached to the edge. If the normal of one face points towards the camera, and the normal of the other face points away from the camera, the edge is drawn.
  • Render edges – the user provides an angle. if the angle between two faces is more than the provided angle, the edge is rendered
    Edges them selves would have the options:
  • Force render – forces the edge to be rendered regardless of the above criteria
  • zoffset – edges can be drawn in space above the object. i.e. lines for eybrows can be drawn in front of the hair.
    Since it’s a post rendering effect, it’s deffinately a doable approach. Though it may be necissary to have edge information propgated though the pipe and maintained intelligently for s-meshes. And it has the side effect of not working for reflected or refracted objects. (though I guess that could be done too, but testing the face’s reflection / refratcion)

To enhance it, you could specify perhaps a pen to use, and the pen could be setup to support various widths or brush stroke styles.

Anyways, just my ideas. I would like to see better edge rendering and NPR shading in blender. In the mean time, you may want to check out the flash plugin. The author of the seems to have his own edge rendering system that would maybe be expanded upon.

PS: What is the trick with single sided faces?

Sounds good :slight_smile: I agree that Blender needs a better NPR rendering engine - it’s often something people overlook in favour of photorealism, which can look good I agree, but often NPR can give far more distinctive and powerful imagery.

I agree too. FinalToon has powerfull tools and make great images.
I would like to see that in Blender.

if we would get a renderman support into blender you can code your won cell shaders and experience the power behind this system.
it beats them all.

special imagine cell shader with true displacements!!!

claas