Rotation Transform::Substance Designer Custom Function

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39812022/article/details/101721013

学习目标

制作旋转函数, 要制作函数使 Mask 在 360度内可以旋转。

制作旋转函数并添加。

制作后储存成 sbsar ,在 Substance Player 里确认。
制作用户函数。 直接使用 Linear Interpolation 案例来进行。

在这里插入图片描述
本次案例的目标是旋转 Checker 1 ,并可以修改旋转速度。

在这里插入图片描述
再加强以上函数。

内含旋转函数。

在这里插入图片描述
让 Mask 可以 360 度旋转,如上图一样扩展。
在这里插入图片描述
从 Input Value 获取 45度相关输入,组成适用的函数就可以了。
在这里插入图片描述
45度旋转结果。
适用动画,用特定速度旋转的函数用 Input Value 获取时间和旋转角度两个值,要实现得更复杂点。内含变量参考 $time 就可以了。
Substance designer 5.0 不支持内含函数,所以之前是直接制作使用的。但是现在的版本这些函数已经变成了更方便的内含函数。
来简单看下并制作吧。

添加变量。
1. 旋转角度。
2. 旋转轴。
在这里插入图片描述
选择 Pixel Processor Node 并添加2个变量。
旋转角度 rotation 用 Float1 数据类型添加,旋转中心轴需要用 X 和 Y 相关的值,所以添加为 Float2 数据类型,并把变量名变更为 pivot(轴) 。
在这里插入图片描述
连接外部输入。
使用 Input Value。

添加两个 Input Value ,各自命名修改为 Degree 和 Ration Pivot 。
在这里插入图片描述
为了旋转角度选择 Input Value Node ,在 Label 输入 Degree ,并添加画面标识名字。
Identifirer 变更为 roation 后 Type 是 Float1 ,界面换成 Angle 。
Default Turns 变更为 45 , Max 的基本值是 1 ,所以 Max 值变更为 360 后把 Default Turns 值修改为 45 就可以了。
有时候 Default 最大值不能改成比 1 大,这是 Substance designer 的界面Bug,直接用最大值输入 Default 值(比如案例里是 360 ) 画面 Slider 的最大值就会变成 Max 值。

在这里插入图片描述
选择为了旋转轴而添加的 Input Value Node , idenrifier 命名变更为 pivot , Type 变更为 Float2 。
为了方便查看 Label 也变更为 Rotation Pivot 。
因为会以图片的中心为准旋转,所以 Default XY 设置成 0.5 。
这个值会用在内部函数的计算。

打开前一个章节制作的案例,并进入 Pixel Processor 编辑窗口。
在这里插入图片描述
Extend of Mask Texutre 实现的部分应该如上图。
先从这部分开始修改吧。

添加 Rotation Vec2 。

在这里插入图片描述
在原有 Extend of Mask Texture 项目的 $pos 和 input 2 的 Samples Gray 中间添加 Rotate Vec2 。

在这里插入图片描述
在节点搜索窗搜索 Rotate ,然后添加 Rotate Vec2 内含函数就可以了。

在这里插入图片描述
Vec2 会输入 UV 坐标等内容。
通常以内含变量收入 $pos 。
Angle 连接旋转角度。
Pivot 连接要旋转的图片的旋转轴。
来简单查看下 Rotate Vec2 内部结构。
在这里插入图片描述
rotate Vec2 内含函数是这种实现方式。
在这里插入图片描述
在输入的图片 UV position ,也就是从 $pos xy 值去掉 pivot xy 值把图片 Offset 到 $pos 的左下角。

在这里插入图片描述
就这样 Offset 到角上的状态下旋转的话,出来的是以图片的中心为准旋转的结果。旋转后最终再重新把图片的像素以 $pos 为准做 offset 。

Operator/Add 会在加上 pivot xy 值。

Rotation Angle Input 计算。

在这里插入图片描述

添加 Get Float ,登记 #ration 。
添加 Division Node(除法) 和 Float Node。
Float Node 值变更为 360 。
#rotation 输入变量除以 360。
这部分是为了让界面直观才做的,用 0 到 1 值也可以实现 360度旋转, 为了方便 #rotation 的最少、最大输入值设成了 0到 360。 在内部函数重新分下这个,使它进行正常计算。

在这里插入图片描述
添加 Get Float2 并登记 #pivot 。

在这里插入图片描述
Division node 连接到 Rotate Vec2 的 angle , Pivot node 连接到 Rotate Vec2 的 pivot 。

有时 Rotate Vec2 的旋转值结果是不正确的。
为了防止这个而设置 Clamp ,对 XY 会各自设成 min : 0.001 和 max : 0.999 。

一个个来实现下吧。

在这里插入图片描述
添加两个 Swizzle Node ,各自设成 X 和 Y 。
Rotate Vec2 的输出部分各自连接到 Swizzle Node X 和 Y 。
Vec2 值分成两个 Component 了。
现在添加 Clamp node 并设置值就可以了。
在这里插入图片描述

添加两个 Float node ,各自设成 0.001 和 0.001 。
添加两个 Clamp node , min(0.001) 和 max(0.999) 各自连接 float 值。
Clamp 的 input 连接到分离的 X 和 Y component 。

这样旋转函数部分就实现完成了,这个再连到对应 mask 的 sampler 输入部分。

最终旋转函数。

在这里插入图片描述

About JP

链接: Website.
在这里插入图片描述
在这里插入图片描述
出生在韩国的TA。
1997年开始从事电脑图形视觉化工作后,在这个行业已经有21年经验了。
在多个网络游戏公司引领过美术团队,之前在allegorithmic担任TA负责人,在中国网易盘古工作室担任TA总监,现在是巨人网络TA部门的总负责人。
懒惰的人才有创意”是他坚信并执行的哲学道理。

猜你喜欢

转载自blog.csdn.net/qq_39812022/article/details/101721013