Shading by Cube Mapping

拡散反射光と鏡面反射光の計算結果をそれぞれテクスチャーに保存しておいてキューブマッピング + マルチテクスチャーでレンダリングしているだけ。キューブマッピングで使うテクスチャーは自作ツールで生成した。シェーダーは以下の通りすごく単純。特定の条件下では高速化の手法として結構有効かもしれない。

// vertex shader
#version 120

varying vec3 N;

void main()
{
	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
	N = gl_NormalMatrix * gl_Normal;
}
// fragment shader
#version 120

uniform samplerCube DiffuseMap;
uniform samplerCube SpecularMap;
uniform vec3 DiffuseMaterial;
uniform vec3 SpecularMaterial;

varying vec3 N;

void main()
{
	vec3 kd = textureCube(DiffuseMap, N).rgb;
	vec3 ks = textureCube(SpecularMap, N).rgb;
	vec3 color = DiffuseMaterial*kd + SpecularMaterial*ks;
	gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0);
}