Shade

  • LXi_TEXLAYER_BLEND_NORMAL

  • LXi_TEXLAYER_BLEND_ADD

  • LXi_TEXLAYER_BLEND_SUB

  • LXi_TEXLAYER_BLEND_DIFF

  • LXi_TEXLAYER_BLEND_NORMALMULT

  • LXi_TEXLAYER_BLEND_DIV

  • LXi_TEXLAYER_BLEND_MULTIPLY

  • LXi_TEXLAYER_BLEND_SCREEN

  • LXi_TEXLAYER_BLEND_OVERLAY

  • LXi_TEXLAYER_BLEND_SOFTLIGHT

  • LXi_TEXLAYER_BLEND_HARDLIGHT

  • LXi_TEXLAYER_BLEND_DARKEN

  • LXi_TEXLAYER_BLEND_LIGHTEN

  • LXi_TEXLAYER_BLEND_COLORDODGE

  • LXi_TEXLAYER_BLEND_COLORBURN

  • LXi_BRDFTYPE_BLINN

  • LXi_BRDFTYPE_ASHIKHMIN

  • LXi_BRDFTYPE_GTR

  • LXi_BRDFTYPE_PRINCIPLED

  • LXi_SHADERMODEL_MODO

  • LXi_SHADERMODEL_UNREAL

  • LXi_SHADERMODEL_UNITY

  • LXi_SHADERMODEL_PRINCIPLED

  • LXi_SHADERMODEL_PRINCIPLED_COAT

  • LXi_SHADERMODEL_PRINCIPLED_SHEEN

  • LXi_SHADERMODEL_GLTF

  • LXi_SHADERMODEL_AXF


LXi_GLTFSHADINGMODELv_PBR

Two glTF shading models are supported:

  • LXi_GLTFSHADINGMODELv_UNLIT

  • LXi_REFLTYPE_FULL

  • LXi_REFLTYPE_ENVIRON


LXf_SMOOTHING_WEIGHT_AREA

Options for normal calculation.

  • LXf_SMOOTHING_WEIGHT_AREA_SUM

  • LXf_SMOOTHING_WEIGHT_ANGLE

  • LXf_SMOOTHING_WEIGHT_DEFAULT

  • LXi_SMOOTHING_NORMAL_DEFAULT

  • LXi_SMOOTHING_NORMAL_NEWELL

  • LXf_SMOOTHING_CREASE_ANGLE

  • LXf_SMOOTHING_CREASE_GROUPS

  • LXf_SMOOTHING_CREASE_FORCEGROUPS

  • LXf_SMOOTHING_CREASE_HARDEDGES

  • LXf_SMOOTHING_CREASE_DEFAULT


LXi_SURF_ALL

The group item has three channels: ‘ptag’ stores the ptag value, ‘ptyp’ stores the ptag type, and ‘subm’ to apply the group textures to its submasks. The item also has an object link to reference objects for masking. The ‘styp’ channel is for surface type which at the moment is (all), triangle or fur:

  • LXi_SURF_TRIANGLE

  • LXi_SURF_FUR

  • LXi_SURF_CURVE_TRIANGLE

  • LXsITYPE_UNITY_SHADER

  • LXsITYPE_UNREAL_SHADER

  • LXsITYPE_GLTF_SHADER

  • LXsITYPE_AXF_SHADER

ILxTextureLayer

class ILxTextureLayer

Public Functions

int Flags(LXtObjectID self)

This is the interface used to get the flags, vector type and 2 evaluation interfaces. ‘Flags’ textures have a number of flags that indicate how the texture behaves in general. For examples flags are used to indicate if a texture references clip or locator items, or if it references things like vmaps. ‘VectorType’ returns the texture global vector type. NOTE: this should probably be implemented as ISA ‘Preview’ is used to process item events and returns preview change flags. ‘PrepFilter’ adds the channels for the texture modifier ‘AllocFilter’ allocates a full texture filter object ‘AllocTexture’ allocates a simpler texture evaluation object.

