Improved emissive mapping

Used a different way to achieve this effect, thanks to Fissal


Former-commit-id: c08b82ca1609e73f1dfcc171a515c8456dee86eb
This commit is contained in:
Lynix 2013-04-06 21:27:35 +02:00
parent b448709836
commit 633b3bb7ba
1 changed files with 12 additions and 19 deletions

View File

@ -127,14 +127,6 @@ namespace
sourceCode += "void main()\n"
"{\n";
if (flags & nzShaderFlags_EmissiveMapping)
{
// Les emissive map court-circuitent l'éclairage
sourceCode += "vec3 emissive = vec3(" + textureLookupKW + "(MaterialEmissiveMap, vTexCoord));\n"
"if (emissive == vec3(0.0, 0.0, 0.0))\n"
"{\n";
}
if (flags & nzShaderFlags_Lighting)
{
sourceCode += "vec3 light = vec3(0.0, 0.0, 0.0);\n";
@ -278,29 +270,30 @@ namespace
sourceCode += "}\n"
"\n";
sourceCode += fragmentColorKW + " = vec4(light, MaterialDiffuse.a)";
sourceCode += "vec3 lighting = light";
if (flags & nzShaderFlags_DiffuseMapping)
sourceCode += '*' + textureLookupKW + "(MaterialDiffuseMap, vTexCoord)";
sourceCode += "*vec3(" + textureLookupKW + "(MaterialDiffuseMap, vTexCoord))";
if (flags & nzShaderFlags_SpecularMapping)
sourceCode += " + vec4(si, MaterialDiffuse.a)*" + textureLookupKW + "(MaterialSpecularMap, vTexCoord)"; // Utiliser l'alpha de MaterialSpecular n'aurait aucun sens
sourceCode += " + si*vec3(" + textureLookupKW + "(MaterialSpecularMap, vTexCoord))"; // Utiliser l'alpha de MaterialSpecular n'aurait aucun sens
sourceCode += ";\n";
if (flags & nzShaderFlags_EmissiveMapping)
{
sourceCode += "vec3 emission = vec3(" + textureLookupKW + "(MaterialEmissiveMap, vTexCoord));\n"
+ fragmentColorKW + " = vec4(mix(lighting, emission, length(emission)), MaterialDiffuse.a);";
///NOTE: Pour un shader avec un coût réduit avec une qualité moyenne, il est possible de remplacer "length(emission)" par "dot(emission, emission)"
}
else
sourceCode += fragmentColorKW + " = vec4(lighting, MaterialDiffuse.a);";
}
else if (flags & nzShaderFlags_DiffuseMapping)
sourceCode += fragmentColorKW + " = " + textureLookupKW + "(MaterialDiffuseMap, vTexCoord);\n";
else
sourceCode += fragmentColorKW + " = MaterialDiffuse;\n";
if (flags & nzShaderFlags_EmissiveMapping)
{
sourceCode += "}\n"
"else\n"
+ fragmentColorKW + " = vec4(emissive, MaterialDiffuse.a);\n";
}
sourceCode += "}\n";
return sourceCode;