Is there a good formula to convert the specular exponent (glossiness) of the Blinn-Phong NDF to the roughness value of the Trowbridge-Reitz NDF?
I've tried something like [eqn]\frac{1}{\sqrt{\alpha}}[/eqn], but that doesn't work that well. Is there a better approximation?
I'm currently changing the BRDF to an actual Cook-Torrance BRDF with Trowbridge-Reitz distribution, Schlick fresnel and Smith-Trowbridge-Reitz geometry factor. The BRDF itself is only 27 clock cycles on a Fermi or Kepler GPU (NDotL, NDotH, LDotH, ... not included). It's fast enough, so there's no reason for me to use a weak approximation of Cook-Torrance. But all my models are still storing Blinn-Phong glossiness, that's why I need to convert them.
I actually would want to use an approximation for [eqn]1+\sqrt{1+\alpha\frac{\sqrt{1-(N\cdot L)^2}}{N\cdot L}}[/eqn] though. That's the worst part of the whole BRDF. The 2 square roots alone take 12 clock cycles
Blinn-Phong Specular Exponent to Trowbridge-Reitz Roughness
Damn google! I just searched for "Trowbridge Reitz", and despite this being a 70's publication, this thread came up as the 3rd result!
You could always brute-force yourself a conversion look-up table. Render a couple-hundred spheres with a single point light and your full range of spec-power and roughness values. Then compare each "power" image against each "roughness" image to find which one produces the least error, and use that to generate a LUT converter. Repeat with different lighting angles, and average the resulting roughness suggestions for robustness
You could always brute-force yourself a conversion look-up table. Render a couple-hundred spheres with a single point light and your full range of spec-power and roughness values. Then compare each "power" image against each "roughness" image to find which one produces the least error, and use that to generate a LUT converter. Repeat with different lighting angles, and average the resulting roughness suggestions for robustness
If no one comes up with a solution, I'm probably going to do that. Too bad that the Trowbridge-Reitz NDF isn't that well known
I could try modifying the conversion function for Beckmann roughness, because they might not differ that much. Beckmann is more well known, so what's the conversion function for the Beckmann NDF?
Update: This, is the approximation I came up with:
[eqn]f(\alpha)=
\begin{cases}
0.773871 - 0.160132 \ln(\alpha) & \alpha\in [0,24] \\
0.606127 - 0.105979 \ln(\alpha) & \alpha\in (24,60] \\
0.4008 - 0.0562807 \ln(\alpha) & \alpha\in (60,\infty)
\end{cases}[/eqn]
I could try modifying the conversion function for Beckmann roughness, because they might not differ that much. Beckmann is more well known, so what's the conversion function for the Beckmann NDF?
Update: This, is the approximation I came up with:
[eqn]f(\alpha)=
\begin{cases}
0.773871 - 0.160132 \ln(\alpha) & \alpha\in [0,24] \\
0.606127 - 0.105979 \ln(\alpha) & \alpha\in (24,60] \\
0.4008 - 0.0562807 \ln(\alpha) & \alpha\in (60,\infty)
\end{cases}[/eqn]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement