MultipassObject Manual

内容表

关于

A MultipassObject represents a multipass element of the render settings. Cinema 4D 's render engines will render and save different multipasses based on these settings.

MultipassObject objects are an instance of Zmultipass .

// This example searches for the "depth" multipass. // If it is not found, it will be created.
RenderData * const renderData = doc-> GetActiveRenderData ();
MultipassObject * multipass = renderData-> GetFirstMultipass (); MultipassObject * depthPass = nullptr ; while (multipass != nullptr ) { BaseContainer & data = multipass-> GetDataInstanceRef (); const Int32 type = data. GetInt32 ( MULTIPASSOBJECT_TYPE ); if (type == VPBUFFER_DEPTH ) { depthPass = multipass; break ; } multipass = multipass-> GetNext (); } if (depthPass == nullptr ) { // allocate multipass depthPass = static_cast< MultipassObject * > ( BaseList2D::Alloc ( Zmultipass )); if (depthPass == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION );

// set to depth pass BaseContainer & data = depthPass-> GetDataInstanceRef (); data. SetInt32 ( MULTIPASSOBJECT_TYPE , VPBUFFER_DEPTH );

// insert renderData-> InsertMultipass (depthPass); renderData-> 消息 ( MSG_UPDATE ); }

// enable multi-passes renderData-> SetParameter ( DescID ( RDATA_MULTIPASS_ENABLE ), true , DESCFLAGS_SET::NONE );

Access

Existing MultipassObject elements are stored in a list and can be accessed from a RenderData object:

Allocation/Deallocation

The MultipassObject class does not offer a static "Alloc" or "Free" function so the functions of BaseList2D have to be used with Zmultipass .

A newly created MultipassObject is added to the render settings by adding it to the RenderData object:

// allocate multipass MultipassObject * const depthPass = ( MultipassObject *) BaseList2D::Alloc ( Zmultipass ); if (depthPass == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION );

// set to depth pass BaseContainer & data = depthPass-> GetDataInstanceRef (); data. SetInt32 ( MULTIPASSOBJECT_TYPE , VPBUFFER_DEPTH );

// insert renderData-> InsertMultipass (depthPass);

Navigate

MultipassObject objects are organized in a list:

// This example loops through all multipasses and prints their names. RenderData * const renderData = doc-> GetActiveRenderData (); MultipassObject * multipass = renderData-> GetFirstMultipass (); while (multipass != nullptr ) { ApplicationOutput ( "Multipass: " + multipass-> GetName ()); multipass = multipass-> GetNext (); }

类型

All multipasses are MultipassObject objects. They only differ in their parameters. The type of a multipass is defined with:

Simple multipass types are:

Configurable multipass types are:

The parameter IDs of configurable multipasses are defined in zmultipass.h .

Additional multipass types are:

Example object buffer:

// This example creates an object buffer multipass. MultipassObject * const multipass = static_cast< MultipassObject * > ( BaseList2D::Alloc ( Zmultipass )); if (multipass == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION ); BaseContainer & data = multipass-> GetDataInstanceRef (); data. SetInt32 ( MULTIPASSOBJECT_TYPE , VPBUFFER_OBJECTBUFFER ); data. SetInt32 ( MULTIPASSOBJECT_OBJECTBUFFER , 99); renderData-> InsertMultipass (multipass);

Example blend channel:

// This example creates an blend multipass. MultipassObject * const multipass = static_cast< MultipassObject * > ( BaseList2D::Alloc ( Zmultipass )); if (multipass == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION ); BaseContainer & data = multipass-> GetDataInstanceRef (); data. SetInt32 ( MULTIPASSOBJECT_TYPE , VPBUFFER_BLEND ); data. SetBool ( MULTIPASSOBJECT_DIFFUSE , true ); data. SetBool ( MULTIPASSOBJECT_SHADOW , true ); renderData-> InsertMultipass (multipass);

Example reflection channel:

// This example creates a reflection multipass. MultipassObject * const multipass = static_cast< MultipassObject * > ( BaseList2D::Alloc ( Zmultipass )); if (multipass == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION ); BaseContainer & data = multipass-> GetDataInstanceRef (); data. SetInt32 ( MULTIPASSOBJECT_TYPE , VPBUFFER_REFLECTION ); data. SetInt32 ( MULTIPASSOBJECT_REFLECTION_MATERIALS , MULTIPASSOBJECT_REFLECTION_SEPARATE_ALL ); renderData-> InsertMultipass (multipass);

Example specular channel:

// This example creates a specular multipass. MultipassObject * const multipass = static_cast< MultipassObject * > ( BaseList2D::Alloc ( Zmultipass )); if (multipass == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION ); BaseContainer & data = multipass-> GetDataInstanceRef (); data. SetInt32 ( MULTIPASSOBJECT_TYPE , VPBUFFER_SPECULAR ); data. SetInt32 ( MULTIPASSOBJECT_SPECULAR_MATERIALS , MULTIPASSOBJECT_SPECULAR_SEPARATE_ALL ); renderData-> InsertMultipass (multipass);

延伸阅读

MULTIPASSOBJECT_TYPE
@ MULTIPASSOBJECT_TYPE
定义: zmultipass.h:6
MULTIPASSOBJECT_DIFFUSE
@ MULTIPASSOBJECT_DIFFUSE
定义: zmultipass.h:14
MULTIPASSOBJECT_REFLECTION_SEPARATE_ALL
@ MULTIPASSOBJECT_REFLECTION_SEPARATE_ALL
定义: zmultipass.h:27
DescID
定义: lib_description.h:327
BaseContainer::SetInt32
void SetInt32(Int32 id, Int32 l)
定义: c4d_basecontainer.h:505
MAXON_SOURCE_LOCATION
#define MAXON_SOURCE_LOCATION
定义: memoryallocationbase.h:66
MULTIPASSOBJECT_SPECULAR_MATERIALS
@ MULTIPASSOBJECT_SPECULAR_MATERIALS
定义: zmultipass.h:38
BaseContainer::SetBool
void SetBool(Int32 id, Bool b)
定义: c4d_basecontainer.h:498
DESCFLAGS_SET::NONE
@ NONE
None.
RenderData::InsertMultipass
void InsertMultipass(MultipassObject *obj, MultipassObject *pred=nullptr)
BaseList2D::Alloc
static BaseList2D * Alloc(Int32 type)
MULTIPASSOBJECT_SPECULAR_SEPARATE_ALL
@ MULTIPASSOBJECT_SPECULAR_SEPARATE_ALL
定义: zmultipass.h:40
MSG_UPDATE
#define MSG_UPDATE
Must be sent if the bounding box has to be recalculated. (Otherwise use MSG_CHANGE....
定义: c4d_baselist.h:340
C4DAtom::SetParameter
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
MULTIPASSOBJECT_SHADOW
@ MULTIPASSOBJECT_SHADOW
定义: zmultipass.h:16
BaseList2D::GetDataInstanceRef
const BaseContainer & GetDataInstanceRef() const
定义: c4d_baselist.h:2299
MultipassObject::GetNext
MultipassObject * GetNext(void)
定义: c4d_basedocument.h:120
VPBUFFER_SPECULAR
#define VPBUFFER_SPECULAR
Specular multipass channel.
定义: c4d_videopostdata.h:118
Int32
maxon::Int32 Int32
定义: ge_sys_math.h:58
ApplicationOutput
#define ApplicationOutput(formatString,...)
定义: debugdiagnostics.h:207
C4DAtom::Message
Bool Message(Int32 type, void *data=nullptr)
定义: c4d_baselist.h:1394
VPBUFFER_OBJECTBUFFER
#define VPBUFFER_OBJECTBUFFER
Object buffer multipass channel.
定义: c4d_videopostdata.h:140
VPBUFFER_BLEND
#define VPBUFFER_BLEND
Blend multipass channel.
定义: c4d_videopostdata.h:150
RenderData::GetFirstMultipass
MultipassObject * GetFirstMultipass()
BaseDocument::GetActiveRenderData
RenderData * GetActiveRenderData(void)
VPBUFFER_DEPTH
#define VPBUFFER_DEPTH
Depth multipass channel.
定义: c4d_videopostdata.h:130
RenderData
定义: c4d_basedocument.h:136
MultipassObject
定义: c4d_basedocument.h:105
BaseList2D::GetName
String GetName() const
定义: c4d_baselist.h:2318
Zmultipass
#define Zmultipass
定义: ge_prepass.h:1135
RDATA_MULTIPASS_ENABLE
@ RDATA_MULTIPASS_ENABLE
定义: drendersettings.h:330
MULTIPASSOBJECT_OBJECTBUFFER
@ MULTIPASSOBJECT_OBJECTBUFFER
定义: zmultipass.h:8
BaseContainer::GetInt32
Int32 GetInt32(Int32 id, Int32 preset=0) const
定义: c4d_basecontainer.h:303
BaseContainer
定义: c4d_basecontainer.h:46
MULTIPASSOBJECT_REFLECTION_MATERIALS
@ MULTIPASSOBJECT_REFLECTION_MATERIALS
定义: zmultipass.h:25
VPBUFFER_REFLECTION
#define VPBUFFER_REFLECTION
Reflection multipass channel.
定义: c4d_videopostdata.h:120

Copyright  © 2014-2025 乐数软件    

工业和信息化部: 粤ICP备14079481号-1