LxResult VectorType(LXtObjectID self, void **ppvObj)
int Preview(LXtObjectID self, LXtPreviewEvent *event)
LxResult PrepFilter(LXtObjectID self, LXtObjectID eval)
LxResult AllocFilter(LXtObjectID self, LXtObjectID attr, int *offset, int chan, void **ppvObj)
LxResult AllocTexture(LXtObjectID self, LXtObjectID attr, int offset, void **ppvObj)
LxResult LinkSampleChans(LXtObjectID self, LXtObjectID nodalEtor, int *idx, int *idxLoc)
int IsSampleDriven(LXtObjectID self)

LXfSHADERFLAGS_USE_LOCATOR

Flags are used to specify the texture special behaviors.

  • LXfSHADERFLAGS_USE_CLIP

  • LXfSHADERFLAGS_USE_LIGHT

  • LXfSHADERFLAGS_USE_GROUP

  • LXfSHADERFLAGS_NEED_UVS

  • LXfSHADERFLAGS_USE_CAMERA

LXtPreviewEvent

struct st_LXtPreviewEvent

The preview event structure contains some flags indicating what was changed and the image, item and scene objects that were changed (note that it can represent several events). For item events, the channel index is also set.

Public Members

int flags
ILxImageID image
void *item
void *cine
void *bin
int chan

LXfPREV_EVENT_MESH

These are the preview event flags.

  • LXfPREV_EVENT_ITEM

  • LXfPREV_EVENT_IMAGE

  • LXfPREV_EVENT_CINE

  • LXfPREV_EVENT_MESH_FEATURE

  • LXfPREV_EVENT_MESH_BIN


LXfPREV_UPDATE_GEOMETRY

These are the preview update flags, returned by the preview interface.

  • LXfPREV_UPDATE_SHADING

  • LXfPREV_UPDATE_LIGHT

  • LXfPREV_UPDATE_BACKDROP

  • LXfPREV_UPDATE_IMAGE

  • LXfPREV_UPDATE_CAMERA

  • LXfPREV_UPDATE_CLIP

  • LXfPREV_UPDATE_FORCE

  • LXsTLR_CATEGORY

ILxTextureEval1

class ILxTextureEval1

Public Functions

LxResult Setup(LXtObjectID self, int slice)

N5: Item() returns the internal item pointer!

void Cleanup(LXtObjectID self)
void Evaluate(LXtObjectID self, LXtObjectID etor, LXtObjectID vs, int slice)
void Output(LXtObjectID self, LXtObjectID vtOutput, LXtObjectID *vtSubset)
int Slice(LXtObjectID self, LXtObjectID vtOutput, LXtObjectID tvDesc, LXtMeshBinID meshbin, int srfType)
void Select(LXtObjectID self, LXtObjectID teElt, LXtObjectID tvDesc, LXtMeshBinID meshbin, int srfType)
int Smoothing(LXtObjectID self, double *smooth, double *angle, int *useArea)
int Layer(LXtObjectID self, double *opa, int *invert, int *blend)
int Opaque(LXtObjectID self)
LxResult VType(LXtObjectID self, void **ppvObj)
LxResult Effect(LXtObjectID self, void **ppvObj)
LxResult Item(LXtObjectID self, void **item)
int Implicit(LXtObjectID self)
int Shader(LXtObjectID self)
int Material(LXtObjectID self)

ILxTextureEval

class ILxTextureEval

Public Functions

LxResult Setup(LXtObjectID self, int slice)

The new interface supports the updated Smoothing method.

void Cleanup(LXtObjectID self)
void Evaluate(LXtObjectID self, LXtObjectID etor, LXtObjectID vs, int slice)
void Output(LXtObjectID self, LXtObjectID vtOutput, LXtObjectID *vtSubset)
int Slice(LXtObjectID self, LXtObjectID vtOutput, LXtObjectID tvDesc, LXtMeshBinID meshbin, int srfType)
void Select(LXtObjectID self, LXtObjectID teElt, LXtObjectID tvDesc, LXtMeshBinID meshbin, int srfType)
int Smoothing(LXtObjectID self, double *smooth, double *angle, int *weighting, int *normalMethod, int *creasing)
int Layer(LXtObjectID self, double *opa, int *invert, int *blend)
int Opaque(LXtObjectID self)
LxResult VType(LXtObjectID self, void **ppvObj)
LxResult Effect(LXtObjectID self, void **ppvObj)
LxResult Item(LXtObjectID self, void **item)
int Implicit(LXtObjectID self)
int Shader(LXtObjectID self)
int Material(LXtObjectID self)

