Blender动画节点插件用户指南-表达式

Blender动画节点插件用户指南-表达式
推荐:将 NSDT场景编辑器 加入你的3D开发工具链

表达式

表达式节点允许执行单行 python 代码和 返回其值。节点可以有多个类型化输入,这些输入可以是 在 Python 表达式中用作变量。无法定义输入 在节点本身中,因为空间保留给变量名 表示输入。

image

这个节点最简单的用途之一是计算长数学 方程。例如,如果要计算 多项式在某个地方必须添加六个节点 乘法、幂和加法。或者,可以只写 在表达式节点中,如下所示。5x^3+3x^2+1x

image

高级节点设置

  • 模块 - 导入 python 模块是通过编写它们的 以逗号作为分隔符的名称。例如,如果要使用 和模块,则会编写 .numpymathnumpy, math
  • 调试模式 - 如果启用,将捕获并显示任何错误 在节点中。如果禁用,表达式中的任何错误都将导致 停止执行节点树的致命错误。它应该是 请注意,启用调试模式会减慢执行速度。
  • 正确的类型 - 如果启用,节点将尝试转换 输出到所需的输出类型。如果禁用,如果类型输出 与输出类型不同,节点会导致致命错误 停止节点树的执行。
  • 内联表达式 - 默认情况下,模块是星形导入的,并且 可以直接使用它们的属性。如果启用此选项, 模块通常是导入的,其属性必须 前面是模块名称。例如,为了使用 numpy 中的函数,人们会写而不是 .启用此选项 通过避免开始导入来提高性能。argpartitionnumpy.argpartitionargpartition
  • 固定数据类型 - 如果禁用,节点将自动 根据连接的内容更改输出插座的类型 卢武铉如果启用,则类型是固定的,不会自动更改, 在这种情况下,可以使用 节点。

Python 内联表达式

使用表达式节点时,一个仅限于一行代码。 幸运的是,Python提供了一些功能,如条件运算符和 列出可以提供功能丰富的内联环境的推导式。 下面,我们将探讨其中的一些功能以全面性。

条件运算符

条件运算符采用以下形式:

a if condition else b

其中 ,和 都是表达式。首先,计算表达式,如果其值被计算为 ,则为 已计算并返回其值,否则,将对其进行计算并返回其 返回值。一些例子:aconditionbconditionTrueab

# Return the absolute value of a.
a if a > 0 else -a
# Return vectorA if its magnitude is bigger than that of vectorB.
# And return vectorB otherwise.
vectorA if vectorA.length > vectorB.length else vectorB

应该注意的是,最后一个表达式可以是另一个条件 运算符,生成一个类似于 到 if 语句中。elif

a if condition else b if anotherCondition else c

这意味着,如果为 , 则计算并返回 , 否则,如果为 ,则计算并返回 ,否则(当两个条件都不是时),则计算 然后回来了。当然,这可以通过链接更多来扩展 条件运算符。aconditionTruebanotherConditionTrueTruec

列表理解

列表推导式为创建列表提供了一种可靠的方法。它需要 形式:

[a for e in list]

其中 是可能包含 的表达式 的值 列表的元素可以是任何可迭代的。 只是一个本地人 理解范围内的变量,可以具有任何名称 你选择。对 的每个元素的推导循环,赋值 元素的值附加到 最初为空的列表,此列表是列表推导的值。 对于给定的列表.aeelisteal = [0, 1, 2, 3, 4]

[x + 10 for x in l]
# Returns [10, 11, 12, 13, 14]
[y**2 for y in l]
# Returns [0, 1, 4, 9, 16]

请注意,表达式根本不需要依赖于可迭代对象。为 实例。

# Create a list of five elements which are all zeros.
[0 for _ in range(5)]
# Returns [0, 0, 0, 0, 0]

列表推导式可以有条件,即具有 要满足要追加的元素。例如,对于某些列表.g = [5, -6, -7, 8, 9]

# Return only positive elements.
[x for x in g if x > 0]
# Returns [5, 8, 9]

zip()当需要多个可迭代对象时,可以使用函数。为 实例,对于 。a=[0, 1, 2, 3, 4]b=[1, 2, -1, 0, -2]

# To sum a and b element wise.
[x + y for x, y in zip(a, b)]
# Returns [1, 3, 1, 3, 2]

多个可用于重复列表,如下所示。注意如何排序 在这种情况下很重要。后者始终首先执行。forfor

# l = [0, 1, 2, 3, 4]
[x for x in l for _ in range(3)]
# Returns [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
# Equivalent to:
# for x in l:
#     for _ in range(3):
#         append x
[x for _ in range(3) for x in l]
# Returns [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
# Equivalent to:
# for _ in range(3):
#     for x in l:
#         append x

列表推导式可以嵌套。例如,如果像素的值 的灰度图像由列表表示,并且想要生成RGBA表示,以便所有 红色、绿色和蓝色通道具有灰度值,alpha 为 始终为 1,然后列表推导可以按如下方式使用。i = [0.5, 0.25, 0.1, ...]

[[v for _ in range(3)].append(1) for v in i]
# Returns [[0.5, 0.5, 0.5, 1], [0.25, 0.25, 0.25, 1], [0.1, 0.1, 0.1, 1], ...]

内联提示

下面我们列出了一些使用内联表达式的提示。

无返回

如果将某些值附加到表达式中的列表,则为 返回,因为追加函数没有 return 语句。但是什么 如果我们想要附加后的列表,我们如何获得它的值?在此 在这种情况下,可以使用一个小技巧。None

[list.append(element), list][1]

我们从两个元素创建一个列表,第一个元素是附加 正如我们之前所说,返回和另一个的表达 元素是列表本身。因为 python 计算第一个元素 首先,第二个元素实际上是附加和之后的列表 使用索引获取它得到了我们想要的东西。None[1]

3D建模学习工作室翻译整理,转载请标明出处!

上一篇:Blender动画节点插件用户指南-调用子程序 (mvrlink.com)

下一篇:Blender动画节点插件用户指南-输入窗口 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号