放射光贴图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DdogYuan/article/details/84585863

放射光贴图

放射光贴图(Emission Map)的东西,它是一个储存了每个片段的发光值(Emission Value)的贴图。发光值是一个包含(假设)光源的物体发光(Emit)时可能显现的颜色,这样的话物体就能够忽略光照条件进行发光(Glow)。
游戏中某个物体在发光的时候,你通常看到的就是放射光贴图(比如机器人的眼睛
机器人的眼睛
或者箱子上的灯带)
箱子上的灯带

GLSL实现

放射光贴图应该作为材质的一个属性:

struct Material {
    sampler2D diffuse;
    sampler2D specular;  
    sampler2D emission;
    float shininess;
}; 

并且在片元着色器中,直接采样给结果(不经过光照计算):

    ...//省略了ambient 和specular分量
    
    // diffuse  漫反射分量是由纹理和光照计算得到的数值相加而成
    vec3 norm = normalize(Normal);
    vec3 lightDir = normalize(light.position - FragPos);
    float diff = max(dot(norm, lightDir), 0.0);
    vec3 diffuse = light.diffuse * diff * texture(material.diffuse, TexCoords).rgb;  

    // emission 放射光贴图直接采样纹理
    vec3 emission = texture(material.emission, TexCoords).rgb;
        
    vec3 result = ambient + diffuse + specular + emission;
    FragColor = vec4(result, 1.0);

参考

LearnOpenGL教程——光照贴图:
https://learnopengl-cn.github.io/02 Lighting/04 Lighting maps/

猜你喜欢

转载自blog.csdn.net/DdogYuan/article/details/84585863
今日推荐