THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 11/12/2002 at 23:38, xxxxxxxx wrote:
The constants have moved in R8 and are now found in Mmaterial:
MATERIAL_GLOBALILLUM_GENERATE = 1101,
MATERIAL_GLOBALILLUM_GENERATE_STRENGTH= 1112,
MATERIAL_GLOBALILLUM_RECEIVE = 1100,
MATERIAL_GLOBALILLUM_RECEIVE_STRENGTH = 1102,
MATERIAL_GLOBALILLUM_SATURATION = 1115,
MATERIAL_CAUSTICS_GENERATE = 1109,
MATERIAL_CAUSTICS_GENERATE_STRENGTH = 1113,
MATERIAL_CAUSTICS_RECEIVE = 1108,
MATERIAL_CAUSTICS_RECEIVE_STRENGTH = 1114,
MATERIAL_CAUSTICS_SAMPLERADIUS = 1110,
MATERIAL_CAUSTICS_SAMPLES = 1111,
Here are the necessary steps in R8:
1.) Add these constants (with a different name though) to your material (*.res, *.h and *.str). Here's a sample for the simple material example:
.h:
SIMPLEMATERIAL_CAUSTICS_GENERATE = 1109,
SIMPLEMATERIAL_CAUSTICS_GENERATE_STRENGTH = 1113,
SIMPLEMATERIAL_CAUSTICS_RECEIVE = 1108,
SIMPLEMATERIAL_CAUSTICS_RECEIVE_STRENGTH = 1114,
SIMPLEMATERIAL_CAUSTICS_SAMPLERADIUS = 1110,
SIMPLEMATERIAL_CAUSTICS_SAMPLES = 1111,
ID_SIMPLEMATERIALGROUP_ILLUMINATION = 2000 // virtual ID
.str:
ID_SIMPLEMATERIALGROUP_ILLUMINATION "Illumination";
SIMPLEMATERIAL_GLOBALILLUM_GENERATE "GI Generate" "Generate GI";
SIMPLEMATERIAL_GLOBALILLUM_GENERATE_STRENGTH "GI Generate Strength" "Strength";
SIMPLEMATERIAL_GLOBALILLUM_RECEIVE "GI Receive" "Receive GI";
SIMPLEMATERIAL_GLOBALILLUM_RECEIVE_STRENGTH "GI Receive Strength" "Strength";
SIMPLEMATERIAL_GLOBALILLUM_SATURATION "GI Saturation" "Saturation";
SIMPLEMATERIAL_CAUSTICS_GENERATE "Caustics Generate" "Generate Caustics";
SIMPLEMATERIAL_CAUSTICS_GENERATE_STRENGTH "Caustics Generate Strength" "Strength";
SIMPLEMATERIAL_CAUSTICS_RECEIVE "Caustics Receive" "Receive Caustics";
SIMPLEMATERIAL_CAUSTICS_RECEIVE_STRENGTH "Caustics Receive Strength" "Strength";
SIMPLEMATERIAL_CAUSTICS_SAMPLERADIUS "Caustics Sample Radius" "Radius";
SIMPLEMATERIAL_CAUSTICS_SAMPLES "Caustics Samples" "Samples";
.res:
GROUP ID_SIMPLEMATERIALGROUP_ILLUMINATION
{
COLUMNS 2;
BOOL SIMPLEMATERIAL_GLOBALILLUM_GENERATE {}
REAL SIMPLEMATERIAL_GLOBALILLUM_GENERATE_STRENGTH { UNIT PERCENT; MIN 0.0; MAX 10000.0; }
BOOL SIMPLEMATERIAL_GLOBALILLUM_RECEIVE {}
REAL SIMPLEMATERIAL_GLOBALILLUM_RECEIVE_STRENGTH { UNIT PERCENT; MIN 0.0; MAX 10000.0; }
SEPARATOR { }
REAL SIMPLEMATERIAL_GLOBALILLUM_SATURATION { UNIT PERCENT; MIN 0.0; MAX 1000.0; }
SEPARATOR { }
SEPARATOR { }
BOOL SIMPLEMATERIAL_CAUSTICS_GENERATE {}
REAL SIMPLEMATERIAL_CAUSTICS_GENERATE_STRENGTH { UNIT PERCENT; MIN 0.0; MAX 10000.0; }
BOOL SIMPLEMATERIAL_CAUSTICS_RECEIVE {}
REAL SIMPLEMATERIAL_CAUSTICS_RECEIVE_STRENGTH { UNIT PERCENT; MIN 0.0; MAX 10000.0; }
SEPARATOR { }
REAL SIMPLEMATERIAL_CAUSTICS_SAMPLERADIUS { UNIT METER; MIN 0.0; }
SEPARATOR { }
LONG SIMPLEMATERIAL_CAUSTICS_SAMPLES { MIN 1; MAX 10000; }
}
After that C4D will look at these values and sample your material accordingly. You shouldn't need to change anything in the shader part of the code.
2.) To implement the ghosting on the illumination page add the following lines of code (SimpleMaterial example as well) :
Bool SimpleMaterial::GetDEnabling(GeListNode *node, const DescID &id,GeData &t_data,LONG flags,const BaseContainer *itemdesc)
{
BaseContainer *dat = ((BaseMaterial* )node)->GetDataInstance();
Bool gi_available = C4DOS.Ra->ComputeDiffuseIllumination!=NULL;
switch (id[0].id)
{
case MATERIAL_GLOBALILLUM_GENERATE:
case MATERIAL_GLOBALILLUM_RECEIVE:
case MATERIAL_CAUSTICS_GENERATE:
case MATERIAL_CAUSTICS_RECEIVE:
return gi_available;
case MATERIAL_GLOBALILLUM_GENERATE_STRENGTH:
return gi_available && dat->GetBool(MATERIAL_GLOBALILLUM_GENERATE);
case MATERIAL_GLOBALILLUM_RECEIVE_STRENGTH:
case MATERIAL_GLOBALILLUM_SATURATION:
return gi_available && dat->GetBool(MATERIAL_GLOBALILLUM_RECEIVE);
case MATERIAL_CAUSTICS_GENERATE_STRENGTH:
return gi_available && dat->GetBool(MATERIAL_CAUSTICS_GENERATE);
case MATERIAL_CAUSTICS_RECEIVE_STRENGTH:
return gi_available && dat->GetBool(MATERIAL_CAUSTICS_RECEIVE);
case MATERIAL_CAUSTICS_SAMPLERADIUS:
case MATERIAL_CAUSTICS_SAMPLES:
return (dat->GetBool(MATERIAL_CAUSTICS_RECEIVE) || dat->GetBool(MATERIAL_CAUSTICS_GENERATE)) && gi_available;
}
return SUPER::GetDEnabling(node,id,t_data,flags,itemdesc);
}
That's it!