Describes a material of a geometry including its surface colors, transparency and texture information.
The material class is responsible for the appearance of a surface when its rendered. Each mesh in Mudbox has an associated material, and multiple meshes can use the same material instance.
When Mudbox renders the mesh, it first uses the associated material to prepare the opengl pipeline for the mesh by calling the Material::Activate() function. The material class is also used to determine the list of paintable textures over the surface. The functions Material::TextureCount() and Material::Texture() are used for this purpose. For more details, see the TexturePool class.
You can derive from the Material class to create your own custom materials with texture channels that control any parameters you wish. See the SDK examples.
How to access a specific texture value at a point on the surface:
- Calculate the texture coordinate associated for the surface point. This can be done by calculating a linear conbination of the texture coordinates at the corners of the face based on the information you have about where the point is inside the face.
- Decide which texture are you interested in, by examining the list of textures in the corrseponding material instance by calling the TextureCount() and Texture() functions. You can get the name of a texture by calling the Texture::Name() function. This list is dynamic is because it can changed depending on the material implementation. The default Mudbox material has a fixed list, but materials created from custom cgfx files can have very different texture lists.
- Since Mudbox supports layers for each texture, you next need to choose the layer you are interested in. To do this, cast the pointer obtained in step 2 to LayerContainer. Once you have a pointer to a layercontainer instance, you can check the list of layers and their names. Finally you have to cast the layer to a TexturePool again.
- Based on your interpolated texture coordinate, you have to select the proper tile in the TexturePool by calling TexturePool::Tile() function. (If the UV space of an object goes beyond the range 0-1, Mudbox uses multiple tiles to represent each layer of a texture.) Pass in a bounding box representing the tile you are interested in. For example, if the desired texture coordinate is 1.3, 3.4, then you would pass in a bounding box between ( 1, 3, 0 ) and ( 2, 4, 0 ). (In texture space, the third coordinate is always 0.) Once you get the tile, you would sample the texel at 0.3, 0.4 within that tile. (See next step)
- Once you got the texture, copy it to an Image object by calling the Texture::CopyTo() function. You can easily access the color of the needed pixel by calling the Image::ColorAt() function. Note that copying a texture to an image is a slow process, so if you want to sample multiple surface points, it is smart to copy the textures only once, and cache it.
Definition at line 73 of file material.h.
|
| ~Material () |
|
virtual bool | Activate (const Mesh *pMesh, const AxisAlignedBoundingBox &cUVArea, const Color &cColor=Color::white) |
| Prepares the GPU to draw with this material. More...
|
|
virtual void | Deactivate (void) |
| Sets the GPU back to its default state. More...
|
|
virtual float | Transparency (void) const |
| Returns the overall transparency of the surface. More...
|
|
virtual void | SetTransparency (float fTransparency) |
| Sets the transparency of the surface. More...
|
|
virtual bool | TexturesVisible (void) const |
| Returns true if textures should be visible on the rendered surface. More...
|
|
virtual void | SetTexturesVisible (bool bVisible) |
| Sets if the textures should be visible on the surface. More...
|
|
virtual bool | IsTCNeeded (void) const |
| Returns true if the material implementation needs texture coordinates from the mesh. More...
|
|
virtual bool | IsTNBNeeded (void) const |
| Returns true if the material implementation needs tangent and binormal data from the mesh. More...
|
|
virtual unsigned int | TextureCount (void) const |
| Returns the number of textures associated with the material. More...
|
|
virtual class TexturePool * | Texture (unsigned int iTextureIndex) const |
| Returns a pointer to the specified texture. Do not delete this pointer. More...
|
|
virtual bool | SetTextureTileLive (const AxisAlignedBoundingBox &cUVArea, bool bLive, float fTCGrad=-1.0f, bool bSync=false, bool bLazyUpdate=false) |
| Loads or unloads the specified uv tile for all textures in this material. More...
|
|
virtual bool | IsTextureTileLive (const AxisAlignedBoundingBox &cUVArea) |
| Returns if the specified uv tile is loaded into memory. More...
|
|
virtual unsigned int | TextureTileCount () const |
| Returns the number of texture tiles associated with this material. More...
|
|
virtual void | SetTextureTileLODBias (const AxisAlignedBoundingBox &cArea, float fTCGrad) |
| Set the texture coordinate gradient for the specified texture tile area. More...
|
|
virtual qint64 | TileVideoMemoryUsage (const AxisAlignedBoundingBox &cArea, float fTCGrad=-1.0f) const |
| Returns the amount video memory that Mudbox estimates the specified tile would use for the specified texture coordinate gradient. More...
|
|
virtual AxisAlignedBoundingBox | TextureTileArea (unsigned int iTileIndex) const |
| Returns the uv area covered by the given tile. More...
|
|
virtual void | ActivateUVArea (const AxisAlignedBoundingBox &cArea) |
| Prepares the GPU to draw a specific uv area. More...
|
|
virtual VertexDataUsage | MapVertexData (VertexDataUsage eUsage) const |
| This function is called to determine the mapping of vertex shader inputs for the material. More...
|
|
virtual Layer * | ImportPaintLayer (const QString &sFileName, const QString &sChallenName, Mesh *pMesh=0 ) |
| Import a new paint layer from a file to the material. More...
|
|
| TreeNode (void) |
|
| ~TreeNode (void) |
|
virtual void | Serialize (Stream &s) |
| Serializes the node. More...
|
|
virtual void | AddChild (TreeNode *pChild, bool bFirst=false) const |
| Adds a node/subtree to the list of children. The added node will be removed from the current parent if it has one. More...
|
|
virtual void | RemoveChild (TreeNode *pChild) const |
| Removes a node/subtree from the list of children. More...
|
|
virtual TreeNode * | FirstChild (void) const |
| Returns the first node from the child list. More...
|
|
virtual TreeNode * | Parent (void) const |
| Returns the parent node. More...
|
|
virtual TreeNode * | NextSibling (void) const |
| Returns the next linked node with the same parent. More...
|
|
virtual TreeNode * | PrevSibling (void) const |
| Returns the previous linked node with the same parent. More...
|
|
virtual void | MoveChild (TreeNode *pChild, TreeNode *pAfter) |
| Moves the child after the given node in order. More...
|
|
virtual TreeNode * | ChildByClass (const ClassDesc *pClass, bool bAutoCreate=true) const |
| Returns the first child with the specified type. When the bAutoCreate parameter is true and such a child does not exists, it creates it with the preferred descedant type. More...
|
|
template<typename type > |
type * | ChildByClass (bool bAutoCreate=true) const |
| Same as above, a most confortable version. More...
|
|
virtual TreeNode * | ChildByClass (const ClassDesc *pClass, unsigned int iIndex=0) const |
| Returns the first child with the specified type, or returns zero if no child found. More...
|
|
template<typename type > |
type * | ChildByClass (unsigned int iIndex=0) const |
| Same as above, a most confortable version. More...
|
|
virtual void | DeleteChildByClass (const ClassDesc *pClass) |
| Deletes all child which is derived from a specific class. More...
|
|
virtual QString | Info (void) const |
| Returns descriptive information about the node. More...
|
|
virtual bool | Visible (void) const |
| Returns if the node is visible. Should be overridden in derived classes. More...
|
|
virtual void | SetVisible (bool b) |
| Sets the node visibility Should be overridden in derived classes. More...
|
|
virtual bool | Locked (void) const |
| Returns if the node is locked. Should be overridden in derived classes. More...
|
|
virtual void | SetLocked (bool b) |
| Sets the locking of the node. Should be overridden in derived classes. More...
|
|
virtual bool | HiddenFromUI (void) const |
| Returns true if the node cannot be seen from UI. More...
|
|
virtual void | SetHiddenFromUI (bool b) |
| Sets visibility in UI. More...
|
|
virtual void | OnLinked (const TreeNode *pOldParent) |
| This function is called then the node is linked to a new parent. More...
|
|
virtual void | CheckValidity (Node::DiagnosticLevel iLevel=dgnLevel2) const |
| See the documentation for Node::CheckValidity. More...
|
|
QString | UniqueChildName (const TreeNode *pChild, const QString &sPrefix="") const |
| Finds a node name that is unique among the children of this node. More...
|
|
virtual void | SetStringID (const QString &sName) |
| This method does the same thing as Node::SetStringID, except it ensures the name is unique among this node's siblings. More...
|
|
virtual void | CopyTo (Node *pNode) const |
|
| Node (const QString &sStringID="", const QString &sDisplayName="") |
| Standard constructor. More...
|
|
virtual | ~Node (void) |
|
virtual void | Initialize (void) |
|
void | LoadTemplate (const QString &sFileName="", bool bStartEvent=false) |
| Use an external XML file to initialize the attributes. More...
|
|
void | SaveTemplate (const QString &sFileName="", bool bSaveOnlyVisible=false) |
| Save current attributes as an XML template. More...
|
|
unsigned int | Version (void) const |
| Returns the current version of the node. This number increases when the content of the node changed (when ContentChanged() called). More...
|
|
void | SetVersion (unsigned int iVersion) |
| Sets the current version number for the node. More...
|
|
unsigned int | ReferenceCount (void) const |
| Returns the number of pointers referencing this node. More...
|
|
Attribute * | ReferencePointer (unsigned int iIndex) const |
| Returns the address of an attribute which refers to this node. The type of the attribute is always aptr. More...
|
|
Node * | ReferenceNode (unsigned int iIndex) const |
| Returns the address of a node referencing this node. More...
|
|
virtual QString | Name (const ClassDesc *pClass=0) const |
| Deprecated. More...
|
|
virtual void | SetName (const QString &sName) |
| Deprecated. More...
|
|
virtual QString | StringID (const ClassDesc *pClass=0) const |
| Returns the string id of the node. More...
|
|
virtual QString | DisplayName (void) const |
| Returns the display name of the node. More...
|
|
virtual void | SetDisplayName (const QString &sDisplayName) |
| Sets the display name of the node. More...
|
|
virtual QString | HelpID (void) const |
| Returns the help entry id of the node. Can be overwritten in derived classes. More...
|
|
virtual void | SetHelpID (const QString &sHelpID) |
| Sets the help entry id of the node. More...
|
|
void | Annex (Node *pSource, const QString &sCategory="") |
| Relink all the attributes of the source node to this one. More...
|
|
bool | IsKindOf (const ClassDesc *pClass) const |
| Returns true if this node is derived from the pClass class. More...
|
|
void | ContentChanged (void) const |
| This function must be called if the content of the node is changed. More...
|
|
virtual Node * | Duplicate (void) const |
|
virtual void | OnNodeEvent (const Attribute &cAttribute, NodeEventType cType) |
| This function is called if an event occurs with any of the attributes of the node. More...
|
|
virtual void | OnEvent (const EventGate &cEvent) |
| This function is called when a generic event occurs. See EventGate class. More...
|
|
void | RequestDeferredEvent (Attribute &cAttribute) |
| Request for a deferred event, which will occur only in the main loop. More...
|
|
unsigned int | AttributeCount (void) const |
| Returns the number of attributes owned by the node. More...
|
|
Attribute * | AttributeByIndex (int iIndex) const |
| Returns a specified attribute (or 0 if iIndex is greater than the number of attributes). More...
|
|
Attribute * | AttributeByName (const QString &sName) const |
| Returns a specified attribute by its name. Returns 0 if the attribute not found. More...
|
|
Attribute * | AttributeByID (const QString &sID) const |
| Returns a specified attribute by its ID. Returns 0 if the attribute not found. More...
|
|
void | SetAttributeValue (const QString &sAttributeID, const QString &sNewValue) |
| Set the value of an attribute from a string. More...
|
|
QString | AttributeValue (const QString &sAttributeID) const |
| Returns the current value of an attribute as a string. More...
|
|
void | LogAttributes (void) const |
| Write all attributes into the log file. More...
|
|
virtual QWidget * | CreatePropertiesWindow (QWidget *pParent) |
| Create a window which displays the attributes of the node. Can be overriden to provide a custom interface. More...
|
|
Attribute * | AddAttribute (Attribute::AttributeType type, const QString &id) |
| Allows SDK users to add attributes at runtime. More...
|
|
Node * | Next (void) const |
| Returns the next node in the chain. Used to enumerate the current nodes. See also First(). More...
|
|
int | ID (void) const |
| Returns an ID for the node. The ID is unique in the whole application life. More...
|
|
bool | SetID (int iID) |
| Set ID for the node. More...
|
|