SeExpr 入门实例¶
在 4.4 版本加入: 本实例教程将介绍 SeExpr 表达式语言的用法。
SeExpr 介绍¶
SeExpr 是由迪士尼动画工作室设计开发的一种可嵌入的表达式语言,它让宿主应用程序可以按照脚本定义动态生成图案。皮克斯动画工作室在 RenderMan 文档 中将它称作“可通过脚本编程的图案生成器与组合器”。
Krita 在填充图层中提供了使用 SeExpr 的模式。
SeExpr 背景知识¶
要理解 SeExpr 的用法,我们首先要知道栅格图像 (raster) 和程序化图像 (procedural) 的区别。
你日常所见的绝大多数计算机图像都是栅格图像。无论是照片、动漫截图还是表情包,它们的图像放大后都能看到按照网格排列的马赛克状颜色方块,叫做“像素”。
栅格图像有一些缺点。首先,它们的像素分辨率在保存后将被 固定 下来。你无法通过缩放得到更多细节。如果你要修改栅格图像,你最好找回源图像,使用栅格图像编辑程序,例如 Krita 等进行加工,这才能保证更改后的质量。
其次,栅格图像保存所需的 二级存储空间 很大,这包括运行内存 (RAM) 和外部存储器 (如硬盘或者 SD 卡等)。它们的文件大小按照 图像像素大小的二次方增长 。例如在 Krita 的 创建新图像 对话框底部显示了将要创建的图像的像素大小、色彩深度和 所需内存 的关系。
以一个 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,如下图所示:
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
点击 确定 ,该脚本的效果将输出到填充图层,如下图所示:
警告
SeExpr 本身 不进行色彩管理 ,它总是按照 32 位浮点 , gamma 校正亮度 ,sRGB 色彩空间进行颜色计算。Krita 会按照 sRGB-elle-V2-srgbtrc.icc 特性文件把 SeExpr 输出的图像数据转换到工作图像的色彩空间。
如果你不知道什么是色彩管理,请参考 色彩管理流程 的介绍。
通过对话框控件修改脚本¶
除了直接编写脚本外,你还可以通过图形界面对脚本的变量进行编辑。在之前建立的浅蓝色填充图层 Fill Layer 1 上面点击右键,选择 图层属性… 打开填充图层对话框。
注意对话框中间一栏:只要脚本的语法正确,那里就会显示相关的控件,让你可以通过图形界面编辑每个变量。在上图所示的例子中,你可以通过 3 种方式更改 $color
变量:
在红、绿、蓝数值框中直接输入颜色数值。
拖动每个颜色通道下方的滑动条。
点击颜色通道左边的预览色块,这将弹出拾色器对话框,你可以用它直接选取一种颜色。
中间栏右下角显示了一个 新增变量 (Add new variable) 按钮,点击后将弹出下面的对话框:
这个对话框列出了 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
变量中使用过的颜色矢量:
制作 SeExpr 脚本预设¶
你可以将制作好的 SeExpr 脚本保存成预设,这样就可以在日后重复使用它了。
要将当前 SeExpr 脚本保存为新预设,请前往 选项 标签页:
点击 保存新的 SeExpr 预设… 按钮,打开下面的对话框:
在对话框的顶部输入框可以更改脚本预设的名称,在右栏按钮可以指定一个易于分辨的缩略图。
提示
如果该预设是已有脚本的副本,它的名字后面将带有 Copy (副本) 字样。你也可以把它改掉。
你可以使用对话框右栏的一系列按钮来为脚本预设指定缩略图:
修改已有 SeExpr 预设¶
如果你对脚本预设进行了修改, 选项 标签页右上角将显示两个小按钮:
点击“重新加载”按钮,脚本会被重置为它原本的状态。点击 覆盖预设 按钮,当前设置将覆盖原脚本。
点击铅笔状的“编辑”按钮,即可编辑该脚本预设的名称,之后点击 保存 按钮即可完成重命名:
将 SeExpr 导出为资源包文件¶
你可以根据 资源管理 页面的指引导出任意 SeExpr 脚本为资源包,与其他人分享。