About
BaseMaterial is the base class for all materials in Cinema 4D. Materials are typically assigned to a BaseObject using a TextureTag. They can be configured like any other BaseList2D based entity. Materials often own BaseShader elements. The most often used material is the standard material (Material class).
BaseMaterial objects are an instance of Mbase.
Access
Materials are stored in a BaseDocument. They can be accessed with:
See BaseDocument Materials
A TextureTag stores a reference to a material. This referenced material is accessed with:
  
  
 
  if (ttag == nullptr)
 
  if (material != nullptr)
  {
  }
String GetName() const
Definition: c4d_baselist.h:2544
 
Definition: c4d_basematerial.h:28
 
Definition: c4d_basetag.h:704
 
BaseMaterial * GetMaterial(Bool ignoredoc=false) const
 
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
 
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:204
 
#define Ttexture
Texture - TextureTag.
Definition: ge_prepass.h:1412
 
 See TextureTag Manual.
Allocation/Deallocation
BaseMaterial objects are created with the usual tools.
A newly created material is typically added to a BaseDocument that takes ownership:
A material is assigned to a BaseObject using a TextureTag. The referenced material is set with:
  
  
 
  
 
  
 
  
  
  const Bool noCheen = cheen == 
nullptr;
 
  const Bool noTextureTag = textureTag == 
nullptr;
 
  if (noCheen || noTextureTag)
 
  
  textureTag->SetMaterial(cheen);
 
  
  doc->InsertMaterial(cheen.Release(), 
nullptr);
 
  object->InsertTag(textureTag.
Release());
 
Definition: ge_autoptr.h:37
 
TYPE * Release()
Definition: ge_autoptr.h:123
 
maxon::Bool Bool
Definition: ge_sys_math.h:51
 
#define Mcheen
Cheen.
Definition: ge_prepass.h:1015
 
const char * doc
Definition: pyerrors.h:226
 
  
Navigation
The BaseMaterial elements of a BaseDocument are stored in a list:
  
 
 
  while (material != nullptr)
  {
 
  }
BaseMaterial * GetNext()
Definition: c4d_basematerial.h:60
 
  
Read-Only Properties
The following functions allow to access various properties of a BaseMaterial.
  
 
 
Bool ShowBitmap(const Filename &fn)
 
Definition: c4d_basebitmap.h:441
 
BaseBitmap * GetPreview(Int32 flags)
 
  
Update
In certain situations it is needed to manually trigger an update of the material previews. This may be for example needed in a custom material plugin.
Sample Material
Materials define the surface properties of objects. They are sampled in the rendering pipeline e.g. in a VideoPost, another material or a shader.
Internal material resources are initiated and freed with these functions:
If needed the material calculation is initiated with:
The material can now be sampled and used with:
These examples sample a BaseMaterial in a VideoPostData plugin:
          
 
 
          
 
          irs.vd = volumeData;
 
          
 
          
VOLUMEINFO GetRenderInfo()
Definition: c4d_basematerial.h:210
 
INITRENDERRESULT InitTextures(const InitRenderStruct &irs)
Definition: c4d_basematerial.h:104
 
void InitCalculation(VolumeData *sd, INITCALCULATION type)
Definition: c4d_basematerial.h:171
 
Definition: c4d_shader.h:375
 
Py_UCS4 * res
Definition: unicodeobject.h:1113
 
@ SURFACE
Called during rendering for surface calculation.
 
INITRENDERRESULT
Definition: ge_prepass.h:413
 
@ OK
Everything is OK, there was no error.
 
@ OUTOFMEMORY
Not enough memory.
 
@ INITCALCULATION
Needs MaterialData::InitCalculation() call.
 
Definition: c4d_tools.h:1388
 
                  
 
                  volumeData->
tex = texData;
 
 
                  
 
                  
 
void CalcSurface(VolumeData *sd)
Definition: c4d_basematerial.h:139
 
const TexData * tex
[READ ONLY] The surface texture, never change this pointer.
Definition: c4d_shader.h:1114
 
Vector64 n
[READ ONLY] The surface phong normal.
Definition: c4d_shader.h:1105
 
Vector64 p
[READ WRITE] The surface point, this can only be modified by MaterialData::Displace().
Definition: c4d_shader.h:1100
 
Ray * ray
[READ ONLY] The current eye ray. Always valid, not nullptr.
Definition: c4d_shader.h:1103
 
Vector col
[READ WRITE] Set the calculated color within MaterialData::CalcSurface() and MaterialData::CalcVolume...
Definition: c4d_shader.h:1094
 
Int32 calc_illum
Definition: c4d_shader.h:1129
 
Vector uvw
[READ ONLY] The surface UVW coordinates, this is invalid for volumetric shaders.
Definition: c4d_shader.h:1110
 
          
          
 
          
void UnlockTextures()
Unlocks all textures used by the material.
Definition: c4d_basematerial.h:109
 
  
Compare Entity
Two BaseMaterial elements can be compared with:
  
 
  if (firstMaterial == nullptr)
 
  
  if (selectedMaterial->Compare(firstMaterial))
    ApplicationOutput(
"The selected material has the same settings as the first material");
 
return OK
Definition: apibase.h:2735
 
  - Note
 - The comparison is mostly based on the material's BaseContainer. Other internal data may not be compared.
 
Bits
If an element is copied it must mark the materials it uses so that these materials are copied along with the actual element.
- BIT_MATMARK: This bit defines the material as a "marked" material.
 
      
      
 
      {
          return false;
 
        
 
        if (data) 
        {
 
          
          if (markMaterial->
omat == mat)
 
          {
            
 
          }
        }
        else  
        {
          if (mat)
        }
        break;
      }
Definition: c4d_basedocument.h:497
 
void SetBit(Int32 mask)
Definition: c4d_baselist.h:2434
 
Definition: c4d_gedata.h:83
 
const BaseList2D * GetLink(const BaseDocument *doc, Int32 instanceof=0) const
 
#define BIT_MATMARK
Marked material.
Definition: ge_prepass.h:895
 
#define MSG_MULTI_MARKMATERIALS
Definition: c4d_baselist.h:551
 
#define MSG_CHANGE
Definition: c4d_baselist.h:362
 
#define Mbase
Base material.
Definition: ge_prepass.h:1007
 
@ CHANGE_SMALL
Change to the local data of the node as its data container. Does not apply for changes on substructur...
 
#define ConstDescID(...)
Definition: lib_description.h:594
 
Represents a level within a DescID.
Definition: lib_description.h:298
 
Definition: c4d_baselist.h:802
 
BaseMaterial * nmat
New material. Cinema 4D owns the pointed material.
Definition: c4d_baselist.h:809
 
BaseMaterial * omat
Original material. Cinema 4D owns the pointed material.
Definition: c4d_baselist.h:808
 
  
Further Reading