About
A BaseShader is the base class for shaders in Cinema 4D . Shaders are typically used with materials to define various surface properties. But shaders can also be used in other situations for example in combination with generator objects. BaseShader objects are not stored with the BaseDocument directly but must be inserted into the object that uses them.
BaseShader objects are an instance of Xbase
.
const Bool materialFailure = material ==
nullptr ;
const Bool shaderFailure = bitmapShader ==
nullptr ;
const Bool tagFailure = textureTag ==
nullptr ;
if (materialFailure || shaderFailure || tagFailure)
{
}
object ->InsertTag(textureTag);
Access
Shaders are owned by the object that uses them. The shaders owned by a given object are organized in a list:
Shaders are typically organized in a list but can also be organized in a tree:
while (shader != nullptr )
{
}
Allocation/Deallocation
Shaders are created with the usual tools.
Newly created shaders are typically handed over to the object that uses them:
For a list of shader IDs see Shader Types .
if (noiseShader == nullptr )
Read-Only Properties
Note Also supported shaders may be baked into a texture, depending on the used material channel and shader context.
Sampling a Shader
A shader returns a color value for a given point. This point can be a point in world or object space or a set of UV-coordinates. A shader is sampled this way typically in the rendering pipeline.
A shader has to be initiated:
After the shader has been initiated these functions can be used:
In the end the resources of the shader must be released:
Warning Without properly initiated InitRenderStruct::vd argument it is not safe to sample a shader multi-threaded.
A shader can sipmply be baked into a BaseBitmap using:
const maxon::Int32 colorProfile = irs.document_colorprofile;
const maxon::Bool linearWorkflow = irs.linear_workflow;
const Bool bakeResult = shader->BakeShaderIntoBaseBitmap(bitmap, *doc, parentThread, alpha, colorProfile, linearWorkflow, hdr, xmin, xmax, ymin, ymax);
if (bakeResult == false )
if (irs.linear_workflow)
channelData.
d =
Vector { 1, 1, 1 };
channelData.
n =
Vector { 0, 1, 0 };
channelData.
vd =
nullptr ;
for (
Int32 y = 0; y < height; ++y)
{
for (
Int32 x = 0; x < width; ++x)
{
const Float64 u = xFloat / widthFloat;
const Float64 v = yFloat / heightFloat;
const Vector color = shader->Sample(&channelData);
}
}
shader->FreeRender();
Compare
Two BaseShader elements can be compared with:
Note The comparison is mostly based on the shader's BaseContainer . Other internal data may not be compared.
Further Reading
Definition: c4d_basechannel.h:31
Definition: ttexture.h:17
Int32 texflag
[READ ONLY] The texture flags: TEX
Definition: c4d_shader.h:965
#define Xbitmap
Bitmap.
Definition: ge_prepass.h:1157
static void Free(Material *&bl)
Definition: c4d_basetag.h:566
Definition: lib_description.h:315
static void Free(BaseShader *&ps)
Bool AddUndo(UNDOTYPE type, void *data, Bool allowFromThread=false)
Manages file and path names.
Definition: c4d_file.h:81
return OK
Definition: apibase.h:2462
Int32 SAFEINT32(Float32 x)
Definition: apibasemath.h:290
bool Bool
boolean type, possible values are only false/true, 8 bit
Definition: apibase.h:177
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:66
Float t
[READ ONLY] The current time in seconds.
Definition: c4d_shader.h:964
Vector p
[READ ONLY] The texture position in UVW coordinates.
Definition: c4d_shader.h:961
Float off
Definition: c4d_shader.h:967
#define Xnoise
Noise.
Definition: ge_prepass.h:1193
Definition: ttexture.h:10
Definition: mmaterial.h:272
Definition: mmaterial.h:278
void InsertMaterial(BaseMaterial *mat, BaseMaterial *pred=nullptr, Bool checknames=false)
Float Get(void) const
Definition: c4d_basetime.h:62
void SetMaterial(BaseMaterial *mat)
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
Definition: c4d_basematerial.h:229
Definition: c4d_shader.h:176
int32_t Int32
32 bit signed integer datatype.
Definition: apibase.h:172
Bool SetPixel(Int32 x, Int32 y, Int32 r, Int32 g, Int32 b)
Definition: c4d_basebitmap.h:689
static Material * Alloc()
static BaseShader * Alloc(Int32 type)
Vector TransformColor(const Vector &input, COLORSPACETRANSFORMATION colortransformation)
INITRENDERRESULT
Definition: ge_prepass.h:389
Int64 Int
signed 32/64 bit int, size depends on the platform
Definition: apibase.h:184
Vector d
[READ ONLY] The MIP sample radius in UVW coordinates.
Definition: c4d_shader.h:963
maxon::Int32 Int32
Definition: ge_sys_math.h:45
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:209
Linear to sRGB color space transformation.
Bool ShowBitmap(const Filename &fn)
static TextureTag * Alloc()
Vector n
[READ ONLY] The surface normal.
Definition: c4d_shader.h:962
BaseShader * GetNext(void)
Definition: c4d_basechannel.h:64
Unstrided Clamp01() const
Returns a vector that is clamped to the range [0.0 .. 1.0].
Definition: vec.h:399
New object/material/tag etc. was created. (Needs to be called after action.)
Int32 CALC_TEXINFO(Int32 texflag, Int32 channel)
Definition: c4d_shader.h:49
maxon::Bool Bool
Definition: ge_sys_math.h:40
COLORSPACETRANSFORMATION
Definition: ge_prepass.h:477
BaseShader * GetFirstShader() const
Definition: c4d_baselist.h:2441
String GetName() const
Definition: c4d_baselist.h:2259
Float scale
[READ ONLY] The MIP blur offset.
Definition: c4d_shader.h:967
VolumeData * vd
[READ ONLY] The volume information, can be nullptr.
Definition: c4d_shader.h:966
#define CHANNEL_COLOR
The color channel of a material.
Definition: c4d_shader.h:91
Everything is OK, there was no error.
Definition: c4d_shader.h:948
static void Free(TextureTag *&bl)
maxon::Float64 Float64
Definition: ge_sys_math.h:52
void InsertShader(BaseShader *shader, BaseShader *pred=nullptr)
Definition: c4d_baselist.h:2469
Bool FileSelect(FILESELECTTYPE type, FILESELECT flags, const maxon::String &title, const maxon::String &force_suffix=maxon::String())