放射光貼圖
阿新 • • 發佈:2018-12-15
放射光貼圖
放射光貼圖(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/