ILxTextureVMap

class ILxTextureVMap

Public Functions

unsigned Count(LXtObjectID self)

This is the interface used to find out vmaps used by texture layers.

  • Count This returns the number of vmaps referenced by the texture

  • Name This returns the name of the vmap given its index

  • Type This returns the vmap type given its index.

LxResult Name(LXtObjectID self, unsigned index, const char **name)
LXtID4 Type(LXtObjectID self, unsigned index)

ILxTextureMask

class ILxTextureMask

Public Functions

LXtID4 Tag(LXtObjectID self)

Mask layers have a specific interface used to compute partitioning. Partitioning is done by ptags and objects, it can use either or both at the same time. For example, a mesh can be partionned by a material name and an object ID, so you could have ptag:”Default”, object:”Mesh A”. This would apply the mask on all polygons with the “Default” material ptag on object “Mesh A”.

  • Tag This returns the polygon tag type used for partioning.

  • String This returns the name used on polygon tags, like the material name.

  • Object This returns item ID of the object used for partitioning.

  • Type This returns the shader type.

  • Stack This returns the mask evaluation sub-stack, that is the stack for all the mask’s child items. N5: Object() returns the internal item pointer. N5: Stack() returns the internal EvalStackID (for which we currently have no COM option!).

LxResult String(LXtObjectID self, const char **name)
LxResult Object(LXtObjectID self, void **item)
unsigned Type(LXtObjectID self)
LxResult Stack(LXtObjectID self, void **stack)
int ApplyToSub(LXtObjectID self)

ILxTextureGL

class ILxTextureGL

Public Functions

LxResult Evaluate(LXtObjectID self, LXtObjectID chan, LXtMeshBinID mbin, LXtObjectID item, void *gls)

Texture layers have a specific GL interface used to evaluate GL surface attributes.

int IsShader(LXtObjectID self, LXtObjectID chan, LXtMeshBinID mbin, LXtObjectID item)

ILxValueTexture1

class ILxValueTexture1

Public Functions

LxResult SetupChannels(LXtObjectID self, LXtObjectID addChan)

A value texture is a simple type of texture, also called procedural although that’s incorrect since value textures can come from data sources other than algorithms. A value texture provides a scalar, color or vector value at every point on a surface.

  • SetupChannels This is called when the item type is first defined to determine the channels that should be added to the item definition.

  • LinkChannels This is called with an ILxEvaluation interface and the texture should add any channels that it wants to read.

  • ReadChannels This is called with an ILxAttributes interface so the texture can read any of the values that it needs at the current time. The values read should be cached (along with any other needed scratch space) to an allocated block of data returned indirectly.

  • Customize After channels are read the value texture can request surface features and sample vector packets. No guarantees.

  • Evaluate This is called during rendering for every sample where the value texture applies. The function should use the spot parameters of the sample in the input packet, and write results to the output packet.

  • Cleanup Frees the data block allocated by ReadChannels() method.

LxResult LinkChannels(LXtObjectID self, LXtObjectID eval, LXtObjectID item)
LxResult ReadChannels(LXtObjectID self, LXtObjectID attr, void **ppvData)
LxResult Customize(LXtObjectID self, LXtObjectID custom, void **ppvData)
void Evaluate(LXtObjectID self, LXtObjectID vector, LXpTextureOutput *tOut, void *data)
void Cleanup(LXtObjectID self, void *data)

ILxValueTexture

class ILxValueTexture

Public Functions

LxResult SetupChannels(LXtObjectID self, LXtObjectID addChan)

