That's why I was hoping someone can point out what I'm doing wrong or what I'm missing.
-> see below
Edited by lipsryme, 03 November 2012 - 01:05 PM.
Posted 22 October 2012 - 12:16 PM
Edited by lipsryme, 03 November 2012 - 01:05 PM.
Student at the Games-Academy Frankfurt, Germany.
Posted 03 November 2012 - 12:16 PM
// Calculate Position from linear view space depth float3 ViewRay = input.PositionVS.xyz; float depth = DepthTarget.Sample(PointSampler, input.UV).r; float3 ViewDir = ViewRay * depth; // subtraction by the cam position not needed since we're already in view space
// Compute Fresnel Term (F) using Schlick's approximation float LdotH = max(0, dot(-L, H)); float base = 1 - LdotH; float exponent = pow(base, 5.0f); float3 F = saturate(SpecularAlbedo + (1 - SpecularAlbedo) * exponent); // Lambert float3 kd = NdotL; Lr.rgb += (kd / PI) * Ei; // Normalized Blinn-Phong distribution (D) float D = 0.0f; float NdotH = max(0, dot(N, H)); D = ((SpecularPower + 2) / 2 * PI) * pow(NdotH, SpecularPower); // Beckmann distribution (D) //float NdotH = max(0, dot(N, H)); //float NdotH2 = NdotH * NdotH; //float NdotH4 = NdotH * NdotH * NdotH * NdotH; //float SpecularPower2 = SpecularPower * SpecularPower; //float Beckmann_exponent = -((1 - NdotH2) / (SpecularPower2 * NdotH2)); //float D = 1 * exp(Beckmann_exponent) / PI * SpecularPower2 * NdotH4; // Trowbridge-Reitz (GGX) distribution //float NdotH = max(0, dot(N, H)); //float SpecPow2 = SpecularPower * SpecularPower; //float D = SpecPow2 / PI * pow(((NdotH*NdotH) * (SpecPow2 - 1) + 1), 2); // Cook-Torrance approximation (G) float NdotV = max(0, dot(N, V)); float G = 1.0f; float3 nominator = F * G * D; float denominator = 4 * ((LdotH+0.000001f) * (LdotH+0.000001f)); Ls.rgb += nominator / denominator;
Edited by lipsryme, 03 November 2012 - 01:06 PM.
Student at the Games-Academy Frankfurt, Germany.
Posted 03 November 2012 - 08:27 PM
float D = 1 * exp(Beckmann_exponent) / (PI * SpecularPower2 * NdotH4);
Edited by Bacterius, 03 November 2012 - 08:39 PM.
Posted 04 November 2012 - 05:01 PM
float G = min(1, min(2 * NdH * NdV / VdH, 2 * NdH * NdL / VdH));
Posted 05 November 2012 - 07:31 AM
Edited by lipsryme, 05 November 2012 - 09:02 AM.
Student at the Games-Academy Frankfurt, Germany.