- 桌面应用
- 图形学
- 3D渲染
- 图像处理
【免费下载链接】material-maker
A procedural textures authoring and 3D model painting tool based on the Godot game engine
导读:本文以 Shear 节点官方文档 为骨架,结合节点定义文件 shear.mmg 与引擎生成代码,系统讲解 Material Maker 中剪切变换节点的输入输出约定、三个核心参数(Direction / Amount / Center)、着色器层面的数学原理及实战使用建议。读完本文,你将能准确理解该节点"沿 X 或 Y 轴弯曲输入图像"的机制,并能在自己的材质图(material graph)中精准控制剪切方向、强度与中心位置。
Shear 节点概述
在 Material Maker 的节点体系中,Transform(变换)类节点负责改变输入图像的几何结构,这一分类在 nodes_transform.rst 中有明确说明:
The transform nodes are nodes that affect the geometry of their input.
Shear节点正是其中一员。按 官方文档 的定义,它是一个variadic(可变输入数)节点,会将输入沿 X 轴或 Y 轴进行弯曲(bend),实现类似"斜切 / 平行四边形变形"的效果:
TheShearnode is variadic and bends inputs along the X or Y axis.
节点定义文件 shear.mmg 中对节点的完整描述为:
Performs a shear stress transform on its input
即"对其输入执行剪应力变换"——这也是中文翻译(见 zh.csv)中的对应表述。
输入与输出约定
输入(Inputs)
Shear 节点接受一个或多个 RGBA 输入。在 shear.mmg 中,输入定义如下:
"inputs": [ { "default": "vec4(1.0)", "label": "", "longdesc": "The input image", "name": "in#", "shortdesc": "Input#", "type": "rgba" } ]值得注意的细节:
- 输入名为
in#,其中的#表示该输入是可复制扩展的——这是 Material Maker 中 variadic(可变输入数)节点的标志,在节点界面上可以点击输入端口旁的加号添加更多输入,每个输入共享同一套处理逻辑; - 输入类型为
rgba,即四通道彩色图像(RGBA); - 每个输入都有默认值
vec4(1.0)(白色),因此即使未连接上游节点,该输入也会被当作纯白 RGBA 处理,不会导致渲染错误。
输出(Outputs)
节点输出经过剪切变形后的 RGBA 图像。输出定义如下:
"outputs": [ { "longdesc": "Shows the transformed image", "rgba": "$in#($uv+$amount*($uv.yx-vec2($center))*vec2($direction))", "shortdesc": "Output#", "type": "rgba" } ]输出类型同样为rgba,可直接接入后续的变换、滤镜、混合或输出节点。
参数详解
官方文档 指出 Shear 节点有两个参数:direction(效果方向,水平或垂直)与offset(输入的弯曲量)。不过结合节点定义源码,实际参数为三个,其中文档所说的offset对应源码中的Amount参数。完整参数如下表:
| 参数名 | 类型 | 默认值 | 取值范围 | 步进 | 说明 |
|---|---|---|---|---|---|
| Direction | enum | Horizontal | Horizontal / Vertical | — | 剪切变换的方向(水平或垂直) |
| Amount | float | 0 | -1 ~ 1 | 0.01 | 变换量(弯曲强度) |
| Center | float | 0 | 0 ~ 1 | 0.01 | 剪切中心位置 |
Direction(方向)
在 shear.mmg 中,Direction 被定义为枚举(enum)类型:
{ "default": 1, "longdesc": "The direction of the shear transform (horizontal or vertical)", "name": "direction", "type": "enum", "values": [ { "name": "Horizontal", "value": "1.0, 0.0" }, { "name": "Vertical", "value": "0.0, 1.0" } ] }该枚举的取值并非简单索引,而是参与着色器计算的二维方向向量:
- Horizontal→
vec2(1.0, 0.0):剪切沿 X 轴方向作用; - Vertical→
vec2(0.0, 1.0):剪切沿 Y 轴方向作用。
Amount(变换量,即文档中的 offset)
Amount 控制剪切强度,源码定义如下:
{ "control": "None", "default": 0, "longdesc": "The amount of the transform", "max": 1, "min": -1, "name": "amount", "step": 0.01, "type": "float" }要点:
- 取值范围为-1 ~ 1,步进 0.01,可在参数面板中精细调节;
- 正负号决定剪切方向:正值沿正方向斜切,负值反向斜切;
- 值为 0 时输入完全不发生变形;
- 需要说明的是,内置素材库 base.json 中注册的 Shear 节点条目(
"type": "shear"、"tree_item": "Transform/Shear")默认参数为amount: 1.0,即从素材库拖入时默认带有明显剪切效果;而通过其他方式新建的节点则以 shear.mmg 中的amount: 0为默认。
Center(剪切中心)
Center 是文档简写为 "offset" 之外、源码中明确存在的第三个参数,用于指定剪切中心位置:
{ "control": "None", "default": 0, "longdesc": "The position of the shear center", "max": 1, "min": 0, "name": "center", "step": 0.01, "type": "float" }- 取值范围0 ~ 1,对应纹理 UV 坐标空间(0 为图像一侧边缘,1 为另一侧边缘);
- 位于剪切中心的像素行(或列)完全不发生位移,远离中心的像素则按距离线性偏移;
- 默认值 0 表示剪切中心在图像的一侧边缘,此时效果表现为整幅图像朝一个方向"倾斜";将其设为 0.5 则图像以中线为轴、两侧对称反向错位。
着色器实现原理
Shear 节点的核心是其输出表达式(shear.mmg 第 32 行):
$in#( $uv + $amount * ( $uv.yx - vec2($center) ) * vec2($direction) )这一行是理解该节点全部行为的钥匙,其中各记号含义如下:
| 记号 | 含义 |
|---|---|
$in# | 第 # 个输入图像(即输入的 RGBA 纹理采样函数) |
$uv | 当前片元的 UV 坐标(二维) |
$amount | Amount 参数(变换量) |
$uv.yx | UV 坐标的 x、y 分量互换(即(uv.y, uv.x)) |
$center | Center 参数(剪切中心) |
$direction | Direction 枚举展开后的二维方向向量 |
将方向向量代入后,表达式可拆解为两种情形:
Horizontal(方向向量 = (1, 0)):
采样坐标 = uv + amount * (uv.y - center, 0)即 x 坐标偏移量为amount * (uv.y - center),y 坐标不变。结果:当uv.y == center时偏移为 0,其余各行沿 X 方向按与中心的距离线性错位——图像呈现沿 X 轴倾斜的平行四边形变形。
Vertical(方向向量 = (0, 1)):
采样坐标 = uv + (0, amount * (uv.x - center))即 y 坐标偏移量为amount * (uv.x - center),x 坐标不变。结果:图像沿 Y 轴方向倾斜。
这正是"剪应力(shear stress)变换"名称的由来:类似于材料力学中平行平面相对滑移的变形方式,图像中的直线在剪切后仍保持平行,但整体发生斜向错动。
关于采样与预处理的实现细节
在引擎侧,这类以shader_model字典描述的节点由 gen_shader.gd 负责转换:
shader_model中的inputs、outputs、parameters会经预处理后注册为节点的端口定义与参数面板(参见 get_input_defs() 与 get_parameter_defs());$in#、$uv等占位符会在生成最终 Godot 着色器时被逐一替换为实际的输入采样函数与 UV 变量(同类占位符模式也可在 gen_sdf.gd 中看到,其使用$uv构建 UV 表达式);- 由于剪切是通过改写采样坐标而非重新绘制几何实现的,图像边缘之外的区域会出现拉伸或空白,具体表现取决于上游图像是否平铺(tileable)以及渲染时的边界采样策略。
使用场景与实践建议
结合上述原理,Shear 节点在材质制作中的典型用法包括:
- 制造动感与错位纹理:对砖墙、栅格等规律性纹理施加较小幅度的水平剪切(如
amount = 0.1),可使图案呈现倾斜的透视感或"被风吹动"的错位效果; - 制作平行四边形贴花:配合 Center 参数(如 0.5)可让纹理以中线为轴对称错位,适合模拟道路标线、斜纹编织等图案;
- 作为变形链的一环:Shear 与 Translate / Rotate / Scale / Warp 等同属 Transform 大类(见 nodes_transform.rst),可串联使用。需要说明的是,普通 Transform 节点(node_transform.rst)还额外支持用灰度输入图像逐像素调制变换参数,而 Shear 节点当前并未提供该能力;
- 制作平铺化纹理的斜向衔接:若上游纹理本身可平铺,剪切后仍能保持平铺特性,适合制作无限延伸的斜纹表面。
本地化与素材库注册信息
- 在 zh.csv 中,该节点被翻译为"切变",参数翻译分别为:方向("剪切变换的方向(水平或垂直)")、变换量、中心("剪切中心位置");
- 在素材库 base.json 中,节点以
"display_name": "Shear"、"icon": "transform_shear"注册,归类于素材树Transform/Shear目录下; - 节点的中文说明文本(如"Performs a shear stress transform on its input")也同步收录于翻译模板 material-maker-all.pot 中,供多语言界面使用。
进一步阅读
- 节点总览:Transform 类节点在文档体系中的位置与完整列表;
- Transform 节点:同类变换节点的 variadic 输入约定与采样模式说明;
- 节点定义源码:本文全部参数与着色器表达式的第一手来源;
- 着色器节点引擎:理解
shader_model如何被转换为可执行的 Godot 着色器。
小结:Shear 节点通过一行简洁的采样坐标偏移表达式,实现了方向可选的切变变形。掌握 Direction、Amount、Center 三个参数与着色器公式之间的对应关系后,你就可以精确预测并控制任意输入图像在 X 轴或 Y 轴方向的斜切效果,将其灵活融入自己的材质创作流程。
- 桌面应用
- 图形学
- 3D渲染
- 图像处理
【免费下载链接】material-maker
A procedural textures authoring and 3D model painting tool based on the Godot game engine
相关推荐
Material Maker 3D 纹理扭曲节点 Distort 完全指南:输入、参数与着色器原理
Material Maker 3D 纹理扭曲节点 Distort 完全指南:输入、参数与着色器原理 Distort 是 Material Maker 的 3D
桌面应用图形学3D渲染图像处理Material Maker TEX3D FBM 节点完全指南:3D 分形布朗运动噪声的原理、参数与 Godot 着色器实现
Material Maker TEX3D FBM 节点完全指南:3D 分形布朗运动噪声的原理、参数与 Godot 着色器实现 本文基于 Material Mak
桌面应用图形学3D渲染图像处理Material Maker 中 Adjust HSV 节点的参数与 HSV 着色器实现解析
Material Maker 中 Adjust HSV 节点的参数与 HSV 着色器实现解析 Material Maker 是一款基于 Godot 引擎的程序化
桌面应用图形学3D渲染图像处理
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考