mx_atan2
mx_atan2
MaterialX 兼容的二参数反正切函数。接收 y 分量 in1 与 x 分量 in2,返回向量 (x=in2, y=in1) 相对 x 轴的有符号极角,单位弧度,范围为 [-PI, PI]。默认 in1=float(0)、in2=float(1) 时返回 0。
核心优势
相比单参 atan(in1/in2) 更稳定:跨四象限正确、避免除零,并与 GLSL 的双参 atan(y, x) 一致,便于将二维方向直接转为角度标量以驱动极坐标类效果。
常见用途
把 2D 方向(如 position.xz、uv 梯度)转换为角度,用于极坐标着色或扇形分区。
生成环形/径向条纹、雷达扫描、扫光等围绕轴的图案。
从法线或流向场推导角度,驱动各向异性高光、流动贴图等效果。
将角度映射到 [0,1] 以控制渐变/Hue、动画相位或周期重复。
如何调整
参数顺序很重要:mx_atan2(in1, in2) 等价 GLSL atan(y, x),常见用法为 mx_atan2(p.y, p.x)(或在 XZ 平面用 mx_atan2(p.z, p.x))。将返回角 a 映射到 [0,1]:a01 = a.add( PI ).div( PI2 );做 N 扇区重复:fract( a01.mul( N ) );偏移起始角:对 a 加常量或在输入平面中旋转/交换分量。默认值提供安全回退,避免未赋值导致的异常。
代码示例
1
2// 以世界 XZ 平面方向计算角度,并映射到 [0,1] 作为混合因子
3const angle = mx_atan2( positionWorld.z, positionWorld.x );
4const t = angle.add( PI ).div( PI2 );
5
6// 用 t 在两种颜色间混合,得到极坐标着色
7material.colorNode = mix( color( 0xff0080 ), color( 0x00ffff ), t );
8