Как предотвратить появление артефактов на вращающихся поверхностях
Я узнал о лучевых метках в GLSL и получил базовое понимание от http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm и различных шейдеров на сайте ShaderToy.
Я создал шейдер, в котором я использую функцию расстояния со знаком для тора, а затем повторяю форму, применяю вращение и перемещаю камеру (см. https://www.shadertoy.com/view/MdlcD7).
Моя проблема заключается в том, что после применения вращений к торам на поверхностях появляются артефакты. Если я уберу повороты (закомментируем строки 30 и 31 шейдера), артефакты больше не будут появляться. Точно так же, если я добавлю небольшой коэффициент обратного шага к лучевой метке (не комментируя часть строки 4), то артефакты будут удалены. Однако, если я изменю значение этого коэффициента обратного перехода, артефакты вернутся.
Мои вопросы:
1) Что это за повороты, которые вызывают артефакты?
2) Если верным шагом является верный шаг, то как мне определить надежный фактор для применения, который работает с любыми значениями, которые я применяю к функции sdTorus?
3) Если я перейду от использования sdTorus к использованию функции sdBox (не комментируя строку 32), то как это изменит мои ответы (если вообще будет) на первые два вопроса?
Спасибо заранее