1

我正在学习 GLSL 中的 raymarching,并从http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm和 ShaderToy 网站上的各种着色器中获得了基本的了解。

我创建了一个着色器,我在其中使用圆环的有符号距离函数,然后重复形状、应用旋转并移动相机(请参阅https://www.shadertoy.com/view/MdlcD7

我的问题是,在对环面应用旋转后,表面上会产生人工制品。如果我删除旋转(注释掉着色器的第 30 行和第 31 行),那么伪影将不再出现。类似地,如果我在 raymarching 中引入一个轻微的后退因子(通过取消注释第 4 行的一部分),那么伪影就会被移除。但是,如果我改变这个后退因子的值,那么人工制品就会返回。

我的问题是:

1)导致伪影的旋转是什么?

2)如果后退是正确的方法,那么我如何确定一个可靠的因素来应用,它适用于我应用于 sdTorus 函数的任何值?

3) 如果我从使用 sdTorus 更改为使用 sdBox 函数(取消注释第 32 行),那么这将如何改变我对前两个问题的答案(如果有的话)?

提前谢谢了

4

0 回答 0