如何防止旋转glsl raymarching表面上的人工制品

时间:2017-03-08 21:31:43

标签: glsl raymarching

我正在学习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行),那么如何将我的答案(如果有的话)改为前两个问题?

非常感谢提前

0 个答案:

没有答案