cameraIndex
cameraIndex
提供当前用于渲染的摄像机的无符号整数索引,是实现 VR、分屏等多摄像机效果的关键节点。
核心优势
自动化数据传递与逻辑封装。它能自动从渲染器(如 ArrayCamera)获取当前摄像机索引,并通过 .toVarying() 无缝地将该值从顶点传递到片元着色器,开发者无需手动管理 uniform 和 varying,极大地简化了多视角渲染逻辑。
常见用途
VR/立体渲染:区分左右眼(如索引 0 和 1),应用视差偏移以创造立体感。
分屏游戏:作为玩家标识,为不同玩家的屏幕应用特定效果或 UI。
编辑器工具:根据视图类型(如编辑/游戏预览)决定是否渲染 Gizmo 或调试信息。
画中画渲染:为主视图和子视图应用不同的着色逻辑,如简化子视图的渲染以提高性能。
如何调整
该节点的值是离散的整数(0, 1, 2...),由渲染器在渲染不同摄像机视图时自动切换,而非手动平滑调整。例如,在 VR 渲染中,渲染器会先将索引设为 0 渲染左眼,再设为 1 渲染右眼。着色器根据这个值的“切换”来执行不同逻辑分支,从而产生两种不同的输出,而不是一个连续变化的过渡效果。
代码示例
1
2// 根据摄像机索引(如 0=左眼, 1=右眼)计算立体偏移
3const stereoOffset = cameraIndex.equal( 1u ).cond(
4 vec3( 0.01, 0, 0 ), // 右眼偏移
5 vec3( 0, 0, 0 ) // 左眼无偏移
6);
7
8// 将偏移应用到变换后的顶点位置
9transformed.addAssign( stereoOffset );
10