The new and current version of the interface support the ‘LinkSampleChannels’, ‘IsSampleDriven’ and ‘Setup’ methods.

  • LinkSampleChannels This is called with an ILxEvaluation/ILxAttributes interface and the texture should add any channels that it wants to read on a per-sample basis. This method should also be used to store a copy of the CLxUser_Attributes derived from the nodalEtor passed in. If your ‘evalData’ is derived from the CLxSampleRendData user class, then you can simply perform an ‘rd->at.set (nodalEtor)’ as shown in the example below.

  • IsSampleDriven For efficiency, it helps if the shading system knows if a texture has any channels that are per-sample driven. If not, much of the per-sample setup can be skipped, making rendering faster. This will be called to ask if the texture is in any way sample-driven for the current pass. This can be determined by using the CLxUser_NodalService::AnyDrivenChans() method.

  • Setup This is called when a new shader slice is created. It may be called multiple times when setting up a render or preview - once for each new slice.

LxResult LinkChannels(LXtObjectID self, LXtObjectID eval, LXtObjectID item)
LxResult LinkSampleChannels(LXtObjectID self, LXtObjectID nodalEtor, LXtObjectID item, int *idx)
LxResult ReadChannels(LXtObjectID self, LXtObjectID attr, void **ppvData)
LxResult Customize(LXtObjectID self, LXtObjectID custom, void **ppvData)
LxResult Setup(LXtObjectID self, void *data)
void Evaluate(LXtObjectID self, LXtObjectID etor, int *idx, LXtObjectID vector, LXpTextureOutput *tOut, void *data)
void Cleanup(LXtObjectID self, void *data)
int IsSampleDriven(LXtObjectID self, int *idx)

ILxValueTextureCustom

class ILxValueTextureCustom

Public Functions

LxResult AddFeature(LXtObjectID self, LXtID4 type, const char *name)

This interface is passed to the Customize() method.

LxResult AddPacket(LXtObjectID self, const char *name)

ILxTexture

class ILxTexture

Public Functions

LxResult Locator(LXtObjectID self, void **ppvObj)
LxResult SetLocator(LXtObjectID self, LXtObjectID tloc)
LxResult Image(LXtObjectID self, void **ppvObj)
LxResult SetImage(LXtObjectID self, LXtObjectID img)
const char *ImageName(LXtObjectID self)
LxResult EvalImage(LXtObjectID self, LXtObjectID scene, void **ppvObj)
int LocatorProjectionMode(LXtObjectID self, double time)
int LocatorProjectionAxis(LXtObjectID self, double time)
const char *Effect(LXtObjectID self)
LxResult SetEffect(LXtObjectID self, const char *effect)
  • LXi_TEXTURE_PROJ_MODE_NONE

  • LXi_TEXTURE_PROJ_MODE_PLANAR

  • LXi_TEXTURE_PROJ_MODE_CYLINDRICAL

  • LXi_TEXTURE_PROJ_MODE_SPHERICAL

  • LXi_TEXTURE_PROJ_MODE_CUBIC

  • LXi_TEXTURE_PROJ_MODE_FRONT

  • LXi_TEXTURE_PROJ_MODE_UVMAP

  • LXi_TEXTURE_PROJ_MODE_LIGHTPROBE

  • LXi_TEXTURE_PROJ_MODE_IMPLICIT

  • LXi_TEXTURE_PROJ_MODE_BOX

  • LXi_TEXTURE_PROJ_DIR_X

  • LXi_TEXTURE_PROJ_DIR_Y

  • LXi_TEXTURE_PROJ_DIR_Z

  • LXi_IMAGEMAP_PIXBLEND_NEAREST

  • LXi_IMAGEMAP_PIXBLEND_BILINEAR

  • LXi_IMAGEMAP_PIXBLEND_BICUBIC

  • LXi_IMAGEMAP_SWIZZLING_RGB

  • LXi_IMAGEMAP_SWIZZLING_RGBA

  • LXi_IMAGEMAP_SWIZZLING_ALPHA_ONLY

  • LXi_IMAGEMAP_SWIZZLING_RED_ONLY

  • LXi_IMAGEMAP_SWIZZLING_GREEN_ONLY

  • LXi_IMAGEMAP_SWIZZLING_BLUE_ONLY

