SuperAPI AI 工具集

threejs-ambient-contact-shading

通用与其它

查看项目

更新于 10-16 09:58

技能介绍

用途:本技能用于在 Three.js r185 的 WebGPU/TSL 渲染流程中处理环境接触遮蔽(Ambient Contact Shading)。核心原则是 AO 只表示间接光照的可见度,可衰减间接漫反射与环境/镜面响应,但不得乘到直接光、自发光、UI 或已色调映射的帧上;直接光与自发光应保持不变。

主要能力与分支选择:按栅门条件依次选择分支——若遮挡是静态/局部的,可用材质 aoMap/aoNode,仅一次前向渲染,无动态物体间接触;若需要动态屏幕接触且渲染器单独暴露间接光照项,可对 GTAO 可见度施加于该项;若标准前向 NodeMaterial 需要动态接触且总边际成本可接受,则走深度/法线 pass → GTAO → 可选重建 → 第二次光照 pass(含 builtinAOContext());若都不满足质量与成本栅门,则省略屏幕 AO,保留材质、直接阴影与轮廓可读性。

使用方式:先初始化渲染器并要求 WebGPU 后端,再创建节点图。默认 r185 图需要透视、非对数标准深度;正交、对数、反转深度和子视口适配器需自行证明其深度/法线重建、视线、天空与排序规则。定义不透明遮挡体、接收体、alpha 覆盖和透明策略;将 AO 绑定到当前视图的 screenUV、绘制缓冲尺寸和投影,每个独立视图使用独立状态节点。物理接触半径用世界单位表达:radiusRender = radiusMeters * renderUnitsPerMeter。

时序与 bent normal:GTAONode.useTemporalFiltering 只旋转采样,不创建或重投影历史,仅在存在有效 TRAA/自定义 resolve、有效相机与物体运动、匹配尺寸与层成员、拒绝与重置行为时启用。相机/投影切换、几何或覆盖不连续、AO 参数/尺度/分辨率变化、质量迁移时需重置或重新播种;r185 TRAANode 无公开相机切换重置,需重建并销毁节点。Bent normal 仅在标量 AO 通过后添加,且一墙测试证明方向背离被遮挡半球。

适用场景与限制:适用于需要以环境可见度约束间接光照的 WebGPU/TSL 渲染项目。限制包括:标准 builtinAOContext() 会跳过透明材质;正交/对数深度/反转深度/子视口需额外适配证明;禁用 AO 时应替换输出图并标记 RenderPipeline 脏,确保 AO 相关 pass 与依赖不可达;节点销毁不递归,需自行保留并释放噪声、重建目标与材质句柄。共享 MRT、全局 pass 顺序、历史基础设施、色调映射、输出转换和自适应分辨率由图像管线所有者负责。验证时应捕获原始深度、选定法线输入、原始/重建 AO、间接贡献、直接/自发光残差、速度/历史拒绝以及 AO 关闭状态,并覆盖 UV 不变性、薄轮廓、透明交叉、平滑曲线、屏幕边缘、非对称投影、运动、缩放与销毁重建等测试。更多 r185 GTAO 管线、重建权衡、时序契约与 bent-normal 契约需阅读对应参考。