ArticlePDF Available

Abstract and Figures

Rendering a polygonal surface with Phong normal interpolation allows shading to appear as it would for a true curved surface while maintaining the efficiency and simplicity of coarse polygonal geometry. However, this approximation fails in certain situations, especially for grazing viewing directions. Well-known problems include physically impossible reflections and implausible illumination. Some of these artifacts can be mitigated through special-case processing, although no universal or generally accepted approaches are available. In particular, all known solutions that guarantee that reflected rays will always point outward from the surface also create discontinuities in the reflection ray direction. We present a simple modification of Phong normal interpolation that allows physically plausible reflections and creates an appearance of a smooth surface. We introduce an additional scalar parameter that characterizes the deviation between per-vertex normals and per face normals and use it to adjust linearly interpolated normals. The proposed technique eliminates perceptually objectionable artifacts caused by inconsistencies between the shading and geometric normals while retaining most of the practical advantages and simplicity of the original Phong formulation.
Content may be subject to copyright.
Consistent Normal Interpolation
Alexander Reshetov Alexei Soupikov William R. Mark
Figure 1. Comparison of consistent normal interpolation with Phong normal interpolation. Reflected rays computed using Phong nor mals can incorrectly
reflect inside the model (black pixels in a), but when consistent normal are used (b), this artifact is eliminated. Similar problems occur with environment
mapping (c and d), where green pixels show rays reflected inside the model. For highly tessellated models, reflection artifacts may occur at grazing angles
or silhouettes (e, inward-reflected rays shown as green). Images a, b, and e are ray-traced. Environment lighting is used for images c and d.
Rendering a polygonal surface with Phong normal interpolation
allows shading to appear as it would for a true curved surface
while maintaining the efficiency and simplicity of coarse
polygonal geometry. However, this approximation fails in certain
situations, especially for grazing viewing directions. Well-known
problems include physically impossible reflections and
implausible illumination. Some of these artifacts can be mitigated
through special-case processing, although no universal or
generally accepted approaches are available. In particular, all
known solutions that guarantee that reflected rays will always
point outward from the surface also create discontinuities in the
reflection ray direction.
We present a simple modification of Phong normal interpolation
that allows physically plausible reflections and creates an
appearance of a smooth surface. We introduce an additional scalar
parameter that characterizes the deviation between per-vertex
normals and per face normals and use it to adjust linearly
interpolated normals. The proposed technique eliminates
perceptually objectionable artifacts caused by inconsistencies
between the shading and geometric normals while retaining most
of the practical advantages and simplicity of the original Phong
CR Categories: I.3.7 [Computer Graphics]: Three-Dimensional
Graphics and Realism
Keywords: Phong normal interpolation, reflection model, rendering
e-mail: {alexander.reshetov, alexei.soupikov, william.r.mark}
1 Introduction
When a curved surface is approximated by a polygonal surface the
geometric normals become discontinuous at each polygonal edge.
If these geometric normals are used directly for shading, the result
is a faceted appearance. Phong showed that this faceted
appearance could be eliminated by computing a new shading
normal vector and using it for shading [Phong 1975]. This Phong
normal vector is different from the geometric normal and is
continuously interpolated across the surface from values stored or
computed at vertices. Phong normals can be used wherever sur-
face normals are required: for computing reflected ray directions,
for environment lighting, or directly for shading. However, the
fact that the shading normal is different from the geometric normal
can cause problems in certain situations [Woo et al. 1996].
In particular, if the shading normal is used to compute the direction
of reflected rays, the reflected rays can point into the surface as
shown in Figure 2. This problem was first described by Snyder &
Barr [1987]. Figure 1a illustrates the artifacts that are produced
when ray-tracing a completely reflective polygonal object using
Phong normals. Figure 1c shows that the problem affects
environment lighting as well; reflections into the model are
artificially highlighted in green. The problems are not limited to
coarsely tessellated models, as shown in Figure 1e.
Interpolated normals are also used in local shading computations
[Walia & Singh 2006], typically by taking the dot product of the
interpolated normal with some other vector. The dot product is
then used as an argument of a power function or an exponent
[Schwenk 2009]. For example, the Blinn-Phong reflection model
[Blinn 1977] requires a computation of the dot product of the sur-
face normal with the halfway vector (the halfway vector is defined
as a normalized sum of the eye vector and the light vector). A
negative dot product implies that the light source is behind the
shaded polygon. With Phong normal interpolation, it is possible
for this dot product to be negative across part of a polygon even if
both the light source and the eye are on the front side of the
polygon. This result is physically incorrect in a noticeable way,
envi ro nm en t li ghti ng using
(c) Phong normals (d) consistent normals
(e) grazing angles and silhouettes using Phong normalsray -trac ing u si ng
(a) Phong normals (b) consistent normals
(c) ACM, 2010. This is the author's version of the
work. It is posted here by permission of ACM for your
personal use. Not for redistribution. The definitive
version was published in ACM Transactions on Graphics,
29, 5, December 2010.
Figure 2: If Phong normals are used to compute reflections by
applying the laws of reflection, the reflected ray will point into the
surface at certain grazing angles (b).
Figure 3: Our algorithm guarantees that all rays reflect outward from the
surface, by using the laws of reflection with the new consistent normal
. This guarantee is achieved by making depend on the direction of
the incoming ray.
since all visible points should receive some illumination from any
light source that is not occluded. Figure 13 illustrates this
situation for a light source placed at the camera position.
Many variations of the original Phong interpolation approach have
been proposed. Instead of using linear normal interpolation,
Overveld & Wyvill [1997] proposed a quadratic normal vector
interpolation, designed to compensate for certain limitations of
linear interpolation, in particular undersampling (similar to the
example shown in Figure 8). Lee & Jen [2001] observed that
quadratic interpolation could cause significant rendering artifacts
and proposed using biquadratic interpolation to mitigate these
defects. Lee & Jen’s approach requires pre-computation of six
vector coefficients per triangle.
Neither of these algorithms specifically addresses the problem we
are trying to solve: resolving inconsistences between face normals
and shading normals. Whenever an interpolated normal is
different from the corresponding face normal, a reflection vector
computed directly from the interpolated normal can point into the
surface (as shown in Figure 2b). This problem can occur even for
higher-order surfaces if a separate normal channel is used. One
example of such a dual-channel surface representation is the
recently proposed approximate Catmull-Clark surface [Loop &
Schaefer 2008].
There are some well-known simple fixes that can be used to
eliminate inward-reflected rays, but they introduce undesirable
artifacts. Snyder & Barr [1987] proposed to use the face normal
rather than the shading normal to compute reflections in cases
where the shading normal produces an invalid result. This fix
helps avoid inward-reflected rays, but creates discontinuities at
transition points. Similarly, if clamping to zero is used to avoid
negative dot products with shading normals, it results in flat
illumination for those points (Figure 13b).
The technique that we present eliminates these discontinuities,
which are caused by direct dependence on face normals. To
achieve this, we consider face normals only at triangle vertices.
More specifically, at each vertex we compute a maximum angle
between the vertex normal and all adjacent face normals and
interpolate this angle. At all points inside the polygon, we use the
interpolated angle to conservatively characterize the discrepancy
between the face normal and the standard interpolated normal, and
to make appropriate adjustments to the computation of the
reflection vector. As we will show, this approach guarantees that
the reflected ray will always point outward from the surface, as
sketched in Figure 3, and guarantees that reflection directions will
vary continuously across the mesh. Angle interpolation has been
considered previously by Kuijk and Blake [1989] and Barrera et
al. [2004], but only as a standalone technique designed to simplify
shading computations.
In our approach, the reflection vector is computed directly from
the incoming direction vector, without explicitly computing the
normal vector. But if desired, the new perturbed shading normal
that is implicitly defined by our technique can be expressed
explicitly. We refer to this normal vector as a consistent normal,
and to our overall technique as consistent normal interpolation. It
is important to understand that the consistent normal depends on
the direction of the vector that is being reflected, unlike a standard
Phong normal. Because this dependence is smoothly varying and
the normal is not typically visualized directly, this tradeoff seems
Our approach can also be used to guarantee a positive dot product
between the consistent shading normal and any chosen front-sided
vector. For example, it can guarantee a positive dot product
between the Blinn-Phong halfway vector and the consistent
normal. For this use, the consistent normal depends on the
direction of the halfway vector.
In general, the consistent normal is different from the Phong
normal, even in cases where the Phong normal would not cause
any problems. This behavior is necessary to guarantee continuity.
However, it means that the shape and size of highlights will be
slightly different from those produced directly from Phong
normals. If the original Phong normals are considered to represent
the true surface, then one can also think of the highlights
generated from consistent normals as representing a slightly
different surface. This behavior is a consequence of our goal of
providing valid reflection vectors for all front-sided incoming
directions. The absolute value of the adjustment is largest for
grazing angles and is smallest for almost orthogonal directions (as
shown on Figure 2a and 3a), thus providing plausible
continuously varying illumination.
2 Consistent Normals
Before explaining our technique in detail, we will define some
notation and formally describe Phong normal interpolation. We
will use the subscript ′v′ for values defined at vertices and the
subscript ′f′ for linearly interpolated values (used in fragment
shaders). Phong normal interpolation conceptually requires the
following steps (see Figure 5):
1. For each vertex, compute the vertex normal . Often this
normal is computed by averaging the adjacent face normals,
but the algorithm does not have any dependency on how the
normal is computed.
2. Linearly interpolate the vertex normal for any point inside the
triangle to get the vector .
3. Normalize this vector to obtain the unit-length Phong shading
normal = /||.
4. Compute the dot product of a unit vector with the shading
normal. The vector may be any desired vector. If
required, the reflection vector can be computed as
r = 2 ( ) .
The vector is an approximation of the curved surface's normals.
However, there is no guarantee that any true surface exists with
normals equal to the Phong normals everywhere [Overveld &
Wyvill 1997; Lee & Jen 2001]. The Phong normal interpolation is
just a convenient mechanism to compute a continuously varying dot
product or a reflection vector.
(a) (b)
(a) (b)
Figure 4: The laws of reflection define the relationship between the
incident vector , the true surface normal , and the reflected ray . The
angle of incidence is equal to the angle of reflection; vectors, N, and R
are coplanar. The maximum radiance is received for the camera direction
ER. These same equations are also used to compute the reflection
direction for a shading normal.
Figure 5: Definition of vectors and angles used in equations. n the
surface normal; r the reflected ray; the given vector (same as
incident vector, but with reversed direction) , the Phong shading
normal, the new consistent normal. We want to find an expression
for the reflected vector r that will depend only on the vectors and
and that satisfies certain goals stated in this section.
Additional per-vertex values can be defined in step 1 and used to
modify the normal . For example, displacement mapping and
normal mapping define texture coordinates at the vertices, fetch a
value at each fragment using the interpolated texture coordinates,
and use this value to modify the normal.
Similarly, in our algorithm we define one additional scalar value
at each vertex, which is the maximum angle between the vertex
normal and any of the adjacent face normals. This value is then
interpolated and used to compute the new consistent normal
with a formula that we will define.
In the next section, we will describe the requirements that this
formula will satisfy and derive a closed-form expression for the
new consistent normal , which is a very simple perturbation of
the Phong normal .
2.1 Goals and Notation
In describing our algorithm, we will use the vectors and angles
defined in Figure 5. Initially, we will pursue the goal of defining a
new consistent shading normal which guarantees outward facing
reflection vectors. Then we will show how to use the consistent
normal in the Blinn-Phong and other shading models.
According to the laws of reflection (Figure 4), a reflected ray lies
in the plane defined by the incident ray and the true surface
normal. In the spirit of Phong approach, we will apply the laws of
reflection to shading normals as well, even though the shading
normal does not correspond to a real surface. Since the incoming
ray , the Phong normal , and the reflected ray r are coplanar,
we can use scalar angles to characterize the mutual positions of
the vectors, such as the angle between and , and the angle
between r and . The angles and are in the [0, ] interval.
Informally, we would like to determine the angle as a function
of the angle , such that we guarantee that the reflection vector is
outward facing as illustrated in Figure 3. Note that if Phong
normals are used for reflections, then In contrast, we will
determine such that it is always less than /2. We will
maintain the qualitative behavior of : its value will grow
monotonically with growing values of .
It is more convenient to work with cosines of angles rather than
with the angles themselves, since dot products can be easily
computed. Accordingly, our goal is to determine g = cos() as a
function of b = cos(). More formally, we want to determine a
function f(b, p) such as g = f(b, p) for every given point p inside a
triangle. In a traditional case, when the Phong normalis used
for reflection, f(b, p) b for each pixel (yielding ).
If we want r to be continuous across edges, f should not depend
on the geometric normal n, either explicitly or implicitly (since
the geometrical normal is discontinuous). Yet the requirement that
the reflected ray point away from the surface is defined in terms
of n (as n  0). There would seem to be a problem here, but it
is easy to see that there are functions f that yield a continuous r
and satisfy the condition n  0. For example, f is one such
function. Unfortunately, this function results in r, which
does not yield the expected behavior for the reflection vector.
To find more perceptually plausible expressions for f, we will first
formulate physically-based requirements that all such functions
should satisfy (thereby formalizing the behavior sketched in
Figure 3). We start with several observations. The maximum
value of the argument b is 1 (reached when the angle is at its
minimum value of 0). Its minimum value is cos(), since
cannot exceed , where is an angle between  and
the geometric normal . This statement is true for any incoming
direction, not just one in the same plane as  and as shown in
Figure 5.
The following goals stipulate that f should have its minimum for
b = ), have its maximum for b = 1, and vary
continuously and monotonically in between:
GOAL 1. f should be continuous to allow continuously varying
GOAL 2. f(b, p) should be a monotone function of b for any given
p. This requirement precludes extraneous highlights.
GOAL 3. The reflected ray should always point away from the
surface – that is, n  0.
GOAL 4. We require that 0 /2, which corresponds to
0f . Rays reflected from true curved surfaces possess this
property, and we want the function f to behave in the same way.
GOAL 5. For a triangle with all per-vertex normals equal to the
face normal, we want , i.e. f(b, p) b. This is equivalent to
the requirement that reflections be defined by the geometric
normal for flat surfaces.
GOAL 6. For orthogonal incident directions (that is, directions
for which ), the new normal should be identical to
the Phong normal, since using Phong normals does not cause
problems for such directions. Mathematically this requirement is
f(, p).
GOAL 7. The maximum value of (and hence the minimum of
f(b, p) ) should be reached when the angle between the and
vectors reaches its maximum value of α + /2. This behavior is
what we expect for a reflection vector.
R=2(I N)N I
2.2 Solution for a Single Point
We first consider how to achieve goals 2 through 7 at a single
point on the surface, ignoring issues of continuity across a triangle
mesh. We will then expand this simplified solution to enforce
continuity (which is formulated as goal 1).
We will look for a linear expression with respect to b for the
function f(b, p), for a given p. Recall that f(b, p) defines g 
as a function of b . Goal 6 specifies that the maximum of
this function occurs at b = 1, and goal 7 specifies that its minimum
occurs at b = ). The value at the minimum
corresponds to a reflected vector which is orthogonal to the face
normal. That is, f(), p) =  = sin(),
allowing us to obtain
1 + ( b 1)
where b
= cos() =
We can verify that the expression (1) satisfies all goals 2 through
7. Goals 6 and 7 are satisfied by design. For goal 5, we can see
that at , f is equal to b. Goal 4 is easily verified. Goal 3 is
satisfied as follows: the n r0 condition is equivalent to the
requirement that  /2, or cos() cos(/2. The
equations (1) allows us to compute f = cos(), and this inequality
is simplified to
 0
It is always true for b sin() = cos(), i.e. for all
front-sided vectors .
Goal 2 is satisfied as follows: The function is monotonically
decreasing on the interval [0, /2], since its derivative is
equal to 2 cos()/(1+sin())2. The plot of is given in
Figure 6. Bigger values of result in smaller angles . For the
extreme case of /2, the reflected ray coincides with .
We can provide an intuitive description of our solution. The
equations (1) for f(b,is a linear blend of f b, which
corresponds to a Phong reflection, and f 1, which corresponds
to a reflected ray which is equal to the Phong normal. The
blending weight is given by . Therefore, the reflected ray
computed using the new approach always lies between the Phong
reflection direction and the Phong normal direction.
2.3 Solution for a Mesh
Now that we understand how to compute a consistent normal for a
single point, we will extend the algorithm to a mesh. The
additional constraint we must meet is to guarantee that continuity
is maintained across edges in the mesh (goal 1).
The basic approach will be to use the solution just derived in
equations (1), but where the angle is approximated in a manner
Figure 6. The function in the equations (1) can be approximated by
the rational expression with about 1% accuracy.
that is continuous across the mesh. Additionally, we will want an
approximation that is always greater than the true value of . Such
an approximation will guarantee that reflected rays will always
face outward from the surface, because is a monotonically
decreasing function. We will refer to this kind of approximation
as a conservative approximation. To simplify the discussion, we
will first explain how to compute in a manner that is
continuous, and then later explain how to adjust the computation
to provide the conservative approximation property.
To maintain continuity across the mesh, we follow the standard
strategy of computing a value at each vertex and then linearly
interpolating this value across each mesh polygon. Thus, we
introduce the following variables:
- a value computed at each vertex in the mesh,
representing the maximum angle between the vertex
normal and all adjacent face normals.
- an adjusted value of  computed at each vertex. For
now, let , although we will change this
computation later.
- the linearly interpolated value of ; it is defined for
any point inside the triangle.
Let us now consider how to guarantee that is a conservative
approximation of . Unfortunately the interpolated angle is not
always greater than , but fortunately the difference is rather small.
Thus, our goal will be to scale , such that the scaled angle will be
greater than but not deviate too much from . Appendix A
proves that the global minimum of the difference for all
possible triangles and per-vertex normals is equal to the global
minimum of the following function on the u[0, 1] interval:
(u) 
This function has only one minimum on the [0, 1] interval, which
can be easily found analytically to be at 
(this minimum is negative). Therefore, we can guarantee that for
any given triangle
  
The numerical constant in this inequality is less than 4.075°. We
could just increase all interpolated values by this small angle to
guarantee that n  0. However, this approach would introduce
a constant bias, violate goal 5, and require additional per-pixel
Instead, we will introduce a variable bias at vertices, which will
be added to the value of . We want the bias to be relatively
small for small values of  (characteristic for finely tessellated
surfaces), and then monotonically increase as becomes larger,
since coarsely tessellated surfaces are more likely to cause
problems. The simplest way to achieve this behavior is to scale
each per-vertex angle , as follows:
1 + (1 cos())2
The cosine here is just a dot product of the applicable face normal
and vertex normal. Thus, if the vertex normal is equal to the face
normal, there is no bias. As the vertex normal and the face normal
diverge, the bias increases. The constant can be found by solving
a related 2-dimensional optimization problem (see Appendix A) and
is equal to 0.06096. For all vertex normals that have  45°, this
scaling results in an adjustment of less than 0.3°.
010 20 30 40 50 60 70 80 90
   
 
 
 
max(  ) < 0.0127
We now have a method to compute consistent normals that satisfy
all of the stated goals for a mesh. To recap, at each vertex we
compute  as specified in declaration (3) and scale it as defined
in equation (6) to compute . We interpolate this value across
the triangle to obtain , then apply equations (1) at each point on
the triangle to compute the cosine of the angle between the
reflection vector and the interpolated normal. To compute the
reflection vector r, we apply the law of sines to the triangles
formed by the relevant vectors, resulting in
r /
The calculated vector r has a unit length and does not require
normalization. When , the formula for r simplifies to the
well-known expression r = 2 ( ) .
If explicitly required, the new consistent normal can be
computed as normalize(+r). We can also use the expression for
the cosine of a half-angle to directly compute , given .
This solution has the disadvantage that it computes a
transcendental function at each pixel. This function can be
costly to evaluate on some hardware architectures. To make the
algorithm less computationally expensive, can be
approximated by a rational function If we choose an
approximation for which for any , it will have the
same effect as increasing the angles . This approximation
allows us to decrease the constant and still guarantee that
n  0. The function shown in Figure 6 provides a good
compromise between accuracy of approximation and simplicity of
computation. For this function, the constant is 0.03632
(obtained by solving a 2-dimensional optimization problem
described at the end of Appendix A).
Altogether, the algorithm for computing the reflection vector for
any front-sided vector vector , as well as the corresponding
consistent normal and the dot product  is:
At each vertex, consider the dot products  of the per-
vertex normal and all adjacent face normals and
choose the one with the minimum value. Then compute
= 0.03632
=() (1 + (1 2)
For a given point in a triangle, compute
interpolated using values at three vertices
Then, for any given front-sided vector , the cosines of
angles and (see Figure 5) are
= 1 + ()
The ratio sin()/sin() is
Allowing us to compute
= (g + b) 
= normalize( + r)
The per-vertex angles can be evaluated and stored when per-
vertex normals are computed or updated. The computation at each
fragment (or hit point) uses the linearly interpolated scalar value
as well as values that are typically available in fragment
shaders (and ), allowing straightforward implementation of
the algorithm (8) in any high-level shading language.
2.4 Application to Shading
So far we have shown how to compute a reflection vector that is
guaranteed to be front-facing. In this section, we show that the
same algorithm can be used to guarantee that a dot product
between an arbitrary front-facing vector and the shading normal is
positive. For example, we can guarantee that the Blinn-Phong
shading model’s dot product is always positive.
Consider a front-facing vector . We will now prove that the dot
product is non-negative. First, observe that even if we do not
use the reflection vector r, it is still defined by algorithm (8), and
we know that it is outward facing, i.e. the angle between n and r
is less than . Second, since is also front-facing, we know that
the angle between vectors and r is less than  Third, observe
that bisects the angle between vectors and r (Figure 5), and
that all three vectors are co-planar by the original definition of r
and . Thus, the angle between and is equal to one-half the
angle between and r, and is therefore less than or equal to .
Thus, 0.
The Blinn-Phong reflection model [Blinn 1977] requires compu-
tation of the dot product of the shading normal with the halfway
vector. Since the halfway vector is collinear with the sum of the
eye vector and the light vector, it will be front-sided if both the
eye vector and the light vector are front-sided. This allows us to
directly use expressions (8) (treating as the given half-vector) to
compute the dot product , which is guaranteed to be
non-negative. Figure 13 shows that the visual result produced by
this technique is superior to that produced by the standard
technique of computing and clamping negative values to
Note that the expression (8) for the dot product  is applicable
to both local lights (for which the direction is different at each
fragment) and to lights located at infinity (for which is always
the same).
Figure 7. Consistent normals guarantee a positive dot product with any
given vector (red line), but behave almost the same as Phong normals
except for grazing incident angles on coarse meshes. In contrast, the dot
product of vector with Phong normals (blue line) can become negative
(requiring clamping). Four plots for different values of the angle
between the face normal and the interpolated normal are shown. The
horizontal axis is the angle between and the Phong normal (varying
from 0 to /2).
010 20 30 40 50 60 70 80 90
α = 5° (finely
020 40 60 80 100
α = 25°
020 40 60 80 10 0 120
α = 45°
020 40 60 80 100 120 140
α = 65°
3 Discussion
Consistent normals can be thought of as a fine-tuning of Phong
normals to provide additional consistency guarantees. To better
understand the differences between consistent normals and Phong
normals, we plot values of shading dot products computed using
the two methods. Specifically, we plot and
for different incident directions specified by the
angle (Figure 7).
By design, when the incident vector is nearly orthogonal to the
surface ( ), the Phong normal and the consistent normal are
almost the same (see also Figure 2a and 3a). For incident vectors
at more grazing angles (larger ), Phong normals and consistent
normals diverge: is always non-negative, while can be less
than 0. However, if the linearly interpolated normal is close to the
face normal (5°), the difference between these two functions
is still small. This is the situation for a highly tessellated smoothly
varying mesh (see right column in Figure 9).
Our goal was not to approximate with good accuracy, because
this would just result in discontinuous reflections. Instead, we
derived the algorithm (8), which guarantees that and
satisfies goals 1-7 described in section 2.1. The difference
can reach for some pathological triangles in which all per-
vertex normals reside in the plane of the triangle. In such cases,
the reflection vector will always be set equal to the Phong normal,
regardless of the incident direction. Even for such cases, the use
of consistent normals results in believable pictures for close-to-
orthogonal viewing directions. However, for grazing viewing
angles, no known method will be able to hide the fact that the
underlying mesh is very coarse.
3.1 Performance Results
Table 1 shows that the performance impact of using consistent
normals for Blinn-Phong shading is minimal (~1%) on modern
graphics architectures. The table compares frame rates using
standard Phong normal interpolation to frame rates using two
variants of consistent normal interpolation – the first variant uses
a trigonometric expression and the second variant uses a rational
expression (see and respectively in Figure 6).
Performance is measured on three different graphics architectures:
the Intel® Core™ i5-450M processor with mobile Intel® HD
Graphics, the mid-range discrete NVIDIA® GeForce® 9800 GT,
and the top of the line discrete NVIDIA® GeForce® GTX 480.
The performance measurements are made using the Tiny model
shown in Figure 13. The performance differences for the GTX
480 are statistically irrelevant, since the standard deviation for
these measurements was about 4%. For the two other platforms,
the standard deviation was less than 0.2% and the performance
cost of consistent normal interpolation is about 1%.
Table 1. Performance differences between Phong normals and consistent
normals are minimal across different platforms. The data (frames per
second) is for the “Tiny” model shown in Figure 13.
We also measured the performance impact of using consistent
normals to compute reflection directions in our research group’s
CPU ray tracer. In this case, the slowdown for using consistent
normals is about 5%. However, some of this additional cost is
due to the tracing of extra reflection rays, since we discard all
inward facing reflections when Phong normals are used.
Figure 8. Zigzag-shaped object shaded with a traditional Phong normal
interpolation (left) and with modulated consistent normals (right). All
per-vertex shading normals are equal. For consistent normal interpo-
lation, the per-vertex angle is additionally modulated by the curvature of
the surface to achieve the desired effect.
Figure 9. Increasing surface smoothness results in almost identical
shading for Phong and consistent normals. Red color indicates pixels with
negative dot products.
3.2 Practical Considerations
All variants of our algorithm require knowledge of the scalar
value at each vertex. This value depends on the shading
normal at the vertex, as well as the face normals of all faces
adjacent to the vertex. This value can be either provided by the
application or computed on the fly in a geometry shader. The
natural time to compute  is whenever per-vertex shading
normals are created or updated. The value of can be stored as a
fourth component of the vertex normal.
It is also possible to modulate the value of to provide
additional functionality. In particular, we can modulate it by the
surface curvature to overcome certain limitations of linear
interpolation [Walia & Singh 2006, Lee & Jen 2001]. Figure 8
shows how this approach can be used to fix problems of zigzag-
shaped geometry, in which all per-vertex normals are equal.
Our approach requires that the angle between a vertex’s shading
normal and an adjacent face normal always be /2, since the
approach was derived under that assumption. This restriction is
reasonable since there is no plausible physical interpretation for an
angle greater than /2. But for some meshes we do encounter such
angles, especially if the per-vertex normals were automatically
created. Fortunately, in most cases (and always for vertices with
valence three or four) this situation can be remedied. For vertices
with valence greater than four, we sort all angles and then, for all
adjacent faces for which , modify the vertex normal as
   
This adjustment creates a new vertex normal for which the dot
product with the given face normal is positive. It might also
create problems for other adjacent faces at which the dot product
was positive before this adjustment. Accordingly, a few iterations
may be necessary. Though not guaranteed, this approach mostly
works for practical models. Figure 10 shows that it works even
for the coarse hairline polygons in the Tiny model.
9800 GT
GTX 480
Phong normals
291.33 1111.86 2057.72
trigonometric CNI
288.20 1100.84 2058.26
rational CNI
288.16 1101.30 2055.98
80 triangles
320 triangles
1280 triangles
Consisten t
Figure 10. Greedy optimization can be used to insure that the angle
between a vertex normal and adjacent face normal does not exceed 90
degrees. Blue pixels indicate an inward-directed interpolated normal.
Left: original model; right: modified model, after applying a greedy
optimization similar to Gram-Schmidt orthogonalization.
3.3 Limitations
Although our algorithm guarantees a positive dot product for a
front-facing incoming vector, it does not guarantee a negative dot
product for a back-facing incoming vector. Phong normal
interpolation has the same limitation. Thus, if the sign of the dot
product is used to cull lights that lie behind the surface, some
lights may incorrectly contribute to the illumination computation.
In practice, this error is usually not noticeable for either algorithm
since the contribution of the erroneously included lights is
weighted by the dot product (raised to a power), and the dot
product is typically very small in these cases.
The shape and size of highlights produced by taking dot products
with consistent normals will be slightly different than those
produced by taking dot products with Phong normals. This differ-
rence can be interpreted either as a change in highlight behavior,
or as a change in the surface as defined by the shading normal.
The perturbation introduced by our technique depends on the
direction of the incoming vector. When our technique is used to
compute the reflection vector this is not an issue, since reflections
depend on the incoming directions anyway. However, if our
technique is used for shading, a different shading normal will be
used for each light direction. Thus, per-fragment computations
that otherwise could be shared between lights must now be
repeated for each light.
Another undesirable effect of view-dependency is that light paths
become different for reverse directions. For example, in Figure 3
light coming from the direction of the reflected ray will not exit
along the path of the incoming ray.
In its current form, the technique does not support displacement
mapping or normal mapping, although it could probably be
extended to cover these techniques if per-mesh bounds on
displacement or normal perturbation are available.
4 Conclusion and Future Work
Consistent normal interpolation is an easy-to-use technique for
eliminating some of the rendering artifacts encountered when
using Phong normal interpolation. The key insight behind the
technique is to guarantee desirable consistency properties between
face normals and interpolated normals. We have described
applications of the technique to the computation of reflection
vectors and shading dot products. It may also be possible to
extend the technique to other uses such as the computation of
Fernel terms.
We would like to thank the anonymous reviewers for their
detailed and valuable comments and suggestions. The Tiny
model is part of the media content of Microsoft DirectX SDK.
The Emotiguy, Dinokonda, and Toon Dragon models are part
of the digital content of the DAZ 3D editor.
BARRERA, T., ANDERS, H.A., AND BENGTSSON, E. 2004. Faster Shading
by Equal Angle Interpolation of Vectors. In IEEE Transactions on
Visualization and Computer Graphics, 10(2), 217–223.
BLINN, J. F. 1977. Models of Light Reflection for Computer
Synthesized Pictures. In Computer Graphics (Proceedings of
SIGGRAPH 77), vol. 11, ACM, 192–198.
KUIJK, A., AND BLAKE, E. H. 1989. Fast Phong Shading via Angular
Interpolation. In Computer Graphics Forum, vol. 8, 315–324.
LEE, Y. C., AND JEN, C. W. 2001. Improved Quadratic Normal Vector
Interpolation for Realistic Shading. In The Visual Computer, vol.
17, 337–352.
LOOP, C., AND SCHAEFER, S. 2008. Approximating Catmull-Clark
Subdivision Surfaces with Bicubic Patches. In ACM Transactions
on Graphics, vol. 27(1), 1-11.
VAN OVERVELD, C. W. A. M., AND WYVILL, B. 1997. Phong Normal
Interpolation Revisited. In ACM Transactions on Graphics vol.
16(4), 397–419.
PHONG, B.-T. 1975. Illumination for Computer Generated Pictures. In
Communications of the ACM, vol. 18 (6), 311–317.
SCHWENK, K. A. 2009. A Survey of Shading Models for Real-time
Rendering. URL:
SNYDER, J., AND BARR, A. 1987. A. Ray Tracing Complex Models
Containing Surface Tessellations. In Computer Graphics
(Proceedings of SIGGRAPH 87), vol. 21, ACM, 119-128
WALIA, E., AND SINGH, C. 2006. An Analysis of Linear and Non-
Linear Interpolation Techniques for Three-Dimensional
Rendering. In Proceedings of the Conference on Geometric
Modeling and Imaging: New Trends, 69–76.
WOO, A., PEARCE, A., AND OUELLETTE, M. 1996. It's Really Not a
Rendering Bug, You See... In IEEE Computer Graphics and
Applications, vol. 16(5), 21–25.
Appendix A. We want to find the minimum possible difference
between the interpolated angle and the angle
 . This difference is a function of 17 variables v0, v1,
v2, n0, n1, n2, and two independent barycentric coordinates given by
b = [u, v, 1uv]. These variables describe all possible triangles,
per-vertex normals, and sample points (taking into consideration
that each normal could be represented by 2 angles). However, using
symmetric properties of this function, the problem can be
reformulated as a minimization of a function of only 1 argument.
We will do it in several steps as follows:
17 8. By noticing that only the face normal n depends on
vertices and the problem is rotationally invariant, we can use
n = [0,0,1] and exclude vertices from further processing.
8 5. Each normal has 2 degrees of freedom and can be
represented as     . The
angle , by definition, is computed by linearly interpolating
angles , and does not depend on angles . Thus, for given
values of angles , the minimum of is attained when has
a maximum value. Looking at the triangle formed by the Phong
normal and the face normal (Figure 5), the angle can be
computed as , where is z coordinate of vector
and  is its projection to xy plane. Since only depends
on the angles , reaches maximum when the xy projections of
all per-vertex normals are parallel — that is, when all angles are
the same. For simplicity, we will use  0, eliminating 3
5 4. Without loss of generality, 01 2. We will vary
= 1 on the [0, 2] interval and consider a function
() . By analyzing its derivatives, we can conclude that
() is either monotone or concave (dome-shaped; see example in
Figure 11). In both cases, its minimum is achieved at either 0 or
2, allowing us to consider only 4 independent variables: 0, 2,
and two barycentric coordinates.
4 3. Taking into consideration all of the simplifications
described so far, the expressions for angles and are:
 [012]
Figure 11. Derivatives of ()  for 0 10° and 2 80°.
() is either monotone or concave (as shown), allowing the reduction of
the number of independent variables from 5 to 4.
We can eliminate , e.g. by using . For each such
4-dimensional problem, there is an equivalent 3-dimensional
problem with a modified b = [b0, 0, b1 + b2] = [u, 0, 1u] and
angles [0 02], yielding the same values for angles (9).
3 2. For given 0 and 2, the difference  will be a
function of u. Figure 12 plots this function on a [0, 1] interval for
different values of angles 0 and 2. This function is completely
defined by its value at u = 0 and its derivative on the [0, 1]
interval. It is easy to see that the function value at u = 0 is always
0 (regardless of the values of 0 and 2) and that the derivative
depends only on u and the difference 20.
2 1. We have 2 variables left: u and = 2 0, so the target
function is reduced to
Figure 12. Parametric family of functions we want to minimize.
Its -derivative depends only on u and , allowing us to
find the value of , for which the difference has a minimum for
any given u. This value does not depend on u and is equal to .
1 0. We have reduced the problem to a minimization of a one-
dimensional function given by (4). By computing the u-derivative
of (u), we will get a quadratic equation for the two extremal
points of this function (see Figure 12), yielding inequality (5).
The minimum value of the difference  is achieved when one
normal lies in the plane of the triangle and another is orthogonal
to it (the third normal does not contribute to the difference, as the
corresponding barycentric coordinate is 0). This minimum is
negative. However, if, instead of , we use the scaled value
defined by (6), the minimum difference for all possible triangles
could be made equal to 0 (which is our goal). We want to find a
minimum value of for which this is possible. This is achieved
by solving a 2-dimensional optimization problem, dependent on
two variables — the barycentric coordinate u and the scaling
factor . The solution gives us a minimum value of which
guarantees that the difference of the modified and the angle is
Figure 13. Comparison of the new consistent normal interpolation technique (d and e) with a classic Phong interpolation (a c). The light source is placed
at the camera position. The “Tiny” model from the Microsoft DirectX SDK is shown.
10 20 30 40 50 60 70 80
0 0.2 0.4 0.6 0.8 1
(a) Phong
interpolation is
Pixels for
which the dot
product of the
shading vector
and the light
vector is
display in red
(b) The d ot
product is
clipped to [0,1].
lighting is used
to avoid black
pixels, which
results in flat
illumin ation for
pixels with a
negative dot
(c) Texture
mapping is
masking the
effects of
negative dot
(d) Our
positive dot
products and
(e) Texture
together with
our normal
resulting in
more natural
There are two major ways of calculating ray and parametric surface intersections in rendering. The first is through the use of micropolygons, and the second is to use parametric surfaces such as NURBS surface together with numerical methods such as Newton Raphson. Both methods are computationally expensive and complicated to implement. In this paper, we introduce a direct ray tracing method for Phong Tessellation. Our method gives analytic solutions that can be readily derived by hand and enables rendering smooth surfaces in a computationally inexpensive yet robust way.
Full-text available
Phong shading is one of the best known, and at the same time simplest techniques to arrive at realistic images whem rendering 3D geometric models. However, despite (or maybe due to) its success and its widespread use, some aspects remain to be clarified with respect to its validity and robustness. This might be caused by the fact that the Phong method is based on geometric arguments, illumination models, and clever heuristics. In this article we address some of the fundamentals that underlie Phong shading, such as the computation of vertex normals for nonmanifold models and the adequacy of linear interpolation and we apply a new interpolation technique to achieve an efficient and qualitatively improve result.
Full-text available
One of the most successful algorithms that brought realism to the world of 3D image generation is Phong shading. It is an algorithm for smooth shading meshes of planar polygons used to represent curved surfaces. The level of realism and depth perception that can be obtained by Phong shading is attractive for 3D CAD applications and related areas. However, per pixel computation costs which were too high and/or artifacts, introduced by some of the more efficient evaluation methods and apparent only when displaying moving objects, are major factors mat blocked the common usage of Phong shading in highly interactive applications. In this paper we present angular interpolation for Phong shading planar polygons. Angular interpolation was a method especially designed to meet requirements as imposed by special purpose hardware we developed1, but turned out to be generally applicable. The angular interpolation method appears to be very efficient and reduces artifacts when displaying moving objects. Ideally a shading algorithm imposes no need for subdivision of patches as presented by the solid modelling system. Shading calculation via angular interpolation yields such an ideal algorithm. We will describe two alternative evaluation methods that trade off evaluation cost against level of accuracy. They both can handle light source and view point at arbitrary distances, but differ in level of accuracy. As a consequence these alternative evaluation methods do impose restrictions on the topology of patches and light sources. However, generally, the limitations imposed by these alternative shading methods are much more liberal than the limitations on patch size imposed by the geometry. The most economic evaluation method we present can incrementally compute the colour intensity along a scanline by two additions per pixel. The methods presented are generally applicable and can easily be implemented in hardware.
The quality of computer generated images of three-dimensional scenes depends on the shading technique used to paint the objects on the cathode-ray tube screen. The shading algorithm itself depends in part on the method for modeling the object, which also determines the hidden surface algorithm. The various methods of object modeling, shading, and hidden surface removal are thus strongly interconnected. Several shading techniques corresponding to different methods of object modeling and the related hidden surface algorithms are presented here. Human visual perception and the fundamental laws of optics are considered in the development of a shading rule that provides better quality and increased realism in generated images.
In the production of computer generated pictures of three dimensional objects, one stage of the calculation is the determination of the intensity of a given object once its visibility has been established. This is typically done by modelling the surface as a perfect diffuser, sometimes with a specular component added for the simulation of hilights. This paper presents a more accurate function for the generation of hilights which is based on some experimental measurements of how light reflects from real surfaces. It differs from previous models in that the intensity of the hilight changes with the direction of the light source. Also the position and shape of the hilights is somewhat different from that generated by simpler models. Finally, the hilight function generates different results when simulating metallic vs. nonmetallic surfaces. Many of the effects so generated are somewhat subtle and are apparent only during movie sequences. Some representative still frames from such movies are included.
Conference Paper
Many research papers indicate the use of various linear and non-linear interpolation techniques for the shading of three-dimensional objects. This paper presents a comparative study of the linear and non-linear interpolation techniques for the shading of three-dimensional objects. It presents an analysis of different linear and non-linear interpolation techniques with respect to various parameters of shading. It analyses the affect of variation in specular highlight exponent on the quality of shading when the objects are shaded with linear and nonlinear interpolation techniques. The impact of varying the number of triangles in the underlying mesh on the shading quality obtained by these techniques is also compared. The interpolation schemes have also been analyzed for the Mach Band effect when the intensity is interpolated across an underlying polygon. Finally, the cost of few non-linear interpolation algorithms that give good visual results has been compared to identify better and cost effective shading solutions for different situations like shading on handheld devices
Abstract We present a simple and computationally efficient algorithm for approximating Catmull-Clark subdivision surfaces,using a minimal set of bicubic patches. For each quadrilateral face of the control mesh, we construct a geometry patch and a pair of tangent patches.The geometry patches approximate the shape and silhouette of the Catmull-Clark surface and are smooth everywhere except along patch edges containing,an extraordinary vertex where the patches are C . To make the patch surface appear smooth, we provide a pair of tangent patches that approximate the tangent,fields of the Catmull-Clark surface. These tangent patches are used to construct,a continuous normal field (through their cross-product) for shading and displacement mapping. Using this bifurcated representation, we are able to define an accurate proxy for Catmull-Clark surfaces that is efficient to evaluate on next-generation,GPU architectures,that expose a programmable tessellation unit. 1,Introduction Catmull-Clark subdivision surfaces [4] have become a standard modeling prim-
Interpolation for normal vectors is an important stage of Phong shading. Linear interpolation cannot represent the geometry of surfaces adequately in some situations. Previous quadratic interpolation for normal vectors generates visual artifacts for arch-type curves and triangle scan conversion. To eliminate those artifacts, we propose an improved quadratic interpolation for normal vectors with little computational overhead. Perspective-correct version for obtaining perspective foreshortening is also presented.
The quality of computer generated images of three-dimensional scenes depends on the shading technique used to paint the objects on the cathode-ray tube screen. The shading algorithm itself depends in part on the method for modeling the object, which also determines the hidden surface algorithm. The various methods of object modeling, shading, and hidden surface removal are thus strongly interconnected. Several shading techniques corresponding to different methods of object modeling and the related hidden surface algorithms are presented here. Human visual perception and the fundamental laws of optics are considered in the development of a shading rule that provides better quality and increased realism in generated images
In this paper, we show how spherical linear interpolation can be used to produce shading with a quality at least similar to Phong shading at a computational effort in the inner loop that is close to that of the Gouraud method. We show how to use the Chebyshev's recurrence relation in order to compute the shading very efficiently. Furthermore, it can also be used to interpolate vectors in such a way that normalization is not necessary, which will make the interpolation very fast. The somewhat larger setup effort required by this approach can be handled through table look up techniques.