modelViewPosition
modelViewPosition
一个 vec3 向量,提供当前渲染物体枢轴点(pivot)在视图空间(摄像机空间)中的坐标。它对于创建以物体中心为原点的整体效果至关重要。
核心优势
它提供了一个稳定的对象级锚点,极大地简化了以物体为中心的径向效果(如能量护盾)的实现。它将底层的矩阵变换抽象化,并由渲染器高效管理,避免了手动传递 uniform 的繁琐工作,提升了代码的可读性。
常见用途
以对象为中心的径向效果:作为效果原点,计算片元到物体中心的距离,用于驱动能量护盾或冲击波。
基于深度的对象级淡出/高亮:使用其 Z 分量作为物体整体深度的度量,控制淡入淡出。
模拟附着于物体的光源:作为虚拟光源在视图空间的位置,创建从物体核心发出的光照。
如何调整
该节点是只读的,其值由物体和摄像机的位置决定。调整效果的关键在于如何运用其输出的 vec3 值。例如,可以利用其 Z 分量实现基于深度的颜色变化:`modelViewPosition.z.remap(-5, -50, 0, 1)` 可用作混合因子,在近处颜色和远处颜色之间平滑过渡,使整个物体根据其与摄像机的距离改变颜色。
代码示例
1
2// 计算表面点到物体中心的距离,以创建径向效果
3const distanceToCenter = positionView.distance( modelViewPosition );
4
5// 结合时间创建向外扩散的波纹
6const wave = sin( distanceToCenter.mul( 20 ).sub( timerLocal().mul( 5 ) ) );
7const rings = step( 0.5, wave );
8