ILxCompShader1

class ILxCompShader1

Public Functions

LxResult SetupChannels(LXtObjectID self, LXtObjectID addChan)

A component shader is a simple type of shader that sets the shading component and output packets.

  • SetupChannels This is called when the item type is first defined to determine the channels that should be added to the item definition.

  • LinkChannels This is called with an ILxEvaluation interface and the texture should add any channels that it wants to read.

  • ReadChannels This is called with an ILxAttributes interface so the texture can read any of the values that it needs at the current time. The values read should be cached (along with any other needed scratch space) to an allocated block of data returned indirectly.

  • Customize After channels are read the value texture can request surface features and sample vector packets. No guarantees.

  • Evaluate This is called during rendering for every sample where the shader applies. The function gets the raycast object and the shade component and output packets that it can alter.

  • SetShadeFlags This is called before rendering and allows a component shader to set the shading flags, which allows it do things like be transparent to shadow rays or be double sided, or set a light linking group.

  • SetOpaque This allows the shader to override its “opaqueness”. For shaders that use other shaders as inputs, such as the cel and halftone shader, it is necessary that they are not opaque.

  • CustomPacket This allows the shader to specify a custom packet it GETS.

  • Cleanup Frees the data block allocated by ReadChannels() method.

LxResult LinkChannels(LXtObjectID self, LXtObjectID eval, LXtObjectID item)
LxResult ReadChannels(LXtObjectID self, LXtObjectID attr, void **ppvData)
LxResult Customize(LXtObjectID self, LXtObjectID custom, void **ppvData)
void Evaluate(LXtObjectID self, LXtObjectID vector, LXtObjectID rayObj, LXpShadeComponents *sCmp, LXpShadeOutput *sOut, void *data)
LxResult SetShadeFlags(LXtObjectID self, LXpShadeFlags *sFlg)
LxResult SetOpaque(LXtObjectID self, int *opaque)
LxResult CustomPacket(LXtObjectID self, const char **packet)
void Cleanup(LXtObjectID self, void *data)

ILxCompShader

class ILxCompShader

Public Functions

LxResult SetupChannels(LXtObjectID self, LXtObjectID addChan)

The new and current version of the interface support the ‘Flags’ method.

  • Flags This returns some of the LXfSHADERFLAGS_ to describe basic shader behaviors.

LxResult LinkChannels(LXtObjectID self, LXtObjectID eval, LXtObjectID item)
LxResult ReadChannels(LXtObjectID self, LXtObjectID attr, void **ppvData)
LxResult Customize(LXtObjectID self, LXtObjectID custom, void **ppvData)
void Evaluate(LXtObjectID self, LXtObjectID vector, LXtObjectID rayObj, LXpShadeComponents *sCmp, LXpShadeOutput *sOut, void *data)
LxResult SetShadeFlags(LXtObjectID self, LXpShadeFlags *sFlg)
LxResult SetOpaque(LXtObjectID self, int *opaque)
LxResult CustomPacket(LXtObjectID self, const char **packet)
void Cleanup(LXtObjectID self, void *data)
int Flags(LXtObjectID self)

ILxCustomMaterial1

class ILxCustomMaterial1

Public Functions

LxResult SetupChannels(LXtObjectID self, LXtObjectID addChan)

