GLSL 效果示例

霓虹光晕

用一个小数除以到线条的距离,做出一个发光的霓虹圆环。

在线示例

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

工作原理

abs(length(p) - 0.55) 是到半径 0.55 的圆形线条的距离,而不是到实心圆盘的距离。正好在圆环上时是 0,往两边都会变大。

光晕来自 0.015 / d。除以距离意味着:线上的像素得到一个很大的值,稍远一点的得到中等的值,很远的几乎是 0。这条又长又柔的尾巴,让它看起来像光而不是一条实心描边。max(d, 0.001) 是为了避免除以 0。

1.0 - exp(-color) 是一个简单的色调映射。没有它,最亮的中心会被截断成一片平平的蓝色;有了它,中心会渐渐变白,更像真实的霓虹灯。

试着改一改

修改效果
0.015 改成 0.05光晕更大更亮
vec3(0.2, 0.7, 1.0) 改成 vec3(1.0, 0.2, 0.6)粉色霓虹
length(p) 改成 max(abs(p.x), abs(p.y))发光的方框代替圆环
删掉 exp 那一行中心出现生硬的截断,对比一下就知道色调映射的作用

用到的内置函数

一步步学会这个效果