/ptexutils

open source Ptex utilities (e.g. texture transfer)

Primary LanguageC++OtherNOASSERTION

===================================================================
ptexutils - Utilities to assist in the use of Ptex in production
===================================================================

This is the initial release of ptexutils, a set of small tools that are
intended to help in the adoption of Ptex (Per-Face Texturing).


Build Instructions
------------------

To build using CMake, just do:

    make

Under the hood the Makefile creates a temporary build directory and runs cmake
there, e.g.:

    mkdir -p build/foo &&
    cd build/foo &&
    cmake ../.. &&
    make

The provided top-level Makefile respects the "prefix" and "DESTDIR" variables.
This allows you to build ptexutils with prefix=/usr into a temporary staging
directory:

    make DESTDIR=/tmp/ptexutils prefix=/usr install


Using ptxtransfer
-----------------

The ptxtransfer utility is designed to transfer texel data when
a model has changed. The change may include mesh topology, but the
position and shape of the old and new versions should align roughly.
The executable attempts to copy face textures for a single Ptex file.

To run from the command line, do:

ptxtransfer [options] <old.ptx> <new.ptx>

Both of the provided Ptex files must include geometry meta data for the
transfer to succeed. The 'new' file does not need to contain useful
texture information, this file is only used for the geometry data.
The resolution, data type and channel format of the output will be
automatically configured to match the input, though the resolution may
not match exactly. The texture data in 'new.ptx' will be populated and
that file overwritten.

A maximum number of threads can be specified with an option, e.g.
"-t 4" will utilize four threads.

The transfer uses a two step algorithm. First, faces are matched using
position between the old and new meshes. Any matches found can be copied
directly, with possible flips and rotates applied to account for changes
in the vertex ordering. Such copies will preserve the texture quality
perfectly. Then, unmatched faces in the target mesh will completed using
a texel-by-texel point cloud lookup. The distance limits for these searches
can be adjusted using command line flags ("-m" and "-d"), detailed in the
"-h" help text. Increasing the distances may help if the shape change in
the old and new models is comparatively large.


Using ptxview
-------------

The ptxview utility is for viewing the contents of a single Ptex file.
If the file contains geometry meta data, the textures can be visualized
in 3D, otherwise a 2D layout of the faces will be shown.

To run from the command line, do:

ptxview [options] filename.ptx

A particular face ID can be specified with "-face <n>", and the 3D
display mode can be disabled with a "-flat" option.

Individual Ptex faces can be isolated by a left-click, with 'Esc'
or 'Up Arrow' returning to the default view. Right-clicking will
produce a pop-up menu with display options. Other controls include:

Navigation:
        Alt-Button 1:     rotate scene (3D mode only)
        Alt-Button 2:     pan scene
        Alt-Buttons 1&2:  zoom scene

Hot Keys:
        Right Arrow:      view next face
        Left Arrow:       view previous face
        Page Up:          advance 100 faces
        Page Down:        go back 100 faces
        Home:             view first face
        Page Down:        view last face
        r:                reset view
        f:                center data on screen
        q:                quit


Using ptxconvert
----------------

The ptxconvert utility can be used to convert image data to or from
the Ptex format, including environment cube maps (Penv). General
multi-face Ptex files are not supported, as this tool is intended for
regular image conversion.

To convert a single-face Ptex file to a JPEG image:

ptxconvert in.ptx out.jpg

To convert a TIFF (must be power-of-two dimensions) to Ptex, with
periodic border modes in u and v:

ptxconvert in.tif out.ptx -mode periodic

To convert six cube-map images into a Ptex environment map:

ptxconvert -envcube px.tif nx.tif py.tif ny.tif pz.tif nz.tif out.penv


Future Work
-----------

More utilities are planned to be added a later date.

The ptxtransfer code may be reworked into a library to assist with
integration into other tools. The ptxtransfer code currently uses
texel positions corresponding with a polygonal mesh - subdivision
surface support could be added to minimize distortion for textures
painted on such models.


- Dan Teece, Walt Disney Animation Studios