Improved emissive mapping
Used a different way to achieve this effect, thanks to Fissal Former-commit-id: c08b82ca1609e73f1dfcc171a515c8456dee86eb
This commit is contained in:
parent
b448709836
commit
633b3bb7ba
|
|
@ -127,14 +127,6 @@ namespace
|
||||||
sourceCode += "void main()\n"
|
sourceCode += "void main()\n"
|
||||||
"{\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)
|
if (flags & nzShaderFlags_Lighting)
|
||||||
{
|
{
|
||||||
sourceCode += "vec3 light = vec3(0.0, 0.0, 0.0);\n";
|
sourceCode += "vec3 light = vec3(0.0, 0.0, 0.0);\n";
|
||||||
|
|
@ -278,29 +270,30 @@ namespace
|
||||||
sourceCode += "}\n"
|
sourceCode += "}\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
sourceCode += fragmentColorKW + " = vec4(light, MaterialDiffuse.a)";
|
sourceCode += "vec3 lighting = light";
|
||||||
|
|
||||||
if (flags & nzShaderFlags_DiffuseMapping)
|
if (flags & nzShaderFlags_DiffuseMapping)
|
||||||
sourceCode += '*' + textureLookupKW + "(MaterialDiffuseMap, vTexCoord)";
|
sourceCode += "*vec3(" + textureLookupKW + "(MaterialDiffuseMap, vTexCoord))";
|
||||||
|
|
||||||
if (flags & nzShaderFlags_SpecularMapping)
|
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";
|
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)
|
else if (flags & nzShaderFlags_DiffuseMapping)
|
||||||
sourceCode += fragmentColorKW + " = " + textureLookupKW + "(MaterialDiffuseMap, vTexCoord);\n";
|
sourceCode += fragmentColorKW + " = " + textureLookupKW + "(MaterialDiffuseMap, vTexCoord);\n";
|
||||||
else
|
else
|
||||||
sourceCode += fragmentColorKW + " = MaterialDiffuse;\n";
|
sourceCode += fragmentColorKW + " = MaterialDiffuse;\n";
|
||||||
|
|
||||||
if (flags & nzShaderFlags_EmissiveMapping)
|
|
||||||
{
|
|
||||||
sourceCode += "}\n"
|
|
||||||
"else\n"
|
|
||||||
+ fragmentColorKW + " = vec4(emissive, MaterialDiffuse.a);\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sourceCode += "}\n";
|
sourceCode += "}\n";
|
||||||
|
|
||||||
return sourceCode;
|
return sourceCode;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue