i
i
i
i
i
i
i
i
13.2. Parametric Curved Surfaces 603
the unnormalized version of n
110
is expressed as [1304]
n
110
= n
200
+ n
020
−2
(p
030
− p
300
) · (n
200
+ n
020
)
(p
030
− p
300
) · (p
030
− p
300
)
(p
030
−p
300
). (13.41)
Originally, van Overveld and Wyvill used a factor of 3/2 instead of the 2 in
this equation. Which value is best is hard to judge from looking at images,
but using 2 gives the nice interpretation of a true reflection in the plane.
At this point, all B´ezier points of the cubic B´ezier triangle and all the
normal vectors for quadratic interpolation have been computed. It only
remains to create triangles on the B´ezier triangle so these can be rendered.
Advantages of this approach are that the surface gets a better silhouette
and shape relatively cheaply, and that only minor modifications must be
made to existing code to make it work. All that is needed is that tessellation
should be done (instead of rendering as usual), down to some level of detail
(LOD). A hardware implementation is pretty straightforward.
One way to specify LODs is the following. The original triangle data
is LOD 0. The LOD number then increases with the number of newly
introduced vertices on a triangle edge. So LOD 1 introduces one new ver-
tex per edge, and so creates four subtriangles on the B´ezier triangle, and
LOD 2 introduces two new vertices per edge, generating nine triangles. In
general, LOD n generates (n +1)
2
triangles. To prevent cracking between
B´ezier triangles, each triangle in the mesh must be tessellated with the
same LOD. This is a big disadvantage, since a tiny triangle will be tessel-
lated as much as a large triangle. Techniques such as adaptive tessellation
(Section 13.6.4) and fractional tessellation (Section 13.6.2) can be used to
avoid these problems, and these are getting more and more widespread
support.
One problem with N-patches is that creases are hard to control, and
often one needs to insert extra triangles near the desired crease. The con-
tinuity between B´ezier triangles is only C
0
, but they still look acceptable
in many cases. This is mainly because the normals are continuous across
triangles, so that a set of N-patches mimics a G
1
surface. A better solution
is suggested by Boubekeur et al. [131], where a vertex can have two nor-
mals, and two such connected vertices generate a crease. Note that to get
good-looking texturing, C
1
continuity is required across borders between
triangles (or patches). Also worth knowing is that cracks will appear if
two adjacent triangles do not share the same normals. A technique to fur-
ther improve the quality of the continuity across N-patches is described by
Gr¨un [462]. Dyken and Reimers [289] present a technique inspired by N-
patches, where only the silhouettes as seen from the viewer are tessellated,
and hence, the silhouettes become more curved. These silhouette curves are
derived in similar ways as the N-patches curves. To get smooth transitions,
they blend between coarse silhouettes and tessellated silhouettes.