GLSL 效果示例

光线步进软阴影:让球体在平面上投出半影

移动光源,同一场景分屏比较硬阴影和软阴影。

在线示例

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

观察什么

移动光源,同一场景分屏比较硬阴影和软阴影。

实现原理

从命中点朝光源再次步进,最近遮挡物相对已走距离决定半影强度;左右比较硬软近似。

找到控制效果的代码

return min(length(p-vec3(0,.2,0))-.55,p.y+.5);

动手修改

把参数从 0 调到 1,柔影因子 4.+u_parameter*18. 会从 4 变成 22。乘数增大时右侧阴影会收紧,左半边仍把同一阴影估计量做阈值判断以形成硬边。

调试与成本

主射线最多走 80 步,命中后还可能沿光线追加最多 28 次 scene 查询。把 j<28 降为 j<12 可减少阴影计算,但即使主表面正确,也可能漏掉较远的遮挡物。

用到的内置函数

一步步学会这个效果