more clarifications, section about mayacopy etc.

This commit is contained in:
David Rose 2004-12-13 23:12:56 +00:00
parent 834a6423a2
commit a234645d69

View File

@ -38,6 +38,18 @@ perform these steps, although it currently generates only a Unix-like
makefile, so the at the moment a model tree can only be built on a makefile, so the at the moment a model tree can only be built on a
Linux or Unix machine, or on a PC with Cygwin installed. Linux or Unix machine, or on a PC with Cygwin installed.
See the dmodels tree in the Panda3D repository for an example of a
simple buildable model tree. This is different from the models tree,
which is much simpler and includes only ready-to-load egg files; the
dmodels tree is set up as a full-fledged buildable model tree using
the ppremake system. With a few small exceptions, the dmodels tree
does not contain any egg files, although intermediate egg files are
generated during the make process. When you have finished building
the dmodels tree, you will have generated a number of bam files that
are fully optimized and ready to load for your current version of
Panda.
To set up a ppremake model tree, you must create a Sources.pp file in To set up a ppremake model tree, you must create a Sources.pp file in
the directory with the models (or in the directory above the SoftImage the directory with the models (or in the directory above the SoftImage
tree in the case of SoftImage models). tree in the case of SoftImage models).
@ -411,4 +423,95 @@ filter_char_egg - Similar to filter_egg, above, except that one
#defer COMMAND \ #defer COMMAND \
egg-topstrip -i -t joint_pelvis -d $[TARGET_DIR] $[sources] egg-topstrip -i -t joint_pelvis -d $[TARGET_DIR] $[sources]
#end filter_char_egg #end filter_char_egg
HOW TO POPULATE A CVS-CONTROLLED MODEL TREE
Since a model tree is really just a source tree like any other, you
can check in the source files--the .mb files or .flt files, for
instance, and all of the associated image files--as source files in a
CVS directory. Then any developer can check out the source tree,
ppremake, and make install, exactly the same way you would build
Panda. Of course, .mb files and .flt files are binary files, but CVS
(and most other revision control systems) allows you to add binary
files to the system. You just can't merge multiple changes coming in
at once to the same file, so it's important to make frequent updates
and commits in order to minimize the chance of an accidental
collision with another artist.
In order for this to work, the source files must reference texture
paths and other external filenames using relative filenames--for
instance, a model should apply a texture named "../maps/grid.tif"
rather than "/home/drose/panda3d/dmodels/maps/grid.tif", for instance.
This is because the entire model tree might be checked out by another
developer within some other directory, and only relative paths within
the model tree will be valid.
For most modeling packages, it is not difficult to ensure that all of
the external references use only relative paths. Populating a model
tree with, say, MultiGen source files may thus be as simple as copying
the MultiGen files and the image files in and then adding them to cvs
by hand (using -kb to indicate a binary file, of course).
Maya, on the other hand, for some reason insists on storing texture
references as full pathnames, even if you enter a relative path. It
is not possible using the Maya API to create an .mb file that
references its textures using relative pathnames. This makes it
impossible to add a Maya file to a CVS repository in the normal way.
However, it *is* possible to store relative paths within a Maya file
if you use an OpenMaya program to generate the Maya file. Panda
provides a utility called mayacopy that does this (among other useful
features).
In fact, Panda provides a family of utilities, with similar behavior;
at the time of this writing, the list includes mayacopy, fltcopy, and
lwocopy. (There is also a separate tool called softcvs, used for
integrating SoftImage version 4.3 databases; this works differently
from the others, because of the very different nature of a SoftImage
scene. The use of softcvs is not documented in this file.)
In general, the copy tools work like this:
cd mymodels/src/mydir
mayacopy /path/to/my/maya.mb
This copies the indicated Maya (or MultiGen, LightWave, etc.) file
from the named directory into the current directory. It also copies
in all of the texture files referenced by the Maya file, and it
modifies the Maya file to use only local pathnames to the newly copied
texture files, instead of the full pathnames that would have been
stored in the original Maya file.
A little heuristic is used to decide where to place each texture image
referenced by the Maya file. The following rules are applied:
(1) If another texture file with the same name already exists
elsewhere in the source hierarchy, assume this texture image
represents the same image (or a new version of that image) and
overwrite it. (Note that it is not a good idea to have
different texture images that are stored under the same
filename. egg-palettize also makes the assumption that any two
files with the same filename represent the same texture image.)
(2) If the texture file does not already exist, copy it into src/maps.
(3) If the src/maps directory does not exist, copy the texture file
into the same directory with the source Maya file.
As the Maya file and each texture file is copied into the source tree,
the cvs command is automatically invoked to add the file(s) to the
repository, if necessary. It is still your responsibility to issue
the cvs commit command when you are ready to make the changes
permanent.
You can use mayacopy, fltcopy, etc. to copy in a file from a
completely different hierarchy, or to update a file already within the
source tree. It is particularly important to re-run mayacopy after
modifying any .mb file using Maya, since Maya will replace all of the
local pathnames with full pathnames each time you save the file.
Re-running mayacopy on the same file will restore the relative
pathnames again.