SeExpr 入门实例

在 4.4 版本加入: 本实例教程将介绍 SeExpr 表达式语言的用法。

SeExpr 介绍

SeExpr 是由迪士尼动画工作室设计开发的一种可嵌入的表达式语言,它让宿主应用程序可以按照脚本定义动态生成图案。皮克斯动画工作室在 RenderMan 文档 中将它称作“可通过脚本编程的图案生成器与组合器”。

Krita 在填充图层中提供了使用 SeExpr 的模式。

SeExpr 背景知识

要理解 SeExpr 的用法,我们首先要知道栅格图像 (raster) 和程序化图像 (procedural) 的区别。

你日常所见的绝大多数计算机图像都是栅格图像。无论是照片、动漫截图还是表情包,它们的图像放大后都能看到按照网格排列的马赛克状颜色方块,叫做“像素”。

栅格图像有一些缺点。首先,它们的像素分辨率在保存后将被 固定 下来。你无法通过缩放得到更多细节。如果你要修改栅格图像,你最好找回源图像,使用栅格图像编辑程序,例如 Krita 等进行加工,这才能保证更改后的质量。

其次,栅格图像保存所需的 二级存储空间 很大,这包括运行内存 (RAM) 和外部存储器 (如硬盘或者 SD 卡等)。它们的文件大小按照 图像像素大小的二次方增长 。例如在 Krita 的 创建新图像 对话框底部显示了将要创建的图像的像素大小、色彩深度和 所需内存 的关系。

../_images/Krita_newfile.png

以一个 8 位色彩深度的正方形纹理图层为例:

像素边长

所需内存

256

256 KB

512

1 MB

1024

4 MB

2048

16 MB

4096

64 MB

栅格图像的一种替代方案是 矢量图形 ,如 SVG 图像等。这种图像使用如贝塞尔曲线等数学公式来定义形状,因此无论如何缩放,也不会影响最终的精度。

SeExpr 是一种 程序化图形 生成器,它和前两者是完全不同的类型。 SeExpr 图像脚本的二次存储体积与矢量图形一样很小,只有几 KB,但和矢量图形不同,这些脚本并非数学公式。你可以对 SeExpr 的脚本进行 编程 ,指定纹理的任意一点的着色方法。SeExpr 生成的图像没有精度限制,你可以在任意分辨率下为填充图层输出复杂的图案。

如何编写 SeExpr 脚本

在接下来的实例教程中,我们将向你展示如何使用 SeExpr 编写脚本,将结果输出到填充图层,并将它保存为 SeExpr 脚本预设。

首先前往 图层 面板,添加一个填充图层。在对话框中的列表中选择 SeExpr,如下图所示:

../_images/SeExpr_editor.png

SeExpr 页面有两个标签页。我们先关注 脚本选项 标签页。

备注

要进一步了解 SeExpr 两个标签页的具体功能,可在 填充图层 的页面点击 SeExpr 查看。

现在先让我们把图层填充成浅蓝色。

SeExpr 脚本必须定义输出变量,因为我们要填充颜色,因此我们需要呼叫 $color 变量。SeExpr 在 RGB 色彩空间 中定义颜色,每种颜色以三个一组的数值进行定义,它们被称作 颜色矢量 。下面我们将要给 $color 变量赋值。

前往对话框底部的文本框,清除所有已有文本,然后重新编写脚本。让我们给 $color 变量赋予数值 [0.5, 0.5, 1] (50% 红、50% 绿、100% 蓝):

$color = [0.5, 0.5, 1];

SeExpr 必须知道哪个变量输出最终颜色数值,因此我们要在脚本的末尾添加该变量的名称:

$color

本例子的完整脚本如下所示:

$color = [0.5, 0.5, 1];
$color

点击 确定 ,该脚本的效果将输出到填充图层,如下图所示:

../_images/SeExpr_first_render.png

警告

SeExpr 本身 不进行色彩管理 ,它总是按照 32 位浮点gamma 校正亮度 ,sRGB 色彩空间进行颜色计算。Krita 会按照 sRGB-elle-V2-srgbtrc.icc 特性文件把 SeExpr 输出的图像数据转换到工作图像的色彩空间。

