GLSL 效果示例

能量护盾:让六边形网格在球体边缘发亮

球面正面透亮、边缘更亮,一道脉冲沿护盾扩散。

在线示例

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

观察什么

球面正面透亮、边缘更亮,一道脉冲沿护盾扩散。

实现原理

用球面法线的朝向提高边缘亮度,再叠加近似蜂窝网和移动的脉冲带。网格是程序投影,不是实体几何。

找到控制效果的代码

float r=length(p);if(r<.72){float z=sqrt(.72*.72-r*r);vec3 n=normalize(vec3(p,z));vec2 q=p*12.,size=vec2(1.7320508,1.);vec2 a=mod(q,size)-size*.5,b=mod(q-size*.5,size)-size*.5,g=abs(dot(a,a)<dot(b,b)?a:b);float hex=1.-smoothstep(.43,.48,max(dot(g,vec2(.8660254,.5)),g.y));float rim=pow(1.-n.z,3.);float pulse=exp(-pow((p.y-sin(u_time)*.7)*20.,2.));c+=vec3(.05,.65,1.)*(rim*2.+(1.-hex)*.35+pulse)*(0.4+u_parameter);}

动手修改

把 q=p*12. 改成 q=p*6.。投影蜂窝格会变粗,而 r = 0.72 的球形边界与移动的横向脉冲带仍保持原位置。

调试与成本

亮边 pow(1.-n.z,3.) 来自前半球法线,而非三维网格。把指数 3. 改为 6.,亮度会更集中于剪影边缘,不需要增加几何或纹理采样。

用到的内置函数

一步步学会这个效果