About

A InitRenderStruct element is used to initialize materials and shaders for rendering. It is typically created by Cinema 4D but it can be created on demand to sample materials or shaders. See Sampling a Shader.

Functionality

A InitRenderStruct element can be initiated and used with these functions:

// This example samples the given shader in UV space.
// init the shader
InitRenderStruct irs { doc };
// check if linear workflow is enabled
if (irs.linear_workflow)
const INITRENDERRESULT res = shader->InitRender(irs);
return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
// sample the shader in UV space
ChannelData channelData;
channelData.off = 0;
channelData.scale = 0;
channelData.t = doc->GetTime().Get();
channelData.texflag = CALC_TEXINFO(0, CHANNEL_COLOR);
channelData.d = Vector { 1, 1, 1 };
channelData.n = Vector { 0, 1, 0 };
channelData.vd = nullptr; // VolumeData is nullptr
for (Int32 y = 0; y < height; ++y)
{
for (Int32 x = 0; x < width; ++x)
{
// generate UV coordinates
const Float64 xFloat = (Float64)x;
const Float64 yFloat = (Float64)y;
const Float64 u = xFloat / widthFloat;
const Float64 v = yFloat / heightFloat;
channelData.p.x = u;
channelData.p.y = v;
channelData.p.z = 0.0f;
const Vector color = shader->Sample(&channelData);
const Vector transformedColor = TransformColor(color, transform).Clamp01();
// write into the given BaseBitmap
const Int32 r = SAFEINT32(transformedColor.x * COLORTOINT_MULTIPLIER);
const Int32 g = SAFEINT32(transformedColor.y * COLORTOINT_MULTIPLIER);
const Int32 b = SAFEINT32(transformedColor.z * COLORTOINT_MULTIPLIER);
bitmap->SetPixel(x, y, r, g, b);
}
}
// free shader resources
shader->FreeRender();
Int32 CALC_TEXINFO(Int32 texflag, Int32 channel)
Definition: c4d_shader.h:53
Vector TransformColor(const Vector &input, COLORSPACETRANSFORMATION colortransformation, Bool force=false)
static const Float COLORTOINT_MULTIPLIER
Constant to convert from vectors color components to integers.
Definition: c4d_tools.h:25
Definition: c4d_shader.h:216
maxon::Float64 Float64
Definition: ge_sys_math.h:67
maxon::Int32 Int32
Definition: ge_sys_math.h:60
#define CHANNEL_COLOR
The color channel of a material.
Definition: c4d_shader.h:95
COLORSPACETRANSFORMATION
Definition: ge_prepass.h:490
@ LINEAR_TO_SRGB
Linear to sRGB color space transformation.
INITRENDERRESULT
Definition: ge_prepass.h:400
@ OK
Everything is OK, there was no error.
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
Int32 SAFEINT32(Float32 x)
Definition: apibasemath.h:266
Definition: c4d_shader.h:1026
Vector n
[READ ONLY] The surface normal.
Definition: c4d_shader.h:1039
Float scale
[READ ONLY] The MIP blur offset.
Definition: c4d_shader.h:1044
Float t
[READ ONLY] The current time in seconds.
Definition: c4d_shader.h:1041
Vector d
[READ ONLY] The MIP sample radius in UVW coordinates.
Definition: c4d_shader.h:1040
Int32 texflag
[READ ONLY] The texture flags: TEX
Definition: c4d_shader.h:1042
VolumeData * vd
[READ ONLY] The volume information, can be nullptr.
Definition: c4d_shader.h:1043
Float off
Definition: c4d_shader.h:1044
Vector p
[READ ONLY] The texture position in UVW coordinates.
Definition: c4d_shader.h:1038
T y
Definition: vec.h:33
constexpr Unstrided Clamp01() const
Returns a vector that is clamped to the range [0.0 .. 1.0].
Definition: vec.h:437
T x
Definition: vec.h:32
T z
Definition: vec.h:34

Properties

The settings of InitRenderStruct are:

Further Reading