mx_rotate2d
mx_rotate2d
一个 MaterialX 兼容的二维旋转函数。将输入强制为 vec2、角度(度)强制为 float,先把角度转为弧度再调用内部 rotate(input, radians) 执行旋转。
核心优势
以“角度”为单位、语义清晰,免去手写弧度换算与矩阵拼装;可直接作用于 UV、screenUV 或任意 2D 向量,便于将 MaterialX 图迁移到 TSL。
常见用途
围绕中心旋转 UV 以转动纹理、法线或噪声图案。
旋转屏幕空间图案/方向性效果(如扫描线、运动拉伸方向)。
为程序化条纹、棋盘格等 2D 图案设定任意朝向。
在切线/平面坐标中重定向流动贴图或方向遮罩。
如何调整
调整第二个参数 amount(单位:度)。在常规笛卡尔坐标下正值逆时针、负值顺时针。若需绕任意中心 C 旋转,可用 p' = mx_rotate2d(p - C, amount) + C;例如 C = vec2(0.5) 可绕 UV 中心旋转。将 amount 替换为随时间变化的节点(如 timerLocal().mul(30))即可实现持续旋转。
代码示例
1// 将 UV 围绕中心旋转 45° 后再采样纹理
2const uvCentered = uv().sub( 0.5 );
3const uvRotated = mx_rotate2d( uvCentered, 45.0 ).add( 0.5 );
4
5material.colorNode = texture( myTexture, uvRotated );