frameGroup
frameGroup
一个全局共享的数据容器,用于存放单次渲染帧内不变的全局数据(如时间、相机位置),由渲染器每帧自动更新一次。
核心优势
核心优势是效率与自动化。通过“一次更新,处处使用”的模式,它避免了对每个材质进行重复的CPU更新和GPU通信,开发者只需使用 `time()` 或 `cameraPosition` 等节点即可自动获取最新的全局数据。
常见用途
为场景中的多个动画(如水面、旗帜)提供统一的 `time()` 节点以实现同步。
在菲涅尔效应等环境感知着色中,提供 `cameraPosition` 来计算视线方向。
为后期处理(如像素化)提供 `renderer.resolution` 以获取屏幕尺寸。
在程序化特效(如火焰)中,将 `time()` 作为随机种子,创造动态演化的效果。
如何调整
此节点由渲染器自动管理,不可直接调整。其效果通过改变场景状态来观察,例如,移动相机时,`cameraPosition` 的值会更新,导致依赖它的菲涅尔效应(边缘光)会实时跟随视线变化。
代码示例
1
2// cameraPosition 来自 frameGroup,用于计算菲涅尔效应
3const viewDir = cameraPosition.sub( positionWorld ).normalize();
4const fresnel = viewDir.dot( normalWorld ).oneMinus();
5