如果你不知道什么是色彩管理,请参考 色彩管理流程 的介绍。

通过对话框控件修改脚本

除了直接编写脚本外,你还可以通过图形界面对脚本的变量进行编辑。在之前建立的浅蓝色填充图层 Fill Layer 1 上面点击右键,选择 图层属性… 打开填充图层对话框。

../_images/SeExpr_prop_1.png

注意对话框中间一栏:只要脚本的语法正确,那里就会显示相关的控件,让你可以通过图形界面编辑每个变量。在上图所示的例子中,你可以通过 3 种方式更改 $color 变量:

  • 在红、绿、蓝数值框中直接输入颜色数值。

  • 拖动每个颜色通道下方的滑动条。

  • 点击颜色通道左边的预览色块,这将弹出拾色器对话框,你可以用它直接选取一种颜色。

中间栏右下角显示了一个 新增变量 (Add new variable) 按钮,点击后将弹出下面的对话框:

../_images/SeExpr_add_variable.png

这个对话框列出了 SeExpr 支持的所有变量类型:

Curve 和 Color curve

Curve (曲线) 和 Color Curve (颜色曲线) 变量相当于 SeExpr 的 色标渐变 :它们对一组数值定义的颜色梯度进行插值处理。

Curve 变量对应的是 1 维 (单色) 渐变,它为每个估值点返回一个单精度浮点数据。

Color curve 变量对应的是 RGB 颜色渐变,它为每个估值点返回一组颜色矢量。

Integers 和 Floats

Int ( Integer/整数) 和 Float (浮点) 是数值。

Vector

Vector (矢量) 是三个一组的浮点数据。

Color

Color (颜色矢量) 是代表了一种 RGB 颜色的矢量。

Swatch

Swatch (颜色样本) 变量包含了一系列的颜色。

String

String (字串) 通常用来指定一个单词。

例如,你可以在 Vector 标签页中指定和前面 $color 变量中使用过的颜色矢量:

../_images/SeExpr_add_variable_vector.png

制作 SeExpr 脚本预设

你可以将制作好的 SeExpr 脚本保存成预设,这样就可以在日后重复使用它了。

要将当前 SeExpr 脚本保存为新预设,请前往 选项 标签页:

../_images/SeExpr_editor.png

点击 保存新的 SeExpr 预设… 按钮,打开下面的对话框:

../_images/SeExpr_save.png

在对话框的顶部输入框可以更改脚本预设的名称,在右栏按钮可以指定一个易于分辨的缩略图。

提示

如果该预设是已有脚本的副本,它的名字后面将带有 Copy (副本) 字样。你也可以把它改掉。

你可以使用对话框右栏的一系列按钮来为脚本预设指定缩略图:

加载已有缩略图

如果该脚本预设已经带有缩略图 (例如在它是从已有脚本预设复制得到的副本),点击此按钮即可加载该缩略图。

加载图像为缩略图

从文件系统中指定一个图像文件用缩略图用作缩略图。

将脚本效果渲染成缩略图

将该脚本渲染成 256 x 256 的纹理,把它作为缩略图。

清除缩略图

删除当前缩略图。如果该预设是已有预设的副本,你可以在删除后点击 加载已有缩略图 按钮将它恢复。

修改已有 SeExpr 预设

如果你对脚本预设进行了修改, 选项 标签页右上角将显示两个小按钮:

../_images/SeExpr_overwrite_preset.png

点击“重新加载”按钮,脚本会被重置为它原本的状态。点击 覆盖预设 按钮,当前设置将覆盖原脚本。

点击铅笔状的“编辑”按钮,即可编辑该脚本预设的名称,之后点击 保存 按钮即可完成重命名:

../_images/SeExpr_rename_preset.png

将 SeExpr 导出为资源包文件

你可以根据 资源管理 页面的指引导出任意 SeExpr 脚本为资源包,与其他人分享。