特别是对于角色装备,通常需要在镜头级别向动画师或灯光艺术家公开对着色器属性的某种控制。这可以是为了从角色的不同变体中进行挑选。或者可能是为了获得对外观更精细的控制,尤其是在使用更风格化的 NPR 着色方法时。
展示使用灯光装备参数来控制 展翅翱翔 中角色的着色器效果。
我之前在 之前关于 展翅翱翔 上的角色着色的博客文章。但从那时起,我们对其进行了轻微改进,它足够有用且具体,足以受到关注和解释。我将首先介绍该方法的技术方面,然后展示如何在管道中使用它。
虽然库覆盖在动画方面提供了很大的灵活性并处理高级角色装备的所有复杂依赖关系,但它们还需要在您想要更改的地方本地化和复制所有复杂性,甚至是简单的单独设置。
因此,在像我们这样的管道中,数据在不同文件之间链接(库 -> 动画 -> 光照),您最终可能需要覆盖不同级别上角色的属性。虽然您可以从技术上在任意数量的嵌套层中创建库覆盖的库覆盖,但这会带来大量的技术债务,而这可能不需要首先创建。
让我为您提供更多技术背景来解释有关库覆盖的完整情况:
库覆盖创建被覆盖的层次结构的完整本地副本,以便您可以在文件中进行本地更改,然后 Blender 使这些内容与该层次结构的库版本的任何更改保持最新。因此,要覆盖数据块,比如说角色装备的骨架对象,依赖于该数据块的所有内容也都需要被覆盖。这包括包含引用装备属性的驱动程序的数据块。在更基础的层面上,库覆盖尚不支持覆盖 Blender 中的每种类型的数据块。
简而言之:要创建材质取决于装备的角色的完整副本,您需要复制材质和装备。由于各种原因,这还没有得到支持。
可以通过将对设备的依赖转移到可以覆盖的数据块来缓解这个问题。例如,着色器节点组和几何节点修改器都可以使用对象属性来完成。
对于着色器节点,您可以在对象级别创建自定义属性,并使用“属性”节点根据名称将此信息传递到着色器节点树中。然后,该对象属性可以引用装备中的任何内容,因为它可以被覆盖(只需确保“Library Overridable”设置已启用)。对于几何节点,这通过使用修改器输入来实现。因此,不要在节点设置中创建引用装备或对象/集合指针的驱动程序,而是确保公开有问题的参数并将引用放在修改器输入上,这些输入是对象属性的一部分。
我们发现,库覆盖本身不足以满足每种类型的用例,尤其是在控制材料的属性时。

如何使用视图图层属性来共享属性的基本示意图概述
我们通过将实际角色及其所有数据块和装备完全分离成单独的层次结构,甚至单独的文件来解决这种情况。我们不是在装备上创建角色的直接依赖关系,而是创建对活动视图层(不是数据块)的属性的依赖关系,这是通过其名称引用的。此视图图层属性提供了一个中心、中立的通信点,然后由装备写入并由镜头文件内的角色读出。这样角色和装备之间就没有直接的参考。
除了视图图层属性之外,您还可以在角色层次结构中定义一个目标对象,该对象将接收属性作为自定义属性。然后可以通过驱动程序直接引用它们,而不是使用活动视图层。

切换以启用在文件加载时将文本数据块作为 python 脚本运行。
Blender 支持自动化各种操作,并使用其 python API 提供自定义功能和用户界面。还可以通过执行在 Blender 内部文本编辑器中创建为文本数据块的脚本来调用此功能。除了从用户界面手动运行脚本之外,您还可以在文本属性中启用“注册”设置。这将确保脚本在包含它的每个文件加载时自动运行。
这是我们在 Blender Studio 中经常使用的一种技术,以可靠且非侵入性的方式对链接数据进行各种快速修复。我们的Lighting Overrider工具用于为各个属性创建即时覆盖,例如,我们在照明过程中大量使用的完全基于这个概念。
将文件加载时自动执行脚本的能力转变为为我们的问题提供解决方案的强大机制,是将其与可以将脚本附加到数据块的事实相结合。只需从 python 控制台运行“C.object['script'] = D.texts['name_of_script.py']`,您就可以将脚本数据块(在每次文件加载时自动执行)附加到对象数据 -堵塞。这意味着,任何以某种方式引用该对象的文件(例如通过链接和覆盖它)都将在文件加载时运行脚本。这样您就可以创建各种强大的资产,并具有自己的 python 功能。例如,当角色链接到场景时,如何确保 3D 视口中的 Cloudrig UI 显示出来。
我们提出的概念结合了这些不同的想法,并允许我们为链接数据创建控制器对象,我们称之为“照明装备”。照明装备只是一个空对象,其中包含一组自定义属性,并附加了一个 Python 脚本,这将使其属性在视图层上无论使用什么地方都可用。
因此,附加到每个照明装备的脚本会收集场景中的所有照明装备对象,并在视图层上设置其属性的副本,这些属性通过驱动程序链接到照明装备属性。
实际上,这意味着添加到照明装备的任何属性都可以在使用该照明装备的任何场景中用作视图图层属性。从那里,着色器和驱动程序可以拾取它,而无需设置角色对照明装备对象的直接依赖关系。
除了实际脚本的作用的所有细节之外,让我向您展示如何在实践中使用这种设置:
首先下载基本安装文件:
Blender文件 - 593.5 KB - CC-BY
以下视频介绍了将其设置为制作课程的不同步骤和方面。下面也以文本形式列出了各个步骤。
使用此方法来控制黄金生产的资产和全局级别的笔触可见性
除了使用它来控制单个角色的着色器之外,它还可以用于在全局级别上在一个位置控制多个角色的属性。例如,我们在金制作中设置了对角色笔触的切换控制,并在每个资源的附加切换之上使用了全局切换;在 展翅翱翔 上,我们对轮廓厚度进行了全局控制,该轮廓厚度将由所有角色共享的基础着色器拾取。
当然,应该指出的是,这种方法也有其自身的问题。库覆盖概念的主要好处之一是您可以轻松创建同一角色的多个副本,并且可以完全单独控制。使用此方法,情况并非如此,因为文件中角色的所有副本都将从照明装备中获取相同的属性。
加入 并发表评论。