GLSL 效果示例

光线步进圆环:从内孔观察甜甜圈的自遮挡

相机绕行时,内孔、背面和前缘保持正确遮挡。

在线示例

修改右侧代码,左侧预览会实时更新。

观察什么

相机绕行时,内孔、背面和前缘保持正确遮挡。

实现原理

先计算点到圆环主圆的二维距离,再减去管半径;从不同角度检查内孔的遮挡。

找到控制效果的代码

return length(vec2(length(p.xz)-.6,p.y))-.22;

动手修改

在 length(vec2(length(p.xz)-.6,p.y))-.22 中,把管半径 .22 改为 .12。圆环会变细,中心孔扩大,主半径仍为 0.6。

调试与成本

主追踪使用精确圆环距离,命中后再做六次法线查询。把相机 ro.y 从 1.5 提高到 2.0,可从更高处观察中心孔;射线仍通过 p.y-.9 朝下方投射。

用到的内置函数

一步步学会这个效果