在目录中显示
添加到收藏夹
主页: Maya 用户手册
共享
打印
最有效地使用 Maya
疑难解答和性能提高技巧
在 Linux 上优化 Maya 热盒和标记菜单
硬件着色器
这些是给硬件着色器插件编程人员的编码提示。
- 如果不是必需的,不要入栈和弹出所有 GL 属性。这比使特定属性入栈开销更高。
- 如果仅在场景视图中使用硬件着色器,建议使用旧版本的 API:geometry()、bind() 和 unbind()。如果还要对硬件着色器进行批渲染,建议使用较新的 API:glGeometry、glBind 和 glUnbind。
- 建议将所有节点属性缓存在内部。示例插件 hwColorPerVertex、hwPhongShader 和 cgFxShader 都可执行此功能。非缓存值的求值开销很高,可能双倍延长绘图时间。
- 避免使用复杂的属性(结构和数组)。
- 如果着色器上的输出颜色并不重要,不要让任何属性影响它。否则,将导致额外的计算,因为将一个属性标记为脏会导致重新计算以派生从属属性。
- 如果不是必需的,compute() 方法可以保留为空。该方法越简单越好。如果不计算输出颜色,将不会看到样例。
- 不要在插件中对切线进行后期规格化。规格化由系统完成。
- 通过几何体调用发送的数据是只读的且缓存在内部。请勿修改这些值。
- 针对简单数据使用简单数据结构(而不是 Maya API 对象)。例如,使用 float3 而不是 MFloatVector。OpenMaya 中使用的接口导致性能开销。
- 利用 M3dView 上的可用方法。OpenGL 状态在内部进行缓存,与使用 beginGL()、endGL() 和直接调用 OpenGL 相比可以提供更好的性能。
- 使用 glDrawRangeElements 来绘图。显卡供应商建议使用此 API 来进行传递到硬件着色器的几何体阵列的绘图。
- 确保正确设定 hasTransparency() 的返回值。将其设定为 true 会导致 Maya 绘制某个对象两次(一次在消隐正面时,一次在消隐背面时)。
- 考虑在 M3dView 中的当前显示状态。例如,如果显示模式是就不要禁用照明。
- 当透明度为启用时,帧缓冲区混合已启用。不必再次启用。
- 使用方法 MPxHwShaderNode::currentPath() 发送属性查询方法(例如,getTexCoordSetNames())的相应信息。
- 测试对于交互式和特别是对于硬件渲染,在颜色/Alpha 和深度遮罩上的哪些参数是启用的。它们可以为如何绘制更简单的几何体给出提示。
- 对于硬件渲染器,插件可以多次调用。常规序列通常是:深度过程、[照明过程[es]]、颜色过程、[阴影贴图过程]、[Alpha 过程]、[深度过程]。标记了方括号“[”和“]”的项目是可选项目并且依赖于场景中的灯光数量、是否已启用那些灯光的阴影以及在“渲染设置”中是否指定
alpha 和深度输出图像。
- 使用选项,该选项可用于每对象(NURBS 或多边形曲面)。该选项可以在部分的中找到,并作为菜单的选项。使用让硬件着色器不显示在对象上,或使用来恢复显示着色器的默认状态。这将允许插件的用户根据性能要求选择性地关闭着色器显示。