mx_place2d
mx_place2d
对输入的 2D 纹理坐标按固定顺序进行变换:以 pivot 为原点先平移→缩放→旋转(角度制)→平移回去,再叠加 offset,返回变换后的 UV;功能等同于 MaterialX 的 place2d。
核心优势
将常见的 UV 操作(pivot、scale、rotate、offset)封装为单一节点,顺序一致、语义清晰,无需手写 mat2 或度/弧转换,可被 time、uniform 等任意节点驱动复用。
常见用途
纹理居中旋转:rotate 接 time 实现旋转动画。
UV 平铺与缩放:通过 scale 控制密度(需纹理 RepeatWrapping)。
滚动/扫描条效果:offset 随时间变化产生滚动。
精准锚点:设置 pivot 围绕任意 UV 点缩放/旋转。
纹理图集:scale=vec2(1/cols,1/rows),offset 选择子格。
贴花/标签对齐:用 pivot 与 offset 微调对位。
如何调整
参数:texcoord(输入UV)、pivot(默认 0.5,0.5)、scale(默认 1,1)、rotate(角度°,默认 0)、offset(默认 0,0)。固定顺序:减 pivot → 缩放 → 旋转 → 加回 pivot → 加 offset。常见调节:旋转动画将 rotate 设为 time.mul(45);平铺用 scale=vec2(tx,ty)(并启用 RepeatWrapping);图集用 scale=vec2(1/cols,1/rows),offset=vec2(col/cols,row/rows);围绕任意点旋转时将 pivot 设为该点 UV。
代码示例
1
2// 围绕中心放大 1.2× 并旋转 30°,再向右偏移 0.1
3const uvTr = mx_place2d(
4 uv(),
5 vec2( 0.5, 0.5 ),
6 vec2( 1.2, 1.2 ),
7 float( 30.0 ),
8 vec2( 0.1, 0.0 )
9);
10material.colorNode = texture( myMap, uvTr );
11