A custom material is a more advanced type of shader. It can change material attributes AND perform its own shading. The custom material looks like a material item in the shader tree but it also has an implicit shader that is evaluated after the base shader. Because it is a material item it can textured, the texturing works by defining a custom packet (in which the texturable attributes are stored) and number of texture effects, one for each texturable attribute. The easiest way to add such effects is through the ILxPacketEffect.

  • SetupChannels This is called when the item type is first defined to determine the channels that should be added to the item definition.

  • LinkChannels This is called with an ILxEvaluation interface and the texture should add any channels that it wants to read.

  • ReadChannels This is called with an ILxAttributes interface so the texture can read any of the values that it needs at the current time. The values read should be cached (along with any other needed scratch space) to an allocated block of data returned indirectly.

  • Customize After channels are read the value texture can request surface features and sample vector packets. No guarantees.

  • MaterialEvaluate This is called during rendering for every sample where the material applies.

  • ShaderEvaluate This is called during rendering for every sample where the material applies. The function gets the raycast object and the shade component and output packets that it can alter.

  • SetShadeFlags This is called before rendering and allows a component shader to set the shading flags, which allows it do things like be transparent to shadow rays or be double sided, or set a light linking group.

  • SetBump This is called before rendering and allows a component shader to set its own bump amplitude, so it is evaluate for bump mapping.

  • SetDisplacement This works like set bump, but for displacement height.

  • SetOpaque This allows the shader to override its “opaqueness”. For shaders that use other shaders as inputs, such as the cel and halftone shader, it is necessary that they are not opaque.

  • SetSmoothing This allows the shader to set its material smoothing amount, angle.

  • CustomPacket This allows the shader to specify a custom packet it SETS.

  • Cleanup Frees the data block allocated by ReadChannels() method.

  • UpdatePreview This allows the shader to specify the update flags it might trigger for Preview.

LxResult LinkChannels(LXtObjectID self, LXtObjectID eval, LXtObjectID item)
LxResult ReadChannels(LXtObjectID self, LXtObjectID attr, void **ppvData)
LxResult Customize(LXtObjectID self, LXtObjectID custom, void **ppvData)
void MaterialEvaluate(LXtObjectID self, LXtObjectID vector, void *data)
void ShaderEvaluate(LXtObjectID self, LXtObjectID vector, LXtObjectID rayObj, LXpShadeComponents *sCmp, LXpShadeOutput *sOut, void *data)
LxResult SetShadeFlags(LXtObjectID self, LXpShadeFlags *sFlg)
LxResult SetBump(LXtObjectID self, float *bumpAmplitude, int *clearBump)
LxResult SetDisplacement(LXtObjectID self, float *dispDist)
LxResult SetOpaque(LXtObjectID self, int *opaque)
LxResult SetSmoothing(LXtObjectID self, double *smooth, double *angle)
LxResult CustomPacket(LXtObjectID self, const char **packet)
void Cleanup(LXtObjectID self, void *data)
LxResult UpdatePreview(LXtObjectID self, int chanIdx, int *flags)

ILxCustomMaterial2

class ILxCustomMaterial2

Public Functions

LxResult SetupChannels(LXtObjectID self, LXtObjectID addChan)

The previous version of the interface support the ‘Flags’ method.

  • Flags This returns some of the LXfSHADERFLAGS_ to describe basic shader behaviors.

LxResult LinkChannels(LXtObjectID self, LXtObjectID eval, LXtObjectID item)
LxResult ReadChannels(LXtObjectID self, LXtObjectID attr, void **ppvData)
LxResult Customize(LXtObjectID self, LXtObjectID custom, void **ppvData)
void MaterialEvaluate(LXtObjectID self, LXtObjectID vector, void *data)
void ShaderEvaluate(LXtObjectID self, LXtObjectID vector, LXtObjectID rayObj, LXpShadeComponents *sCmp, LXpShadeOutput *sOut, void *data)
LxResult SetShadeFlags(LXtObjectID self, LXpShadeFlags *sFlg)
LxResult SetBump(LXtObjectID self, float *bumpAmplitude, int *clearBump)
LxResult SetDisplacement(LXtObjectID self, float *dispDist)
LxResult SetOpaque(LXtObjectID self, int *opaque)
LxResult SetSmoothing(LXtObjectID self, double *smooth, double *angle)
LxResult CustomPacket(LXtObjectID self, const char **packet)
void Cleanup(LXtObjectID self, void *data)
LxResult UpdatePreview(LXtObjectID self, int chanIdx, int *flags)
int Flags(LXtObjectID self)

ILxCustomMaterial3

class ILxCustomMaterial3

Public Functions

