请教shader大佬,关于用shader画光圈的一些疑问

在网上也看了unity的相关代码,creator也看了案例,还是不明白,主要是这里的颜色不太懂。
下面这段代码就能画一个光圈:
`vec2 uv= v_texCoord.xy;
// 用纹理坐标来确定大小和位置
vec2 position = (uv * 2.-1.0) * vec2(1.0, 1.0);

float d = abs( length(position) - 0.8) * 5.0;
gl_FragColor = vec4(0.1/d, 0.1 / d, 0.2 / d, 1);`

这里不太明白,这里的0.1/d,我试了下d=0.0的时候为白色,当position越接近于0.8的时候d越接近于0,所以越靠近0.8的位置越是白色。 这里的0.1/d不明白,为什么是0.1呢,和5.0功能相同都是控制线条粗细吗?
问题2:这里具体到什么光圈具体到粗细只能看效果吧。
问题3:如果是对一张纹理图使用,怎么能做到只对发光的区域渲染而不影响其他地方?
问题4:我大致翻了下unity shader编程精粹这里0.2/d,分母d为什么可以为0,书上说这样好像不行的。webGL编程指南里没有看到相关内容。
如果是在纹理内画一个光圈,我把片段着色器改为:
float d = abs( length(position) - 0.8) * 5.0;

if( length(position)<0.8 && length(position)>0.7 ){
    gl_FragColor += vec4(0.2/d, 0.2 / d, 0.2 / d, 1);
}else{
    gl_FragColor =src_color;
}

修改后已经没有发光的感觉了。

lightShader.zip (1020.4 KB)
我在网上看到了这篇文章,为什么这段线条对纹理其他区域没有影响,核心代码里并没有看到控制发光区域的部分,

wave_width = abs(1.0 / (50.0 * uv.y));
wave_color = fixed3(wave_width * 1.9, wave_width, wave_width * 1.5);
https://blog.csdn.net/stalendp/article/details/21993227

1赞

代码代为:
vec4 src_color = texture2D(CC_Texture0, v_texCoord).rgba;
vec2 uv= v_texCoord.xy;
// 用纹理坐标来确定大小和位置
vec2 position = (uv * 2.-1.0) * vec2(1.0, 1.0);

float d = abs( length(position) - 0.8) * 5.0;

src_color = src_color + vec4(0.2/d, 0.2 / d, 0.2 / d, 1);

即可