Parameterization

Univariate parameterization

Bivariate parameterization

Lapped Textures

Idea:

  • Global parameterization may not exist, but small surfaces (surface patches) easy to parameterize
  • Texture mesh by painting texture patches on the surface patches
  • Avoid holes by overlapping textures (lapped textures)
  • Avoid seam artifacts by alpha blending

Algorithm:

  • Build texture patches from input texture:
    • User cuts out regions from the texture using a normal painting programm that matches the structure of the texture (e.g. in a brick texture the bricks should not be cut through)
    • For isotropic textures: predefined shapes can be used
  • Specify the directions of the textures on the mesh
    • User specifies tangent vectors T on the faces (need not be done on all faces, directions can be interpolated according to distances on the mesh surface)
    • Direction of the tangent vectors match 'up' direction of textures, length of tangent vectors match uniform scaling
    • Build tangential basis using T and the normal of the face to compute a 'right' vector S
    • For isotropic textures: tangent field must not be specified, only a scaling field, directions are aligned according to neighbours
  • Repeat until mesh is covered
    1. Select random texture path T
    2. Select random uncovered location L for paste
      • In the beginning prefere areas with high curvature and discontinuities in direction field (hope is that distorted regions are overpainted afterwards)
      • Choose random points on not fully covered faces
    3. Grow Surface patch S around L to the size of T
      • Map triangle cointaining L to texture space such that the choosen point maps to texture patch center and the tangential basis (T,S) maps to the texture axis (t,s)
      • Grow surface by selecting faces around this seed face according to increasing distance:
        • Three constraints:
          • Surface must be homomorphic to a disc (to avoid distortions in the mapping)
          • Select a face to grow only if the edge adjacent to S is partially inside texture patch
            • Describe texture patch by boundary polygon (polygonal hull, simplified by edge collapsing, allowing hull only to grow to outside, avoid self intersections, simplification operations prioritized according to area they add to polygon)
          • Stop growth if distortion becomes to much, then paste the current surface to mesh
        • Initial parameterization: see original paper (basically the new vertex is assigned the position of the centeroid of the parameterization predictions for faces that contain the vertex and an edge in the surface S obtained by "extending this edge with a triangle similar to the face in the mesh")
    4. Flatten S over T
      • optimize the former parameterization (note that this might lead to a not fully covered texture patch)
        • Tangent vectors T and S lie within surface plane and can therefore (using barycentric coordinates) by parameterized to T'
        • for each face try to match the tangent vectors (T,S) with (t,s) by minimizing $\sum_{f} \mid\mid d_S\mid \mid^2 + \mid \mid d_T \mid \mid^2$ where f are the faces, $d_T = T' - t$ (i.e. the difference between the maped directions T, S and the texture axis t,s)
        • Note that the above solution is unique up to translation, so location of patch center has to be fixed
    5. Record paste operation
      • Use the computed parameterization to texture the surface
    6. update face coverage
      • Coverage is tested using rasterization:
        • Render path faces into offscreen buffer where R and G colors store the face id and B channel accumulates the paste operations on the pixel
        • Coverage of the face is then ratio of covered pixels (B channel greater 0) to number of pixels in face
      • If point is not covered in face, remember it as a starting point for location selection

Texture Synthesis on Surfaces

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.