3DMAX材质继承

小编:艳芬 1158阅读 2020.09.09

粒子流对事件中材质的使用施加特定的限制。特别是,指定给事件的材质(无论是通过标准“材质”操作符还是作为“图形实例”操作符的参数指定)不会与粒子一起从一个事件移至下一个事件。这会减弱“粒子流”系统的总体灵活性,且需要使用一些解决方法,包括:将“材质”操作符指定给全局事件,或将“材质”操作符指定给所有受影响的事件。

粒子流可增强事件功能以改善粒子流系统中材质的整体处理。它仍不允许粒子在事件之间携带材质,但它提供了各种用于简化材质指定和继承的工具。


参数化和合成材质

在将材质指定到粒子流事件的上下文中,材质可以分成参数化与合成两类。

当您使用任何标准“材质”操作符时,材质是参数化的。操作符具有一个用于从材质编辑器定义材质的按钮。该材质将作为参考传递到如下事件:所含的“材质”操作符要供驻留在该事件中的粒子使用。同样,这是一种参数化材质,它被指定为“材质”操作符中的一个参数。

例如,当使用标准“图形实例”操作符时,材质是合成的。当操作符的“获取材质”启用时,它将采用指定给参考几何体的材质并将其指定给当前事件。此外,如果操作符引用的是一组对象(用作“粒子几何体对象”),则操作符从组中收集所有材质,并创建一个新的“多维/子对象”材质并指定给事件。在这种情况下,新材质从其他材质合成。

如果单击全局事件的标题区域,将显示与整个粒子流粒子系统相关的参数。也可以单击局部事件的标题区域,并查看与材质处理相关的工具,以及指定给事件的材质。


查看示例

打开简单示例文件 MaterialInheritance01.max(包括在教程文件的 ParticleFlowSamples 文件夹中)以查看“材质”工具的工作方式。该场景包含一个具有四个事件的简单粒子流系统。它不包含“材质”操作符;视口中粒子的颜色均由每个事件中不同的“显示”操作符定义,以便在播放动画时,可以在粒子切换事件时通过其颜色变化进行辨别。

现在,将“材质静态”操作符添加到事件 01 并选中,然后从材质编辑器(第一个窗口)指定“多维/子对象”材质作为实例(默认模式),然后将“材质静态”参数调整为循环浏览子材质。事件贴图将如下所示:



如果现在播放动画,将看到在开始所有粒子具有不同的颜色,但随后它们会作为块切换至另一种颜色。这是由于接下来的三个事件没有“材质”操作符,因此使用视口中的“显示”颜色。

单击事件 01 的标题栏以显示事件 01 的参数,然后单击“下游材质”按钮。粒子流报告其已使用某种材质更新了三个事件。再次播放动画,现在,所有事件中的粒子颜色一致。此外,如果选择其他事件,现在您可以看到“当前材质”按钮指示与第一个事件中相同的材质。

接下来,查看更复杂的示例 MaterialInheritance02.max(包括在教程文件的 ParticleFlowSamples 文件夹中)。它将两个粒子流聚合为一个公用流。开始事件具有“材质静态”操作符定义的不同材质。粒子转至第二个事件(事件 02)后,它们将失去其材质。让我们看一下在此情况下可以执行的操作。



选中事件 01,单击“下游材质”按钮。可以仅通过播放动画检查指定给事件 02、事件 03 和事件 04 的材质;结果为来自事件 01 下游的所有事件均继承了绿色材质。该操作的运行不甚理想,因为来自事件 05 的粒子也获得了绿色材质。我们需要采用某种方法改善此情况。目标是使起源于两个出生事件的粒子保留其各自的原始材质。

首先,请尝试以下操作:选择事件 05(具有“蓝色”材质的开始事件),然后单击“下游材质”按钮。您可能会记得当您单击事件 01 中的按钮时,软件报告“3 个事件中的材质已更新”。现在,通过事件 05,报告有所不同:“所有事件具有有效的材质”。通过此报告,您将了解下游事件中的材质未更改。如果播放动画或检查下游事件,则可以看到它们仍具有来自事件 01 的绿色材质。为什么?

单击“下游材质”按钮时,插件将从当前事件查找所有下游事件,并为每个下游事件触发“材质更新”。事件中的材质已根据其材质继承参数进行更新。如果继承类型为“无”,或事件有其自己具有材质的操作符(任何“材质”操作符,或具有材质获取的“图形实例”操作符),则事件不会更新其材质,因为事件中的材质已经过定义。如果“继承”类型设置为“最高优先级”,则事件查找其上游事件(事件 02 的上游事件为事件 01 和事件 05),检查其“材质优先级”值,并将从具有最高优先级的事件继承材质。在本例中,事件 01 和事件 05 具有相同的材质优先级:0(零)。因此结果不明确:事件 02 可以选择其发现的第一个上游事件。若要强制继承事件 05 的材质,请将事件 05 中的材质优先级值更改为 1,然后再次单击“下游材质”。现在您可以看到下游事件具有“蓝色”的材质。

