15 #include "mayaShaders.h" 16 #include "mayaShader.h" 17 #include "maya_funcs.h" 18 #include "config_maya.h" 20 #include "pre_maya_include.h" 21 #include <maya/MStatus.h> 22 #include <maya/MObject.h> 23 #include <maya/MFnDependencyNode.h> 24 #include <maya/MFnMesh.h> 25 #include <maya/MObjectArray.h> 26 #include <maya/MPlug.h> 27 #include <maya/MPlugArray.h> 29 #include "post_maya_include.h" 58 MFnDependencyNode node_fn(node);
60 MObject iog_attr = node_fn.attribute(
"instObjGroups", &status);
64 << node_fn.name().asChar() <<
" : not a renderable object.\n";
72 MPlug iog_plug(node, iog_attr);
74 iog_plug.elementByLogicalIndex(0).connectedTo(iog_pa,
false,
true, &status);
78 << node_fn.name().asChar() <<
" : no shading group defined.\n";
87 for (i = 0; i < iog_pa.length(); i++) {
88 MObject engine = iog_pa[i].node();
89 if (engine.hasFn(MFn::kShadingEngine)) {
96 << node_fn.name().asChar() <<
" : no shading engine found.\n";
108 _uvset_names.clear();
109 _file_to_uvset.clear();
111 if (mesh.hasFn(MFn::kMesh)) {
112 MFnMesh mesh_fn(mesh);
114 MStringArray maya_uvset_names;
115 status = mesh_fn.getUVSetNames(maya_uvset_names);
116 for (
size_t i=0; i<maya_uvset_names.length(); ++i) {
118 string uvset_name = maya_uvset_names[i].asChar();
119 _uvset_names.push_back(uvset_name);
120 mesh_fn.getAssociatedUVSetTextures(maya_uvset_names[i], moa);
121 for (
size_t j=0; j<moa.length(); ++j){
122 MFnDependencyNode dt(moa[j]);
123 string tex_name = dt.name().asChar();
124 _file_to_uvset[tex_name] = uvset_name;
129 Shaders::iterator sha;
130 for (sha=_shaders.begin(); sha!=_shaders.end(); sha++) {
131 (*sha).second->bind_uvsets(_file_to_uvset);
145 MFnDependencyNode engine_fn(engine);
147 string engine_name = engine_fn.name().asChar();
148 Shaders::const_iterator si = _shaders.find(engine_name);
149 if (si != _shaders.end()) {
159 _shaders.insert(Shaders::value_type(engine_name, shader));
160 _shaders_in_order.push_back(shader);
172 MayaFileToUVSetMap::iterator it = _file_to_uvset.find(match);
173 if (it == _file_to_uvset.end()) {
188 return _shaders_in_order.size();
199 nassertr(n >= 0 && n < (
int)_shaders_in_order.size(), NULL);
200 return _shaders_in_order[n];
211 ShadersInOrder::iterator si;
212 for (si = _shaders_in_order.begin(); si != _shaders_in_order.end(); ++si) {
217 _shaders_in_order.clear();
218 _file_to_uvset.clear();
void bind_uvsets(MObject mesh)
Causes all shaders in the set to use the given mesh as a file-to-uvset map.
MayaShader * find_shader_for_node(MObject node, bool legacy_shader)
Extracts the shader assigned to the indicated node.
string find_uv_link(const string &match)
Returns the current mapping from file to uvset for the given file texture name.
MayaShader * get_shader(int n) const
Returns the nth MayaShader that has been discovered so far.
Corresponds to a single "shader" in Maya.
MayaShader * find_shader_for_shading_engine(MObject engine, bool legacy_shader)
Returns the MayaShader object associated with the indicated "shading engine".
MayaShader(MObject engine, bool legacy_shader)
Reads the Maya "shading engine" to determine the relevant shader properties.
void clear()
Frees all of the previously-defined MayaShader objects associated with this set.
int get_num_shaders() const
Returns the number of unique MayaShaders that have been discovered so far.
void bind_uvsets(MayaFileToUVSetMap &map)
Assigns the uvset_name of each MayaShaderColorDef using the given file-to-uvset map.