我正在Voxel引擎中实现点光源,我真的在努力获得良好的光流,从光源附近的100%到光半径的0%。
我对该函数有5个参数:
- 浅色(Vec3)
- 光强度(距光的距离,直到衰减为100%的距离)
- 光线到碎片的距离
- 从片段法线到光的角度
- 灯的位置
谁能按正确的方向推动我创建用于计算片段颜色的函数?
我的其中一项实验的图片:
编辑(字节请求当前代码)请注意,这只是我这边的一些实验代码。我从一个网站上获得了一个float att,它虽然可以正常工作,但远非完美。:
void main()
{
// Light color
vec3 torchColor = vec3(1.0f, 1.0f, 1.0f);
float lightAdd = 0.0f;
for (int i=0; i<5; i++) {
vec3 pos = lights[i];
if (pos.x == 0.0f) continue;
float dist = distance(vertex_pos, pos);
if (dist < 9) {
float att=1.0/(1.0+0.1*dist+0.01*dist*dist);
vec3 surf2light = normalize(pos - vertex_pos);
vec3 norm = normalize(normal);
float dcont=max(0.0,dot(norm,surf2light));
lightAdd += att*(dcont+0.4);
}
}
vec3 textureColor = texture2D(texture, texture_coordinate).rgb;
vec3 torch_output = lightAdd * torchColor;
vec3 final_color = ((0.1+torch_output) * textureColor);
gl_FragColor = vec4(final_color, 1.0f);
}
if (dist < 9)
?另外,您可以att
使用一个函数进行计算,该函数在距离为0时返回1,在距离为9时返回0。例如mix(1.0, 0.0, dist / 9.0)