10
$\begingroup$

So For this project i'm trying to achieve somewhat of a cel-shaded look. Cel Shading is an attempt to make 3D Art look 2D, But The Main problem I've found with Cel Shading effects is the shadows are "too perfect" so our pattern seeking brains immediately know it's really 3D.

The Problem: I need an object to Receive shadows from external objects, and cast shadows onto external objects, But not receive any self shadows.

The closest i have gotten to figuring out how to make it look this way has been to match the lighting using invisible objects, and use them as brushes, while everything else is a canvas. however i'm still looking for a better (preferably just node-based) way to create the effect cause using dynamic paint is a pain to setup and match for every light and sometimes impossible.

Example with Problem Areas enter image description here

Example of how it SHOULD look enter image description here

I Used EEVEE to Render this as it handles stylized shaders better, Although I am fine with a setup that only works in cycles too (Preferably EEVEE Though)

Another Example of this effect with a point lamp

Note: The wireframe is just a visualization of the light cutoff

enter image description here

I Think what i'm looking for is a way for the lights to ignore the normals of the object and allow the light to illuminate the backside of objects, while still casting shadows on everything but itself. I have no idea though, and there may be a better method. Thanks!

$\endgroup$
8
  • $\begingroup$ Would you be prepared to use OSL? $\endgroup$ – Robin Betts Dec 9 '20 at 10:29
  • $\begingroup$ Never used it before, and i wouldn't understand any of the code, but if it works then yeah $\endgroup$ – Marux Dec 9 '20 at 13:57
  • $\begingroup$ I should have mentioned, it's CPU only.. $\endgroup$ – Robin Betts Dec 9 '20 at 14:16
  • $\begingroup$ A h, yeah thats not super great.. I plan on using this for an animation so im not sure how well thats gonna work out $\endgroup$ – Marux Dec 9 '20 at 14:17
  • 2
    $\begingroup$ I think you'd need to be compositing multiple render layers, one where the object's materials cast shadows and one where they did not. It would not be pleasant to implement for multiple objects acting this way. Note that normals and occlusion of light are two different, unrelated things. $\endgroup$ – Nathan Jan 21 at 17:32
1
$\begingroup$

In Cycles (Could potentially work with Eevee with a replacement for the toon shader, see this video for an explanation of shader-to-RGB and color ramp to create an Eevee toon effect):

EDIT: Try this setup as your material with no other changes, I believe it gives you the effect you're looking for. It checks if a light ray ends on the material (making it a shadow ray because anything behind it is shadowed), and if so, makes it a black transparent shader. If not, it uses the toon: enter image description here I used a really bright small light source to really exaggerate the effect, and you can see it has very heavy glow on the object, yet absolutely no self-shading, and casts shadows as well! enter image description here

For more precise control, change the color of the transparent shader to white, which makes shadows truly transparent. From there, you can swap the mix shader inputs to access either the shadowless material or materialless shadow.

Previous answer that did not cast shadows:

1: Set up your scene. I'm using a similar object to yours, with a red material and an emissive plane for lighting.

enter image description here

2: Set up your object's material. I'm using a Cycles toon to get flat shading.

enter image description here

The render now looks like this, with an obvious self-shadow in the bottom right:

enter image description here

3: navigate to Object Properties>Visibility>Ray Visibility on your object, and uncheck Shadow.

enter image description here

The render now receives lighting from the plane, but does not self-shadow:

enter image description here

This doesn't cast shadows on lower objects, but you may be able to tweak it to what you’re looking for. Hopefully this helps!

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.