我目前正在使用一个简单的2D光照算法来创建一个2D聚光灯。下面是一个它目前的样子的例子:
然而,我想在边缘(顶部和底部)添加一个渐变,这样它看起来就像这样:
我目前的照明算法:
vec4 calculateLight(Light light)
{
vec2 fragDirection = fragmentPosition.xy - light.position.xy;
float aspectRatio = resolution.x / resolution.y; //amt of width / height
if (aspectRatio > 1.0)
{
fragDirection.x *= aspectRatio;
}
else
{
fragDirection.x /= aspectRatio;
}
float lightDistance = length(fragDirection);
if (length(fragDirection / light.radius) >= 1.0)
return vec4(0, 0, 0, 1); //outside of radius make it black
if (dot(normalize(fragDirection), normalize(light.spotDir.xy)) < cos(light.spotAngle/2))
return vec4(0, 0, 0, 1); //outside of radius make it black
return light.intensity * (1 - length(fragDirection / light.radius)) * light.colour;
}
1条答案
按热度按时间5hcedyr01#
请尝试以下操作作为起点:
顶点:
片段:
它使用线性衰减线在两侧(Angular )和向前(半径)只需改变光均匀到光结构你使用...
此处预览:
现在你可以玩不同类型的衰减,只要改变线性插值为二次,指数或任何...顺便说一句,我乘以光强度
c
从Angular 和半径在一起,你可能会改变为最小或最大,而不是实现不同的边缘连接在稍微处理了一下常量和方程之后:
片段: