Phong reflection model: Difference between revisions

Content deleted Content added
Added a schema from the Blinn-Phong article wich is a graphic represenation of the vectors used in the Phong reflection model equation.
Link suggestions feature: 3 links added.
Tags: Visual edit Mobile edit Mobile web edit Newcomer task Suggested: add links
 
(43 intermediate revisions by 36 users not shown)
Line 1:
{{Short description|Shading algorithm in computer graphics}}
{{distinguish|Phong shading}}
[[Image:Phong components version 4.png|655pxthumb|center|thumb700px|Visual illustration of the Phong equation: here the light is white, the ambient and diffuse colors are both blue, and the specular color is white, reflecting a small part of the light hitting the surface, but only in very narrow highlights. The intensity of the diffuse component varies with the direction of the surface, and the ambient component is uniform (independent of direction).]]
The '''Phong reflection model''' (also called '''Phong illumination''' or '''Phong lighting''') is an [[Empirical_modelling|empirical model]] of the [[illumination model|local illumination]] of points on a [[surface]]. In [[3D computer graphics]], it is sometimes ambiguously referred to as [[Phong shading]], in particular if the model is used in combination with the interpolation method of the same name and in the context of [[pixel shader]]s or other places where a lighting calculation can be referred to as “[[shading]]”.
 
The '''Phong reflection model''' (also called '''Phong illumination''' or '''Phong lighting''') is an [[Empirical_modellingEmpirical modelling|empirical model]] of the [[illumination model|local illumination]] of points on a [[Surface (mathematics)|surface]] designed by the computer graphics researcher [[Bui Tuong Phong]]. In [[3D computer graphics]], it is sometimes ambiguously referred to as [[<!--DO NOT LINK-->"Phong shading]]"<!--DO NOT LINK-->, in particularparticularly if the model is used in combination with the [[Phong shading|interpolation method of the same name]] and in the context of [[pixel shader]]s or other places where a lighting calculation can be referred to as “[[shading]]”.
 
== History ==
The Phong reflection model was developed by [[Bui Tuong Phong]] at the [[University of Utah]], who published it in his 1973 Ph.D. dissertation.<ref>Bui Tuong Phong, [http://www.cs.northwestern.edu/~ago820/cs395/Papers/Phong_1975.pdf Illumination for computer generated pictures], Communications of ACM 18 (1975), no. 6, 311–317.</ref><ref>University of Utah School of Computing, http://www.cs.utah.edu/school/history/#phong-ref</ref> It was published in conjunction with a method for interpolating the calculation for each individual [[pixel]] that is rasterized from a polygonal surface model; the interpolation technique is known as [[Phong shading]], even when it is used with a reflection model other than Phong's. Phong's methods were considered radical at the time of their introduction, but have since become the de facto baseline shading method for many rendering applications. Phong's methods have proven popular due to their generally efficient use of computation time per rendered pixel.
 
The Phong reflection model was developed by [[Bui Tuong Phong]] at the [[University of Utah]], who published it in his 19731975 Ph.D. dissertation.<ref>Bui Tuong Phong, [http://www.cs.northwestern.edu/~ago820/cs395/Papers/Phong_1975.pdf Illumination for computer generated pictures], Communications of ACM 18 (1975), no. 6, 311–317.</ref><ref>University of Utah School of Computing, http://www.cs.utah.edu/school/history/#phong-ref</ref> It was published in conjunction with a method for interpolating the calculation for each individual [[pixel]] that is rasterized from a polygonal surface model; the interpolation technique is known as [[Phong shading]], even when it is used with a reflection model other than Phong's. Phong's methods were considered radical at the time of their introduction, but have since become the de facto baseline shading method for many rendering applications. Phong's methods have proven popular due to their generally efficient use of computation time per rendered pixel.
== Description ==
 
Phong reflection is an empirical model of local illumination. It describes the way a surface reflects light as a combination of the [[diffuse reflection]] of rough surfaces with the [[specular reflection]] of shiny surfaces. It is based on [[Bui Tuong Phong]]'s informal observation that shiny surfaces have small intense [[specular highlight]]s, while dull surfaces have large highlights that fall off more gradually. The model also includes an ''ambient'' term to account for the small amount of light that is scattered about the entire scene.
== Concepts ==
 
Phong reflection is an empirical model of local illumination. It describes the way a surface reflects light as a combination of the [[diffuse reflection]] of rough surfaces with the [[specular reflection]] of shiny surfaces. It is based on [[Bui Tuong Phong]]'s informal observation that shiny surfaces have small intense [[specular highlight]]s, while dull surfaces have large highlights that fall off more gradually. The model also includes an ''ambient'' term to account for the small amount of light that is scattered about the entire scene.
[[Image:Phong components version 4.png|655px|center|thumb|Visual illustration of the Phong equation: here the light is white, the ambient and diffuse colors are both blue, and the specular color is white, reflecting a small part of the light hitting the surface, but only in very narrow highlights. The intensity of the diffuse component varies with the direction of the surface, and the ambient component is uniform (independent of direction).]]
 
For each light source in the scene, components <math>i_\text{s}</math> and <math>i_\text{d}</math> are defined as the intensities (often as [[RGB]] values) of the specular and diffuse components of the light sources, respectively. A single term <math>i_\text{a}</math> controls the ambient lighting; it is sometimes computed as a sum of contributions from all light sources.
Line 21 ⟶ 24:
[[File:Blinn_Vectors.svg|thumb|Vectors for calculating Phong and Blinn–Phong shading]]
 
Furthermore, wethere haveis
 
:<math>\text{lights}</math>, which is the [[set (mathematics)|set]] of all light sources,
:<math>\hat{L}_m</math>, which is the direction vector from the point on the surface toward each light source (<math>m</math> specifies the light source),
:<math>\hat{N}</math>, which is the [[Surface normal|normal]] at this point on the surface,
Line 39 ⟶ 42:
:<math>\hat{R}_m = 2(\hat{L}_m\cdot \hat{N})\hat{N} - \hat{L}_m</math>
 
and theThe hats indicate that the vectors are [[Unit vector|normalized]]. The diffuse term is not affected by the viewer direction (<math>\hat{V}</math>). The specular term is large only when the viewer direction (<math>\hat{V}</math>) is aligned with the reflection direction <math>\hat{R}_m</math>. Their alignment is measured by the <math>\alpha</math> power of the cosine of the angle between them. The cosine of the angle between the normalized vectors <math>\hat{R}_m</math> and <math>\hat{V}</math> is equal to their [[dot product]]. When <math>\alpha</math> is large, in the case of a nearly mirror-like reflection, the specular highlight will be small, because any viewpoint not aligned with the reflection will have a cosine less than one which rapidly approaches zero when raised to a high power.
 
Although the above formulation is the common way of presenting the Phong reflection model, each term should only be included if the term's dot product is positive. (Additionally, the specular term should only be included if the dot product of the diffuse term is positive.)
 
When the color is represented as [[RGB]] values, as often is the case in [[computer graphics]], this equation is typically modeled separately for R, G and B intensities, allowing different reflectionsreflection constants <math>k_\text{a},</math> <math>k_\text{d}</math> and <math>k_\text{s}</math> for the different [[Channel (digital image)|color channels]].
 
=== Computationally more efficient alterations ===
When implementing the Phong reflection model, there are a number of methods for approximating the model, rather than implementing the exact formulas, which can speed up the calculation; for example, the [[Blinn–Phong reflection model]] is a modification of the Phong reflection model, which is more efficient if the viewer and the light source are treated to be at infinity.
 
Another approximation<ref>{{cite web |url=http://dicklyon.com/tech/Graphics/Phong_TR-Lyon.pdf |title=Phong Shading Reformulation for Hardware Renderer Simplification |last1=Lyon |first1=Richard F. |date= August 2, 1993 |work= |publisher= |accessdateaccess-date=7 March 2011}}</ref> alsothat addresses the computationcalculation of the specularexponentiation term sincein the calculation of the powerspecular term mayis be computationallythe expensive.following: Considering that the specular term should be taken into account only if its dot product is positive, it can be approximated by realizing thatas
 
:<math>\max(0, \hat{R}_m \cdot \hat{V})^\alpha = \max(0, 1-\lambda)^{\beta \gamma} = \left(\max(0,1-\lambda)^\beta\right)^\gamma \approx \max(0, 1 - \beta \lambda)^\gamma </math>
 
forwhere <math>\lambda = 1 - \hat{R}_m \cdot \hat{V}</math>, for a sufficiently large, fixed integer <math>\gamma</math> (typically 4 will be enough), whereand <math>\beta = \alpha / \gamma\,</math> is a [[real number]] (notwhich necessarilydoesn't have to be an [[integer)]]. The valueIf <math>\lambdagamma</math> canis chosen to be furthera approximatedpower asof 2, i.e. <math>\lambdagamma = (\hat{R}_m2^n</math> -where \hat{V})\cdot(\hat{R}_m - \hat{V}) / 2<math>n</math>; thisis squaredan distanceinteger, betweenthen the vectorsexpression <math>\hat{R}_m</math>(1 and- <math>\hat{V}beta\lambda)^\gamma</math> iscan muchbe lessmore sensitiveefficiently tocalculated normalizationby errors in those vectors than is Phong's dot-product-basedsquaring <math>\lambda = (1 - \hat{R}_m beta\lambda)\cdot \hat{V}n</math> times, i.e.
 
:<math>(1 - \beta\lambda)^\gamma \,=\, (1 - \beta\lambda)^{2^n} \,=\, (1 - \beta\lambda)^{\overbrace{\scriptstyle 2\,\cdot\,2\,\cdot\,\dots\,\cdot\,2}^n} \,=\, (\dots((1 - \beta\lambda)\overbrace{^2)^2\dots)^2}^n.</math>
The <math>\gamma</math> value can be chosen to be a fixed power of 2, <math>\gamma = 2^n</math> where <math>n</math> is a small integer; then the expression <math>(1 - \beta\lambda)^\gamma</math> can be efficiently calculated by squaring <math>(1 - \beta\lambda)</math> <math>n</math> times. Here the ''shininess'' parameter is <math>\beta</math>, proportional to the original parameter <math>\alpha</math>.
 
This approximation of the specular term holds for a sufficiently large integer <math>\gamma</math> (typically, 4 or 8 will be enough).
 
Furthermore, the value <math>\lambda</math> can be approximated as <math>\lambda = (\hat{R}_m - \hat{V})\cdot(\hat{R}_m - \hat{V}) / 2</math>, or as <math>\lambda = (\hat{R}_m \times \hat{V})\cdot(\hat{R}_m \times \hat{V}) / 2.</math> The latter is much less sensitive to normalization errors in <math>\hat{R}_m</math> and <math>\hat{V}</math> than Phong's dot-product-based <math>\lambda = 1 - \hat{R}_m \cdot \hat{V}</math> is{{Citation needed|reason=Lyon-1993 does not reference this anywhere|date=April 2022}}, and practically doesn't require <math>\hat{R}_m</math> and <math>\hat{V}</math> to be normalized{{Citation needed|reason=Lyon-1993 does not reference this anywhere|date=April 2022}} except for very low-resolved triangle meshes.
 
This method substitutes a few multiplications for a variable exponentiation, and removes the need for an accurate reciprocal-square-root-based vector normalization.
 
== Inverse Phong reflection model ==
 
The Phong reflection model in combination with [[Phong shading]] is an approximation of shading of objects in real life. This means that the Phong equation can relate the shading seen in a [[photograph]] with the surface normals of the visible object. Inverse refers to the wish to estimate the surface normals given a rendered image, natural or computer-made.
 
The Phong reflection model contains many parameters, such as the surface diffuse reflection parameter ([[albedo]]) which may vary within the object. Thus the normals of an object in a photograph can only be determined, by introducing additional information such as the number of lights, light directions and reflection parameters.
 
For example, we have a cylindrical object, for instance a finger, and wish to compute the normal <math>N=[N_x, N_z]</math> on a line on the object. We assume only one light, no specular reflection, and uniform known (approximated) reflection parameters. We can then simplify the Phong equation to:
 
:<math>I_p(x) = C_a + C_d (L(x) \cdot N(x)) </math>
Line 80 ⟶ 87:
:<math>1 = \sqrt{(N_x^2 + N_z^2)}</math>
 
Because of the powers of two in the equation there are two possible solutions for the normal direction. Thus some prior information of the geometry is needed to define the correct normal direction. The normals are directly related to angles of inclination of the line on the object surface. Thus the normals allow the calculation of the relative surface heights of the line on the object using a [[line integral]], if we assume a continuous surface.
 
If the object is not cylindrical, we have three unknown normal values <math>N=[N_x, N_y, N_z]</math>. Then the two equations still allow the normal to rotate around the view vector, thus additional constraints are needed from prior geometric information. For instance in [[facial recognition system|face recognition]] those geometric constraints can be obtained using [[principal component analysis]] (PCA) on a database of depth-maps of faces, allowing only surface normals solutions which are found in a normal population.<ref>{{cite journalbook| title=Model-Based Illumination Correction for Face Images in Uncontrolled Scenarios|date=September 2009| authorlast1=Boom, |first1= B.J. and |last2=Spreeuwers,|first2= L.J. and |last3=Veldhuis,|first3= R.N.J.| journal= Lecture Notes in Computer Science| volume=5702| pages=33–40| doi=10.1007/978-3-642-03767-2 | issue=2009| series=Lecture Notes in Computer Science| editor1-last=Jiang| editor1-first=Xiaoyi| editor2-last=Petkov| editor-link2= Nicolai Petkov| editor2-first=Nicolai| isbn=978-3-642-03766-5| url=https://halshs.archives-ouvertes.fr/halshs-00420059/document| bibcode=2009LNCS.5702.....J| hdl=11693/26732| hdl-access=free}}</ref>
 
== Applications ==
 
As already implied, theThe Phong reflection model is often used together with [[Phong shading]] to shade surfaces in [[3D computer graphics]] software. Apart from this, it may also be used for other purposes. For example, it has been used to model the reflection of [[thermal radiation]] from the [[Pioneer program|Pioneer probes]] in an attempt to explain the [[Pioneer anomaly]].<ref>{{cite journal|title=Modelling the reflective thermal contribution to the acceleration of the Pioneer spacecraft|authorauthor1=F. Francisco, |author2=O. Bertolami, |author3=P. J. S. Gil, |author4=J. Páramos |doi=10.1016/j.asr.2011.10.016|year=2012|journal=Advances in Space Research|volume=49|issue=3|pages=579337–346|arxiv=1103.5222|bibcode=2012AdSpR..49..579S}}</ref>
 
== See also ==
 
{{Portal|Computer graphics}}
* [[{{anl|Bidirectional reflectance distribution function]] – another reflection model}}
* [[List of common shading algorithms]]
* {{anl|Blinn–Phong shading model}}
* [[Bidirectional reflectance distribution function]] – another reflection model
* [[{{anl|List of common shading algorithms]]}}
* [[Blinn–Phong shading model]] – alteration of the Phong reflection model to trade precision with computing efficiency
* {{anl|Gamma correction}}
* [[Phong shading]] – shading technique that interpolates normal vectors rather than intensities
* {{anl|Phong shading}}
* [[Specular highlight]] – other specular lighting equations
* {{anl|Specular highlight}}
 
== References ==
 
{{refs}}
 
==External links==
* [http://michal.is/projects/phong-reflection-model-matlab/ Phong reflection model in Matlab]
 
* [https://web.archive.org/web/20160525135133/http://michal.is/projects/phong-reflection-model-matlab/ Phong reflection model in Matlab]
==References==
* {{usurped|1=[https://web.archive.org/web/20180816064924/http://www.sunandblackcat.com/tipFullView.php?l=eng&topicid=30 Phong reflection model in GLSL]}}
<references />
 
{{DEFAULTSORT:Phong Reflection Model}}
[[Category:Computer graphics algorithms]]
[[Category:Shading]]