Original Tweet - June 6, 2020
I really should have known this "shadow terminator" ray tracing issue was going to happen, but I stumbled into it anyway. It is a surprisingly tricky / annoying / common problem, but I got it fixed with some help from @pointinpolygon and others.
This arises from a difference between shading normals and geometric normals, particularly with low-poly geometry. This POV-Ray page has a nice diagram that explains it: http://wiki.povray.org/content/Knowledgebase:The_Shadow_Line_Artifact. This is not a floating-point precision issue.
This is also different from the "bump" terminator problem, which is about normal maps and not low-poly self-shadowing. See "Ray Tracing Gems" chapter 12 for details on that. The solution there is to modify the BSDF to add shadowing, and here I need to remove shadowing.
For me the answer was to compute a shading position above the triangle, and use that for the shadow ray origin. This is similar to curved PN triangle tessellation. Code speaks louder than tweets, so see the HLSL gist here.