The construction of a subdivision surface starts with a simple
polyhedron, which is then iteratively refined and smoothed by subdivision.
The texture coordinates applied to the original polyhedron are simply
subdivided in the proportion of the topological splits executed.
Problems may arise in assigning texture coordinates, if the surface is not a simple cylindical or toroidal domain.
Whenever the genus of a surface is different from 1, then you cannot
regularly tile this surface with quad tile with all valence-4 vertices. A cube has eight valence-3 vertices, and one geometrical vertex will have to carry different texture
coordinates for different faces,
(thus it might be better to carry the texture coordinates with each face, rather than on a shared vertex).
To model a "spherical" ball we may start with a simple cube; but the "cubist" fish shape will extend beyond a single face and overlap into two adjacent faces.
Thus the "fish" texture pattern that get's cut out by any cube face is
missing the nose and the tail, but gets those two pieces stuck in from
the two sides. Since
these pieces belong to some other fish, they be be of different colors;
different cube faces may have different combinations of colors.
Thus, multiple copies of one B&W texture outline, filled with
different colors, are needed for the different sides of the cube.
On the cube itself, the texture coordinates will then have to be
rotated so that a seemless connection between the different patterns
and colors occurs. In some cases, some of the tiles may also have to be mirrored! (See the actual texture coordinates used).
How do the sizes of the triangles in the original mesh affect the outcome of the generated texture pattern ?
What factors affect the quality of generated texture ?
To what degree does randomness play a role in this algorithm ?
What is the "neighborhood" within which a new pixel is evaluated for its "fitness" ?
How are anisotropic texture patterns brought "into alignment" with neighboring texture patterns ?
What can be done to make the algorithm run faster ?
Ongoing Programming Assignment:
Build a data structure for simple triangle subdivision, useful for either the Loop or Zorin scheme.
Use the data structure discussed in class.
Assume that you start from a complete, hierarchically flat mesh (you may get this out of SLIDE; save as SIF).
Test your program on your designs of a smooth genus-4 surface.
(In the next phase of the assignment we will add texturing to it).
For display use what is most convenient for you
(open GL, Java 3D, SLIDE?) By MON, Oct. 19, have the whole thing running; send me a brief description of your encoding scheme and your data structures.
If you get far enough, send me also an image of your genus-4 shape after a couple of subdivisions.
COURSE PROJECTS: Before MON, Oct. 19, e-mail me a couple of ideas (a few sentences) of what you would like to do. By MON, Oct. 26, the final more detailed, written proposal will be due.
On MON, Nov. 2, you will make a formal 5-minute presentation in class.