我正在学习GLSL中的光线追踪,并从ShaderToy网站上的http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm和各种着色器中获得了基本的理解。
我创建了一个着色器,我使用带圆角的有符号距离函数,然后重复形状,应用旋转,并移动相机(参见https://www.shadertoy.com/view/MdlcD7)
我的问题是,在将旋转应用于圆环之后,在表面上产生了人工制品。如果我删除旋转(注释掉着色器的第30行和第31行),则不再出现这些人工制品。类似地,如果我向光线追踪引入一个轻微的反向步进因子(通过取消注释第4行的一部分),那么将删除人工制品。但是,如果我改变这个反步因子的值,那么人工制品就会返回。
我的问题是:
1)造成人工制品的轮换是什么?
2)如果后退是正确的方法,那么如何确定一个可靠的因子,它适用于我应用于sdTorus函数的任何值?
3)如果我从使用sdTorus更改为使用sdBox函数(通过取消注释第32行),那么如何将我的答案(如果有的话)改为前两个问题?
非常感谢提前