Light: Support for specularmap
The specular map is embedded in the alpha component of texture. Alpha value of 1. means no specular, alpha of 0. means 100% specular. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@14786 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
4435ffbaa0
commit
ec3fd4fa13
@ -1,6 +1,7 @@
|
||||
uniform sampler2D diffuse;
|
||||
uniform sampler2D specular;
|
||||
uniform sampler2D ambient_occlusion;
|
||||
uniform sampler2D specular_map;
|
||||
uniform vec3 ambient;
|
||||
|
||||
void main()
|
||||
@ -9,7 +10,8 @@ void main()
|
||||
|
||||
vec3 diffuse = texture2D(diffuse, texc).xyz;
|
||||
vec3 spec = texture2D(specular, texc).xyz;
|
||||
float specmap = texture2D(specular_map, texc).x;
|
||||
float ao = texture2D(ambient_occlusion, texc).x;
|
||||
|
||||
gl_FragColor = vec4(diffuse + spec + ao * ambient, 1.0);
|
||||
gl_FragColor = vec4(diffuse + spec * specmap + ao * ambient, 1.0);
|
||||
}
|
||||
|
@ -8,16 +8,19 @@ noperspective in vec3 nor;
|
||||
|
||||
void main() {
|
||||
vec4 light = vec4(1.0);
|
||||
vec4 color;
|
||||
|
||||
if (haslightmap != 0) {
|
||||
light = texture2D(lighttex, gl_TexCoord[1].xy);
|
||||
}
|
||||
|
||||
if (hastex != 0)
|
||||
gl_FragData[0] = texture2D(tex, gl_TexCoord[0].xy) * light;
|
||||
color = texture2D(tex, gl_TexCoord[0].xy) * light;
|
||||
else
|
||||
gl_FragData[0] = gl_Color;
|
||||
color = gl_Color;
|
||||
|
||||
gl_FragData[0] = vec4(color.xyz, 1.);
|
||||
gl_FragData[1] = vec4(0.5 * normalize(nor) + 0.5, gl_FragCoord.z);
|
||||
gl_FragData[2] = vec4(1. - color.a);
|
||||
}
|
||||
|
||||
|
@ -13,11 +13,12 @@ void main() {
|
||||
if (col.a < 0.5)
|
||||
discard;
|
||||
|
||||
gl_FragData[0] = col;
|
||||
gl_FragData[0] = vec4(col.xyz, 1.);
|
||||
//} else {
|
||||
// gl_FragData[0] = gl_Color;
|
||||
//}
|
||||
|
||||
gl_FragData[1] = vec4(0.5 * normalize(nor) + 0.5, gl_FragCoord.z);
|
||||
gl_FragData[2] = vec4(1. - col.a);
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@ noperspective in vec3 viewpos;
|
||||
void main() {
|
||||
float rim = 1.0 - dot(eyenor, viewpos);
|
||||
rim = smoothstep(0.5, 1.5, rim) * 0.35;
|
||||
vec4 color;
|
||||
|
||||
if (hastex != 0) {
|
||||
vec4 col = texture2D(tex, gl_TexCoord[0].xy);
|
||||
@ -19,11 +20,13 @@ void main() {
|
||||
|
||||
col.xyz += rim;
|
||||
|
||||
gl_FragData[0] = col;
|
||||
color = col;
|
||||
} else {
|
||||
gl_FragData[0] = gl_Color + vec4(vec3(rim), 0.0);
|
||||
color = gl_Color + vec4(vec3(rim), 0.0);
|
||||
}
|
||||
|
||||
gl_FragData[0] = vec4(color.xyz, 1.);
|
||||
gl_FragData[1] = vec4(0.5 * normalize(nor) + 0.5, gl_FragCoord.z);
|
||||
gl_FragData[2] = vec4(1. - color.a);
|
||||
}
|
||||
|
||||
|
@ -348,6 +348,8 @@ void LightBlendProvider::OnSetConstants(IMaterialRendererServices *srv, int)
|
||||
srv->setVertexShaderConstant("specular", &tex, 1);
|
||||
tex = 2;
|
||||
srv->setVertexShaderConstant("ambient_occlusion", &tex, 1);
|
||||
tex = 3;
|
||||
srv->setVertexShaderConstant("specular_map", &tex, 1);
|
||||
}
|
||||
|
||||
//-------------------------------------
|
||||
|
@ -425,6 +425,7 @@ void IrrDriver::initDevice()
|
||||
m_mrt.reallocate(3);
|
||||
m_mrt.push_back(m_rtts->getRTT(RTT_COLOR));
|
||||
m_mrt.push_back(m_rtts->getRTT(RTT_NORMAL_AND_DEPTH));
|
||||
m_mrt.push_back(m_rtts->getRTT(RTT_SPECULARMAP));
|
||||
|
||||
irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver();
|
||||
gl_driver->extGlGenQueries(1, &m_lensflare_query);
|
||||
|
@ -789,6 +789,7 @@ void IrrDriver::renderLights(const core::aabbox3df& cambox,
|
||||
lightmat.setTexture(0, m_rtts->getRTT(RTT_TMP1));
|
||||
lightmat.setTexture(1, m_rtts->getRTT(RTT_TMP2));
|
||||
lightmat.setTexture(2, m_rtts->getRTT(RTT_SSAO));
|
||||
lightmat.setTexture(3, m_rtts->getRTT(RTT_SPECULARMAP));
|
||||
|
||||
lightmat.MaterialType = m_shaders->getShader(ES_LIGHTBLEND);
|
||||
if (!m_lightviz)
|
||||
|
@ -68,6 +68,7 @@ RTT::RTT()
|
||||
rtts[RTT_TMP4] = drv->addRenderTargetTexture(res, "rtt.tmp4", ECF_R8, stencil);
|
||||
rtts[RTT_NORMAL_AND_DEPTH] = drv->addRenderTargetTexture(res, "rtt.normal_and_depth", ECF_A32B32G32R32F, stencil);
|
||||
rtts[RTT_COLOR] = drv->addRenderTargetTexture(res, "rtt.color", ECF_A16B16G16R16F, stencil);
|
||||
rtts[RTT_SPECULARMAP] = drv->addRenderTargetTexture(res, "rtt.specularmap", ECF_R8, stencil);
|
||||
|
||||
rtts[RTT_HALF1] = drv->addRenderTargetTexture(half, "rtt.half1", ECF_A8R8G8B8, stencil);
|
||||
rtts[RTT_HALF2] = drv->addRenderTargetTexture(half, "rtt.half2", ECF_A8R8G8B8, stencil);
|
||||
|
@ -33,6 +33,7 @@ enum TypeRTT
|
||||
RTT_TMP4,
|
||||
RTT_NORMAL_AND_DEPTH,
|
||||
RTT_COLOR,
|
||||
RTT_SPECULARMAP,
|
||||
|
||||
RTT_HALF1,
|
||||
RTT_HALF2,
|
||||
|
Loading…
x
Reference in New Issue
Block a user