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.
Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.
Posted 22 October 2012 - 12:16 PM
Edited by lipsryme, 03 November 2012 - 01:05 PM.
Portfolio/Blog: http://marcel-schindler.weebly.com
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.
Portfolio/Blog: http://marcel-schindler.weebly.com
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.
“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”
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.
Portfolio/Blog: http://marcel-schindler.weebly.com
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.
GameDev.net™, the GameDev.net logo, and GDNet™ are trademarks of GameDev.net, LLC.