既定的目标仍然是难以捉摸的:事件 01 中的粒子在进入事件 02 后将材质从“绿色”更改为“蓝色”。因此我们还需要做其他事情。

用于“继承”类型的最后一个选项为“组合材质”。该类型用于将材质正确传播到下游。选择事件 02,然后将“继承”设置为“组合材质”。现在,单击“当前事件材质”按钮从上游拖动组合材质。现在,如果您查看事件 02 中的“当前材质”,它不是“绿色”或“蓝色”材质,而是标记为类似“材质 #10”的新材质。如果将材质拖到“材质编辑器”中,您可以看到,它是一个“多维/子对象”材质,具有一个命名为“蓝色”的子材质。

为什么?事件 01 和事件 05 均有标准材质,根据事件设置,事件 05 具有更高的优先级。因为这些材质都是标准材质(而不是“多维/子对象”材质),这些材质尝试为事件 02 分配合成“多维/子对象”材质中的第一个窗口。但是,由于较高的优先级值,事件 05 起作用。

若要解决材质碰撞,则需要调整事件 01 或事件 05 中的材质。下面是具体的方法:在事件 05 中选择“材质静态”操作符,然后将“子材质 ID 偏移”值设置为 1(默认值为 0)。请注意,“指定材质 ID”选项会自动启用(稍后介绍原因),但需要启用“在视口中显示”以在视口中查看材质效果。还请注意,操作符的动态名称已从“材质静态 02(蓝色)”更改为“材质静态 02(蓝色 >> 1)”,这表明已应用 ID 偏移。

选择事件 05 并检查“当前材质”按钮中的材质(拖动到材质编辑器)。此材质是真正的多维/子对象材质,具有两个子材质:第一个窗口为空,第二个窗口被蓝色材质占据。现在可以毫无碰撞地组合事件 01 和事件 05 的材质。

选中事件 02,然后单击“更新当前材质”按钮。检查“当前材质”按钮中的材质:组合的材质具有两个子材质(绿色和蓝色)。单击“下游材质”按钮将此材质传播到事件 03 和事件 04。

如果现在播放动画,您仍然可以看到源自事件 01 中粒子的差异:一旦离开事件 01,它们会变为蓝色。若要修复此问题,需要在“材质静态 01(绿色)”中启用“指定材质 ID”和“在视口中显示”。即使“绿色”材质不具有子材质,子材质索引也是必需的,因为稍后粒子离开事件并由“多维/子对象”材质控制。


界面

本部分描述了材质继承控制(可通过单击事件标题栏进行访问),以及附加新参数“子材质 ID 偏移”(已添加至使用材质的操作符中)。


“材质继承”组

继承
在上游事件的基础上定义如何将材质指定给当前事件,以及当前事件如何影响材质下游。从下拉列表中进行选择: - 该事件不从上游事件继承材质。

最高优先级 - 从当前所有上游事件选择具有最高优先级的事件,然后从该事件获取材质。

组合材质 - 使用来自上游事件的材质合成多维/子对象材质。如果不同的材质和子材质之间存在碰撞,则具有最高优先级的实体占主导地位。

材质优先级
为“继承”设置“最高优先级”和“组合材质”选项使用的优先级值。

注意如果事件包含材质类型操作符,则此事件不从上游事件继承材质;“继承”类型选项将不起作用。

“更新材质”组

该组包含用于设置粒子流事件中的材质的工具。

当前事件材质
通过从上游事件拖动材质更新当前事件材质。
下游材质
更新所有下游事件中的材质。
所有事件中的材质
更新场景中所有粒子流系统中所有事件的材质。
当前材质
显示事件所用的材质。这是一个只读属性;可以将材质从该按钮拖动到材质编辑器以供检查,但是不能将材质从材质编辑器拖动到该按钮。

其他参数:“材质/出生组/图形实例”操作符
子材质 ID 偏移
当使用材质继承与“多维/子对象”材质时,“材质”操作符、“出生组”操作符和“图形实例”操作符将此值添加到“材质 ID”值来创建子材质 ID,该子材质 ID 由“粒子流”使用以确定要继承的材质的子材质,并根据材质中的子材质的 ID 应用到其事件中的粒子。
关联标签: