news 2026/10/12 9:58:11

Material Maker 剪切(Shear)节点完全指南:原理、参数与着色器实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Material Maker 剪切(Shear)节点完全指南:原理、参数与着色器实现
  • 桌面应用
  • 图形学
  • 3D渲染
  • 图像处理

【免费下载链接】material-maker

A procedural textures authoring and 3D model painting tool based on the Godot game engine

项目地址:https://gitcode.com/gh_mirrors/ma/material-maker
点击查看免费下载

导读:本文以 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参数。完整参数如下表:

参数名类型默认值取值范围步进说明
DirectionenumHorizontalHorizontal / Vertical—剪切变换的方向(水平或垂直)
Amountfloat0-1 ~ 10.01变换量(弯曲强度)
Centerfloat00 ~ 10.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 坐标(二维)
$amountAmount 参数(变换量)
$uv.yxUV 坐标的 x、y 分量互换(即(uv.y, uv.x))
$centerCenter 参数(剪切中心)
$directionDirection 枚举展开后的二维方向向量

将方向向量代入后,表达式可拆解为两种情形:

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 节点在材质制作中的典型用法包括:

  1. 制造动感与错位纹理:对砖墙、栅格等规律性纹理施加较小幅度的水平剪切(如amount = 0.1),可使图案呈现倾斜的透视感或"被风吹动"的错位效果;
  2. 制作平行四边形贴花:配合 Center 参数(如 0.5)可让纹理以中线为轴对称错位,适合模拟道路标线、斜纹编织等图案;
  3. 作为变形链的一环:Shear 与 Translate / Rotate / Scale / Warp 等同属 Transform 大类(见 nodes_transform.rst),可串联使用。需要说明的是,普通 Transform 节点(node_transform.rst)还额外支持用灰度输入图像逐像素调制变换参数,而 Shear 节点当前并未提供该能力;
  4. 制作平铺化纹理的斜向衔接:若上游纹理本身可平铺,剪切后仍能保持平铺特性,适合制作无限延伸的斜纹表面。

本地化与素材库注册信息

  • 在 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

项目地址:https://gitcode.com/gh_mirrors/ma/material-maker
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 9:57:38

AI日报制作全流程:从信息筛选到知识库沉淀的实战指南

1. 一份“AI日报”到底在记录什么每天早上打开信息流,满屏都是“某模型又刷新了榜单”“某工具又上线了新功能”“某团队用AI把效率提升了多少倍”。信息量大到让人麻木,但真正能沉淀下来、对实际工作有指导意义的内容少之又少。我做了三年多的AI领域内容…

作者头像 李华
网站建设 2026/10/12 9:56:47

COMSOL裂缝注浆模拟:非饱和多孔介质Richards方程建模实践

干工程的老伙计们都有种感觉:注浆泵一开,浆液从管口出去之后就彻底“放飞自我”了。你以为它乖乖沿着裂缝走,结果它在地层里绕了个大圈;你以为终于堵住了,一降压,它又从另一条通道溜回来。这背后的物理过程…

作者头像 李华
网站建设 2026/10/12 9:56:06

数据库期末考试冲刺:范式、事务与SQL上机题避坑指南

简介:面向数据库课程期末备考,一份 doc 文档收录了完整的一套数据库期末考试试题与参考答案,覆盖数据库系统核心、概念模型与关系模型、E-R 转换、关系规范化、SQL 授权、事务隔离与数据库恢复等高频考点。包内共 1 个 doc 文件,压…

作者头像 李华
网站建设 2026/10/12 9:49:23

免费搭建私人知识库:Cherry Studio + 免费模型实现RAG全流程

前阵子我用一套完全免费的组合,把堆积两年的PDF、Word、Markdown资料全部变成能随问随答的私人知识库。用到的核心就是Cherry Studio搭配各类免费模型,整个方案不花一分钱,却把付费知识库产品的主流程全走通了:文档导入、向量化、…

作者头像 李华
网站建设 2026/10/12 9:47:15

学生校园消费行为分析:一卡通流水聚类与数据清洗实战

简介:这是一份基于Python的学生校园消费行为分析项目源码,面向Python期末大作业、课程设计以及需要数据分析实战练习的高校学习者,也适合作为理解校园消费场景下行为建模的入门参考。项目以某高校校园消费行为数据集为对象,基于DF…

作者头像 李华