GLSL 效果示例

多层视差山景:用不同速度拉开远近

相机横移,近景比远山更快,前后遮挡关系稳定。

在线示例

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

观察什么

相机横移,近景比远山更快,前后遮挡关系稳定。

实现原理

每层山形使用不同的水平移动速度,按远到近顺序覆盖,远层更浅、近层更暗。

找到控制效果的代码

c=mix(vec3(.05,.1,.24),vec3(.7,.5,.5),uv.y);for(int i=0;i<4;i++){float f=float(i),speed=.04+f*.035;float h=.15+f*.12+.15*fbm(vec2(uv.x*3.+u_time*speed,f*7.));if(uv.y<h)c=mix(vec3(.25,.4,.55),vec3(.03,.08,.12),f/3.);}

动手修改

把 speed=.04+f*.035 中的速度增量 .035 改为 0.。四层山会按同样速度移动,产生视差纵深的相对运动随之消失。

调试与成本

循环共有四层山,每层计算一次四层 fbm 高度。把 i<4 改成 i<2,可只保留两层远山并减少噪声计算;原有 f/3. 仍使用背景层对应的颜色。

用到的内置函数

一步步学会这个效果