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 可减少阴影计算,但即使主表面正确,也可能漏掉较远的遮挡物。