Is there a workaround for the terminator problem?

You know, the issue where the shadows on low poly objects look like garbage and are distorted by the geometry despite smooth shading?

https://blenderartists.org/forum/attachment.php?attachmentid=298252&d=1395762708

Trying to do low poly stuff in cycles is a big “NO”.

Just wondering if there is a workaround and if there are plans to improve/fix this (I know it’s not considered a bug) problem?

Adjusting smoothing does not work?

you can bake a normal map from a much smoother sphere*

also, checkout the variance shadow mode in the game engine for the sun and spot lamps

lol, no…


Firstly, how do you mean?
Secondly, I’m using cycles tho… cycles.

180 degree is overshoot. There are some normal addons, also normal modifiers. I will check this problem anyway.

Care to be a bit more specific about the addons and modifiers?
Also, 180 60, or 30 degrees, the problem is still the same…

The shading setting does not affect the terminator. The only way to deal with the terminator issue is to increase the density of the mesh or increase the size of the lamp - big lamps have smoother shadows and the terminator issue is not so apparent.
AFAIK there are no plans to solve this issue - the main reason is that nobody actually knows how to solve it.

Made a post about that a while ago, not sure if entirely correct, but maybe it’s a bit useful: http://www.luxrender.net/forum/viewtopic.php?f=16&t=12915&p=122753

Even your ‘right’ example with the large arealight shows distinct squares of different shades on the sphere.

Anyway, this issue unfortunately is not easily solved with pathtracing, the only known way is the one Thea uses (and that is to introduce a physically incorrect shadowing hack that biases the render and may or may not lead to issues with the lighting).

Well, aren’t “subdivide moar” and using larger lights two sides of the same solution? The larger the terminator is compared to the faces, the less the issue will show.

in any case, messing with the normals or baking normals and what not aren’t going to get you anywhere with this. The whole origin of the problem is that the fake surface from smoothed/mapped normals can’t be used for some shading calculations. If you’re going to smooth shade the model anyway, might as well subdivide it. The problem just gets a bit thornier when you need to use an existing low poly model you got from somewhere…

If your light has shadow bias setting, use it, otherwise increase geometry.
Left sphere rendered light shadow bias value 0, right sphere rendered light shadow bias value 0.002 (Vray 3)


This topic is a little old, but I want to point out a simple solution for who wants to solve this problem on Cycles without increasing geometry,

in material node editor, add input > Geometry node, add Color > MixRGB node, then set MixRgb note to subtract, connect “normal” of Geometry node to “color 1” of MixRGB node and connect the output of MixRGB to “Normal” of your “Diffuse” shader, then set factor of MixRgb to smaller value like 0.2, that solved my problem :). I did not tested with normal map.


EDIT : sorry, wrong math, multiple light cause problem, but I know there is solution, needs some time to think.

3 Likes

There is a righclickselect proposal :
https://rightclickselect.com/p/rendering/Mtbbbc/fixing-terminator-effect-and-other-rendering-artifacts-in-cycles
Upvote it !

Mental Ray and Mantra from Houdini which are ray tracers solved it.

Fixed in latest 2.81:

That only fixes a narrow case where the problem wouldn’t be visible if it wasn’t for heavy bump mapping. The more general problem, where even simple smooth normals show the faceting, is not affected and is still with us.

Hmmm you might be right - I think I must’ve tested using the default sphere in eevee…:grimacing:

This has been bugging me off and on for a while now, but after playing around with adding the Subdivision Surface modifier, I found that if you set the Scene Render Engine Feature Set to Experimental, you gain access to the “Adaptive” checkbox in the Subdivision Surface modifier. Checking this box, and setting the Subsurface levels to zero seems to fix the “terminator problem” without visually subdividing your mesh.

FeatureSet

With the “Adaptive” setting checked:
WithAdaptiveProperties
WithAdaptive

Without the “Adaptive” setting checked:
WithoutAdaptiveProperties
WithoutAdaptive

It is certainly a pain to add to every object that needs it, and this is just a simple default UV Sphere with a Principled BSDF shader and no textures added to it, but it is worth experimenting with.

By the way, I am using a Linux build from git master branch, version 2.82 from Oct 26, 2019.

from what I know, appleseed & Thea have it, all others either lack the solution or have it half done like Cycles