Normalizing the Phong Specular BRDFs

High-Level Motivation and Context

To be correct, a BRDF must conserve energy. Most people take that to mean merely "not gain" energy, because making a BRDF neither gain nor lose energy (which we also call energy-normalization) is often impossible, or at least very difficult.

Energy "conservation" terms are widely known for the Phong BRDF models, but no true energy-normalization terms have heretofore been known. In this paper, we finally derive them, making the Phong BRDFs physically plausible for the first time, at least in terms of maintaining energy.

The Phong BRDF is not popular anymore, so this paper fills a hole in the literature probably few production graphics folks care about—a dot-the-"i"s-cross-the-"t"s kind of paper. That said, the Phong BRDF is easy-to-understand, making it popular for beginners, who ought not to be so constantly discounted. Also, the current unpopularity of the Phong model is primarily due to its lack of physical realism, and this paper significantly improves that realism by adding energy normalization. It is worth noting that this feature is lacking even in many modern BRDFs. The most-popular microfacet model, for example, was only fully normalized fairly recently—and then only stochastically.

TL;DR: probably you want to be using a microfacet model these days, but if you ever want to use a Phong model, at least now you can finally do it right.

(Sidenote: I want to do the same thing for Blinn-Phong, but haven't succeeded yet. Collaborate with me!)


Constant-Time Energy-Normalization
for the Phong Specular BRDFs

Ian Mallett ,   Cem Yuksel

TVCJ '20 The Visual Computer Journal, 2020
CGI '20 Proceedings of the 37th Computer Graphics International, 2020


Fixing energy loss artifacts by using our correct normalization terms. See also Figure 5 in the paper.

Abstract

The Phong and Modified Phong specular BRDFs, although of limited physical basis, are nevertheless some of the simplest BRDFs exhibiting glossy and specular qualities to understand and to implement, making them useful for validation and teaching. Unfortunately, although it is well-known how to make these BRDFs conserve energy (that is, never gain energy), making them energy-normalized (that is, never lose nor gain energy) is far more difficult. Lesser-known algorithms exist, but require the specular exponent \(n\) to be integer-valued, and have \(O(n)\) runtime cost. We express these algorithms as mathematical formulae and generalize to the real-valued specular exponent case. We then simplify and optimize to finally attain an algorithm that is \(O(1)\). Energy normalization makes the Phong BRDFs more physically plausible and therefore both more practically and theoretically useful—and our improvements allow for this energy normalization to be done efficiently and without arbitrary limitations.

Resources

Preprint
Bibtex
Viewable Official Publication
Official Publication Listing
Implementation

Bonus: Microfacet Correspondence

Although not related to the problem of energy normalization, we attempted to match GGX renderings of figure 5 in the paper (but with albedo 1 and constant roughness) by adjusting the specular exponent for the Phong BRDFs. A quick fit minimizing RMSE and some tinkering produced the following model for the specular exponent \(n\) in terms of roughness \(r=\sqrt{\alpha}\):

\[ n(r) := \text{exp}\!\left( c_0 + c_1 r + c_2 r^2 + \frac{c_3}{r+c_4} + \frac{c_5}{r^2+c_6} \right) \]

Where the constants are:

\(c_0\)\(c_1\)\(c_2\)\(c_3\)\(c_4\)\(c_5\)\(c_6\)
Phong 56.772-52.022-2.75800.162460.017847-18.9930.41387
Modified Phong 4258.0-16.183-228.460.576300.042840-7392417.384

We couldn't put this in the paper, but we hope it's helpful!