*Interactive Loop subdivision spline surface*.
Use your fingers or mouse to control the model
(hold *shift* key or use mouse wheel to zoom it).
Canvas is matched to your browser window.
We need *N = 6* subdivisions to get smooth light reflex.
# Loop subdivision spline surface

We use the modified Loop subdivision scheme [1]. It is generalization of the
Lane-Riesenfeld algorithm for spline curves
- we subdivide every edge in two parts and make from every old triangle
four new small triangles
- average all new points with respect to the averaging mask

**P**_{o} = α**P**_{o} +
β ∑_{ k=1,n} **P**_{k }.
- repeat 1-2 steps
*N* times
- use evaluation mask to calculate the limit points
- use tangent masks to calculate normals (shall we use subdivided or limit points here?)

Modified averaging mask for a point with *n* neighbors is [1]

*α*_{n}^{mod} = 2 α_{n} - 1,
β_{n} = (1 - α_{n })/n,

where *α*_{n} is the Loop averaging mask [2]

*α*_{n} = [3/8 + cos(2π/n)/4]^{2} + 3/8.

Evaluation mask is

*ε*_{n} = 3/(11 - 8α_{n }).

Two tangents and tangent masks are

**T**_{j} =
∑_{ k=1,n} τ_{n,k}^{(j)} **P**_{k },
τ_{n,k}^{(1)} = cos(2πk/n),
τ_{n,k}^{(2)} = sin(2πk/n)

and the normal direction is **N** = **T**_{1}×**T**_{2 }.
Similar to the Bezier spline patch, we can add per vertex materials and texture UVs as additional
dimentions and get colored surfaces (see models below).

## Comments

- The Loop spline normals are not smooth at extraordinary points with 3 neighbor.
See also [3]. It is not very important for models.
"Octahedron" is almost perfect.
- The script works only with closed, well oriented triangular meshes (without borders).
- The Loop algorithm takes ~200 lines of codes
(see loop.js public domain script).

## Loop splines in 3D modelers

3D modeler Art of Illusion supports
approximating Loop subdivision splines.
Set *Edit/Preferences/General/Interactive Surface Error = 0.01* and
*Approximating Smoothing Method* to play with Loop splines.
I used it to make the WebGL little dolphin.
The AoI model has only 100 vertices.
I exported it as Wavefront OBJ file (uncheck *Subdivide Smooth Meshes* before export).
Then converted points and faces from the OBJ
into JavaScript arrays by the simple python script

*python convert_obj_js.py -i infile.obj -o outfile.js*
Blender supports Catmull-Clark splines and Mikael Ohman wrote
Stam-Loop
subdivision surface modifier WIP draft.

## Loop spline based models

Singular "cone",
finger, branch
Models from the Rome project.

and flamingo,
chow,
stork,
bunny.
In these models colors are blurry a bit due to per face material conversion into per vertex
in the scripts (and from textures into per face colors earlier as I think).
See further animated splines.

[1] Jos Stam & Charles Loop.
Quad/Triangle Subdivision
EUROGRAPHICS Computer Graphics Forum. November 2003, 22(1). pp. 79-85.

[2] Charles Loop *Smooth Subdivision Surfaces Based on Triangles*
M.S. Mathematics Thesis, University of Utah. 1987.

[3] Hartmut Prautzsch, Georg Umlauf
*Improved Triangular Subdivision Schemes*. Computer Graphics International 1998: 626-632

Contents
Previous: Subdivision spline curves
Next: Animated splines

*updated* 18 Apr 2013