使用自定义体积着色器时,应使着色器与 Maya 体积引擎兼容。这是使体积着色器与渲染过程、Maya 灯光着色器和其他 Maya 功能一起正确运行的最佳方法。
要执行此操作,请为着色器结果使用以下数据结构,而不是简单的 miColor:
typedef struct VolumeShader_R { miColor color; miColor glowColor; miColor matteOpacity; miColor transparency; } VolumeShader_R;
体积是不透明的,除非结构的透明度场设置为非零值。体积引擎注意集成和合成体积采样,因此体积着色器仅需要注意计算当前采样的原始颜色值和透明度。
miVector orgObj, pointObj; mi_point_to_object(state, &orgObj, &state->org); mi_point_to_object(state, &pointObj, &state->point);
miScalar length = mi_vector_dist(&orgObj, &pointObj);
与 Maya 体积引擎不兼容的旧版体积着色器仍可在 Maya 2013 中使用。但是,必须使用以下 MEL 代码禁用体积引擎:
miCreateDefaultNodes(); select mentalrayGlobals; addAttr -ln useVolumeEngine -at bool; setAttr mentalrayGlobals.useVolumeEngine false;