acos
acos
一个数学节点,封装了 GLSL 的 `acos()` (反余弦) 函数。它接收一个在 [-1, 1] 范围内的余弦值(通常来自点积),并返回对应的角度(范围在 [0, π] 弧度)。
核心优势
提供了从两个向量的点积结果中,直接、高性能地反求出它们之间实际夹角的核心能力。它是实现高级几何查询和程序化效果(如自定义边缘光、程序化聚光灯)的基石,否则这些效果将极难实现。
常见用途
通过精确计算法线与视线夹角,实现具有锐利边界的自定义菲涅尔或边缘光效果。
在着色器中程序化地实现聚光灯或探测锥效果,通过判断夹角是否在设定范围内来决定光照。
驱动程序化的“朝向”动画,通过计算当前朝向与目标朝向的夹角来控制旋转。
生成与角度相关的程序化图案,如雷达扫描或仪表盘,作为极坐标转换的一部分。
如何调整
该节点本身不可配置。效果完全由其输入值(通常是两个单位向量的点积)控制。通过改变这两个输入向量的相对方向,可以直接改变 `acos` 输出的角度值,从而调整如聚光灯锥体的大小或边缘光的触发角度等几何条件。
代码示例
1 // 计算从光源指向像素的方向与聚光灯中心方向的点积
2 const dotProduct = dot( lightDirection, pixelDirection );
3
4 // 通过 acos 获取实际夹角(弧度)
5 const angle = acos( dotProduct );
6
7 // 如果夹角小于光锥的半角,则该像素被照亮
8 const spotlightFactor = step( angle, coneAngle );