LxResult SetupChannels(LXtObjectID self, LXtObjectID addChan)

  • LinkSampleChannels This is called with an ILxEvaluation/ILxAttributes interface and the texture should add any channels that it wants to read on a per-sample basis. This method should also be used to store a copy of the CLxUser_Attributes derived from the nodalEtor passed in. If your ‘evalData’ is derived from the CLxSampleRendData user class, then you can simply perform an ‘rd->at.set (nodalEtor)’ as shown in the example below.

  • IsSampleDriven For efficiency, it helps if the shading system knows if a texture has any channels that are per-sample driven. If not, much of the per-sample setup can be skipped, making rendering faster. This will be called to ask if the texture is in any way sample-driven for the current pass. This can be determined by using the CLxUser_NodalService::AnyDrivenChans() method.

LxResult LinkChannels(LXtObjectID self, LXtObjectID eval, LXtObjectID item)
LxResult LinkSampleChannels(LXtObjectID self, LXtObjectID nodalEtor, LXtObjectID item, int *idx)
int IsSampleDriven(LXtObjectID self, int *idx)
LxResult ReadChannels(LXtObjectID self, LXtObjectID attr, void **ppvData)
LxResult Customize(LXtObjectID self, LXtObjectID custom, void **ppvData)
void MaterialEvaluate(LXtObjectID self, LXtObjectID etor, int *idx, LXtObjectID vector, void *data)
void ShaderEvaluate(LXtObjectID self, LXtObjectID vector, LXtObjectID rayObj, LXpShadeComponents *sCmp, LXpShadeOutput *sOut, void *data)
LxResult SetShadeFlags(LXtObjectID self, LXpShadeFlags *sFlg)
LxResult SetBump(LXtObjectID self, float *bumpAmplitude, int *clearBump)
LxResult SetDisplacement(LXtObjectID self, float *dispDist)
LxResult SetOpaque(LXtObjectID self, int *opaque)
LxResult SetSmoothing(LXtObjectID self, double *smooth, double *angle)
LxResult CustomPacket(LXtObjectID self, const char **packet)
void Cleanup(LXtObjectID self, void *data)
LxResult UpdatePreview(LXtObjectID self, int chanIdx, int *flags)
int Flags(LXtObjectID self)

ILxCustomMaterial

class ILxCustomMaterial

Public Functions

LxResult SetupChannels(LXtObjectID self, LXtObjectID addChan)

The new and current version of the interface support the updated ‘SetSmoothing’ method.

  • SetSmoothing This allows the shader to set its material smoothing amount, angle, weighting flags, normal generation method and creasing flags.

LxResult LinkChannels(LXtObjectID self, LXtObjectID eval, LXtObjectID item)
LxResult LinkSampleChannels(LXtObjectID self, LXtObjectID nodalEtor, LXtObjectID item, int *idx)
int IsSampleDriven(LXtObjectID self, int *idx)
LxResult ReadChannels(LXtObjectID self, LXtObjectID attr, void **ppvData)
LxResult Customize(LXtObjectID self, LXtObjectID custom, void **ppvData)
void MaterialEvaluate(LXtObjectID self, LXtObjectID etor, int *idx, LXtObjectID vector, void *data)
void ShaderEvaluate(LXtObjectID self, LXtObjectID vector, LXtObjectID rayObj, LXpShadeComponents *sCmp, LXpShadeOutput *sOut, void *data)
LxResult SetShadeFlags(LXtObjectID self, LXpShadeFlags *sFlg)
LxResult SetBump(LXtObjectID self, float *bumpAmplitude, int *clearBump)
LxResult SetDisplacement(LXtObjectID self, float *dispDist)
LxResult SetOpaque(LXtObjectID self, int *opaque)
LxResult SetSmoothing(LXtObjectID self, double *smooth, double *angle, int *weighting, int *normalMethod, int *creasing)
LxResult CustomPacket(LXtObjectID self, const char **packet)
void Cleanup(LXtObjectID self, void *data)
LxResult UpdatePreview(LXtObjectID self, int chanIdx, int *flags)
int Flags(LXtObjectID self)