GLSL 效果示例
高度场地形:沿光线查找山脊与谷底
以高度函数生成山体,控制步长以减少穿透和断层。
在线示例
修改右侧代码,左侧预览会实时更新。
观察什么
以高度函数生成山体,控制步长以减少穿透和断层。
实现原理
高度函数定义地面,保守缩小步长以减轻穿透;高度坡度很大时仍需更谨慎的距离界。
找到控制效果的代码
return (p.y+ .4 - .28*fbm(p.xz*1.4) - .07*sin(p.x*2.))/1.8;
动手修改
在 scene 中把地形振幅 .28*fbm(p.xz*1.4) 降为 .14*fbm(p.xz*1.4)。大尺度山丘会变低,独立的 .07*sin(p.x*2.) 山脊仍保留原振幅。
调试与成本
每一步射线都计算四层 fbm,命中后 normalAt 还要再查询六次 scene。把 scene 的除数 1.8 提高到 2.4 可缩短步长;它可能减少越过表面的情况,但也更容易耗尽 80 步上限。