54 add_path_replace_options();
55 add_path_store_options();
56 add_animation_options();
58 add_normals_options();
59 add_transform_options();
61 set_program_brief(
"convert Maya model files to .egg");
62 set_program_description
63 (
"This program converts Maya model files to egg. Static and animatable " 64 "models can be converted, with polygon or NURBS output. Animation tables " 65 "can also be generated to apply to an animatable model.");
69 "Generate polygon output only. Tesselate all NURBS surfaces to " 70 "polygons via the built-in Maya tesselator. The tesselation will " 71 "be based on the tolerance factor given by -ptol.",
72 &MayaToEgg::dispatch_none, &_polygon_output);
75 (
"ptol",
"tolerance", 0,
76 "Specify the fit tolerance for Maya polygon tesselation. The smaller " 77 "the number, the more polygons will be generated. The default is " 79 &MayaToEgg::dispatch_double,
nullptr, &_polygon_tolerance);
83 "Respect the Maya \"double sided\" rendering flag to indicate whether " 84 "polygons should be double-sided or single-sided. Since this flag " 85 "is set to double-sided by default in Maya, it is often better to " 86 "ignore this flag (unless your modelers are diligent in turning it " 87 "off where it is not desired). If this flag is not specified, the " 88 "default is to treat all polygons as single-sided, unless an " 89 "egg object type of \"double-sided\" is set.",
90 &MayaToEgg::dispatch_none, &_respect_maya_double_sided);
93 (
"suppress-vcolor",
"", 0,
94 "Ignore vertex color for geometry that has a texture applied. " 95 "(This is the way Maya normally renders internally.) The egg flag " 96 "'vertex-color' may be applied to a particular model to override " 97 "this setting locally.",
98 &MayaToEgg::dispatch_none, &_suppress_vertex_color);
101 (
"convert-cameras",
"", 0,
102 "Convert all camera nodes to locators. Will preserve position and rotation.",
103 &MayaToEgg::dispatch_none, &_convert_cameras);
106 (
"convert-lights",
"", 0,
107 "Convert all light nodes to locators. Will preserve position and rotation only.",
108 &MayaToEgg::dispatch_none, &_convert_lights);
112 "Convert all UV sets on all vertices, even those that do not appear " 113 "to be referenced by any textures.",
114 &MayaToEgg::dispatch_none, &_keep_all_uvsets);
118 "round up uv coordinates to the nearest 1/100th. i.e. -0.001 becomes" 119 "0.0; 0.444 becomes 0.44; 0.778 becomes 0.78.",
120 &MayaToEgg::dispatch_none, &_round_uvs);
123 (
"copytex",
"dir", 41,
124 "Legacy option. Same as -pc.",
125 &MayaToEgg::dispatch_filename, &_legacy_copytex, &_legacy_copytex_dir);
129 "Specifies which transforms in the Maya file should be converted to " 130 "transforms in the egg file. The option may be one of all, model, " 131 "dcs, or none. The default is model, which means only transforms on " 132 "nodes that have the model flag or the dcs flag are preserved.",
133 &MayaToEgg::dispatch_transform_type,
nullptr, &_transform_type);
136 (
"subroot",
"name", 0,
137 "Specifies that only a subroot of the geometry in the Maya file should " 138 "be converted; specifically, the geometry under the node or nodes whose " 139 "name matches the parameter (which may include globbing characters " 140 "like * or ?). This parameter may be repeated multiple times to name " 141 "multiple roots. If it is omitted altogether, the entire file is " 143 &MayaToEgg::dispatch_vector_string,
nullptr, &_subroots);
146 (
"subset",
"name", 0,
147 "Specifies that only a subset of the geometry in the Maya file should " 148 "be converted; specifically, the geometry under the node or nodes whose " 149 "name matches the parameter (which may include globbing characters " 150 "like * or ?). This parameter may be repeated multiple times to name " 151 "multiple roots. If it is omitted altogether, the entire file is " 153 &MayaToEgg::dispatch_vector_string,
nullptr, &_subsets);
156 (
"exclude",
"name", 0,
157 "Specifies that a subset of the geometry in the Maya file should " 158 "not be converted; specifically, the geometry under the node or nodes whose " 159 "name matches the parameter (which may include globbing characters " 160 "like * or ?). This parameter may be repeated multiple times to name " 162 &MayaToEgg::dispatch_vector_string,
nullptr, &_excludes);
165 (
"ignore-slider",
"name", 0,
166 "Specifies the name of a slider (blend shape deformer) that maya2egg " 167 "should not process. The slider will not be touched during conversion " 168 "and it will not become a part of the animation. This " 169 "parameter may including globbing characters, and it may be repeated " 171 &MayaToEgg::dispatch_vector_string,
nullptr, &_ignore_sliders);
174 (
"force-joint",
"name", 0,
175 "Specifies the name of a DAG node that maya2egg " 176 "should treat as a joint, even if it does not appear to be a Maya joint " 177 "and does not appear to be animated.",
178 &MayaToEgg::dispatch_vector_string,
nullptr, &_force_joints);
182 "Increase verbosity. More v's means more verbose.",
183 &MayaToEgg::dispatch_count,
nullptr, &_verbose);
186 (
"legacy-shaders",
"", 0,
187 "Use this flag to turn off modern (Phong) shader generation" 188 "and treat all shaders as if they were Lamberts (legacy).",
189 &MayaToEgg::dispatch_none, &_legacy_shader);
195 remove_option(
"noabs");
198 _polygon_tolerance = 0.01;
199 _transform_type = MayaToEggConverter::TT_model;
210 maya_cat->set_severity(NS_spam);
211 mayaegg_cat->set_severity(NS_spam);
212 }
else if (_verbose >= 2) {
213 maya_cat->set_severity(NS_debug);
214 mayaegg_cat->set_severity(NS_debug);
215 }
else if (_verbose >= 1) {
216 maya_cat->set_severity(NS_info);
217 mayaegg_cat->set_severity(NS_info);
220 if (_legacy_copytex && !_path_replace->_copy_files) {
221 _path_replace->_copy_files =
true;
222 _path_replace->_copy_into_directory = _legacy_copytex_dir;
227 if (_got_output_filename) {
229 _path_replace->_path_directory.make_absolute();
232 nout <<
"Initializing Maya.\n";
236 if (!converter.open_api(
false)) {
237 nout <<
"Unable to initialize Maya.\n";
242 converter._polygon_output = _polygon_output;
243 converter._polygon_tolerance = _polygon_tolerance;
244 converter._respect_maya_double_sided = _respect_maya_double_sided;
245 converter._always_show_vertex_color = !_suppress_vertex_color;
246 converter._keep_all_uvsets = _keep_all_uvsets;
247 converter._convert_cameras = _convert_cameras;
248 converter._convert_lights = _convert_lights;
249 converter._round_uvs = _round_uvs;
250 converter._transform_type = _transform_type;
251 converter._legacy_shader = _legacy_shader;
253 vector_string::const_iterator si;
254 if (!_subroots.empty()) {
255 converter.clear_subroots();
256 for (si = _subroots.begin(); si != _subroots.end(); ++si) {
261 if (!_subsets.empty()) {
262 converter.clear_subsets();
263 for (si = _subsets.begin(); si != _subsets.end(); ++si) {
268 if (!_excludes.empty()) {
269 converter.clear_excludes();
270 for (si = _excludes.begin(); si != _excludes.end(); ++si) {
275 if (!_ignore_sliders.empty()) {
276 converter.clear_ignore_sliders();
277 for (si = _ignore_sliders.begin(); si != _ignore_sliders.end(); ++si) {
282 if (!_force_joints.empty()) {
283 converter.clear_force_joints();
284 for (si = _force_joints.begin(); si != _force_joints.end(); ++si) {
290 apply_parameters(converter);
293 if (!_got_coordinate_system) {
294 _coordinate_system = converter._maya->get_coordinate_system();
296 _data->set_coordinate_system(_coordinate_system);
298 converter.set_egg_data(_data);
300 if (!converter.convert_file(_input_filename)) {
301 nout <<
"Errors in conversion.\n";
309 if (_input_units == DU_invalid) {
310 _input_units = converter.get_input_units();
322 dispatch_transform_type(
const std::string &opt,
const std::string &arg,
void *var) {
323 MayaToEggConverter::TransformType *ip = (MayaToEggConverter::TransformType *)var;
326 if ((*ip) == MayaToEggConverter::TT_invalid) {
327 nout <<
"Invalid type for -" << opt <<
": " << arg <<
"\n" 328 <<
"Valid types are all, model, dcs, and none.\n";
335 int main(
int argc,
char *argv[]) {
virtual void parse_command_line(int argc, char **argv)
Dispatches on each of the options on the command line, and passes the remaining parameters to handle_...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void write_egg_file()
Writes out the egg file as the normal result of the program.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This class supervises the construction of an EggData structure from a single Maya file,...
void make_absolute()
Converts the filename to a fully-qualified pathname from the root (if it is a relative pathname),...
This is the general base class for a file-converter program that reads some model file format and gen...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
static TransformType string_transform_type(const std::string &arg)
Returns the TransformType value corresponding to the indicated string, or TT_invalid.
This class can be used to test for string matches against standard Unix- shell filename globbing conv...