PK dK*9K diff.patchdiff -ur --binary model3emu/Src/Graphics/New3D/R3DShader.cpp model3emu-patch/Src/Graphics/New3D/R3DShader.cpp --- model3emu/Src/Graphics/New3D/R3DShader.cpp 2017-11-04 21:42:25.000000000 +0100 +++ model3emu-patch/Src/Graphics/New3D/R3DShader.cpp 2017-11-04 21:54:16.438476500 +0100 @@ -234,22 +234,25 @@ // for now assume fixed shading doesn't work with specular if (specularEnabled) { - float exponent, NdotL, specularFactor; - vec4 biasIndex, expIndex, multIndex; + float exponent, multiplier, NdotL, specularFactor; + vec4 expIndex, multIndex; // Always clamp floor to zero, we don't want deep black areas NdotL = max(0.0,sunFactor); + // (Experimental) 256 level posterization, mostly evident in Harley + NdotL = round(NdotL * 255.0) / 255.0; - expIndex = vec4(8.0, 16.0, 32.0, 64.0); - multIndex = vec4(2.0, 2.0, 3.0, 4.0); - biasIndex = vec4(0.95, 0.95, 1.05, 1.0); - exponent = expIndex[int(shininess)] / biasIndex[int(shininess)]; + expIndex = vec4(9.0, 17.0, 40.0, 88.0); + multIndex = vec4(2.0, 1.7, 4.0, 6.0); + + exponent = expIndex[int(shininess)]; + multiplier = multIndex[int(shininess)]; specularFactor = pow(NdotL, exponent); - specularFactor *= multIndex[int(shininess)]; - specularFactor *= biasIndex[int(shininess)]; - + specularFactor *= multiplier; + specularFactor *= specularValue; + specularFactor *= lighting[1].x; if (colData.a < 1.0) { PK dK*9K $ diff.patch UUH}QPK\