Q100407:通过使用缓存更快地应用混合模式

关注

概括

Mari 3.3v1 及更早版本中,更改混合模式有时可能是一个相当艰巨的过程,因为着色器需要重新编译。本文介绍如何使用混合模式缓存来提高性能并减少动态模式下所需的着色器重新编译次数。

更多信息

动态着色器编译模式提高了着色器编译速度,但代价是着色器相当重。虽然这种动态模式通过缓存多个操作来降低编译率,但一些艺术家在不同混合模式之间切换时仍然经常遇到着色器重新编译的情况。

Mari 3.4v1 开始,混合模式包含在动态缓存系统中,以减少重新编译的次数。在动态模式下,如果用户更改图层、合并节点或绘制缓冲区的混合模式,则应立即进行更改,而不必等待视口中的旋转轮完成。

缓存系统支持五种混合模式的“历史”,艺术家可以使用这些模式而无需重新编译。

注意:有关混合模式的更多信息,请参阅Mari在线帮助的绘画混合模式部分。

注意:默认的着色器编译模式是自动,这对于大多数Mari会话来说是理想的,因为它根据需要使用动态和优化模式。

如何调整自定义节点以从混合模式缓存状态中受益

在其自定义节点中使用混合模式属性的开发人员可能在其自定义节点 XML 中具有以下内容或类似内容:
 <Attribute Name="BlendMode" PrettyName="Mode" Group="" Type="userenum">Dynamic:  MriBlendMode:Comp_Default</  Attribute> 
为了使用混合模式,开发人员有两种可能的选择:
  1. 动态:MriBlendMode:Comp_默认-适用于正常混合模式类型(所有模式)。
  2. 动态:MriBlendModeNoAlpha: Comp_Default - 适用于不包含任何 Alpha 混合模式的类型。
此外,为了添加对更快编译混合模式的支持,需要修改 XML 文件以启用这些更改,如下所示:
前:

 Output = $BlendMode(_Base, _Over, #Mask.r * AdvancedBlendAmount);
之后
 #if defined(MRI_GENERAL_ COMPOSITION)
Output = Comp_General($BlendMode, _Base, _Over, #Mask.r * AdvancedBlendAmount);
#else
Output = $BlendMode(_Base, _Over, #Mask.r * AdvancedBlendAmount);
#endif // defined(MRI_GENERAL_COMPOSITION)

    我们很遗憾听到

    请告诉我们