Untoon Engine

Priority-and-Fake-Transparency-Validation

本页目录

优先显示验收

当前状态

用户已反馈此前构建编译成功,局部优先显示测试符合预期。移除已取消功能及清理参数残留后的最终版本仍需用户构建验证。代理只执行源码审查和不依赖引擎的 Python 检查,没有编译引擎、Shader、材质或启动编辑器;以下完整场景矩阵与 GPU 性能验收仍待验证。

使用说明见材质编写指南,实现顺序见渲染管线,资源与数据结构见架构说明,调试开关见灯光与后处理指南。

支持范围

路径 优先显示
桌面 Deferred 普通静态/骨骼网格,Opaque/Masked Toon 实现相机深度覆盖
普通非 Toon 材质 保留普通遮挡
Nanite 保留遮挡,不参与优先组
Groom Strands、Forward、Mobile、Path Tracing 不参与
Scene Capture、反射捕获、Instanced Stereo 不参与
阴影地图、Lumen 场景捕获、光追反射 原始几何
Lumen 关闭、缓存关闭、其他 Final Gather 优先显示仍独立工作

屏幕追踪可能间接看到相机可见性与颜色变化。没有新增 Shading Model、GBuffer 编码、CustomDepth 或 CustomStencil 占用;无需迁移旧材质。

已执行的独立检查

测试入口:Engine/Source/Runtime/Renderer/Private/Untoon/Tests/test_visibility_reference.py。

python -B Engine/Source/Runtime/Renderer/Private/Untoon/Tests/test_visibility_reference.py

19 项检查覆盖:

  • 同组眼部、多层头发、脸部遮挡、墙体夹在头发与眼部之间、Nanite 墙体的普通遮挡语义。
  • 不同组交错、像素遮罩阈值、未登记成员、隐藏目标、逐帧目标消失。
  • 图集容量失败及失败组仍遮挡其他组。
  • 五个片元的全部 120 种深度排列、不同提交顺序,以及 2,000 组随机遮罩/多角色案例。
  • 非零 ViewRect、同组不同视图、不同组同屏幕像素的图集索引隔离。
  • LOD stencil 清除后重建相同像素判定,覆盖 raster/compute 路径、非零视图原点与过渡零点。
  • 新材质接口序号、未改 GBuffer/Shading Model 定义、上游新增源码行的单层 Untoon 标记。

这些测试使用标量反向深度模拟遮挡,不调用 UE,不包含 GPU 光栅化、遮挡查询、LOD 过渡、Shader、材质编译或 RHI 参数验证。

源码核对项目

  • Outline 不再采样同时写入的 SceneColor;硬件混合保留目标 alpha,源像素和自身剔除检查 Untoon Shading Model。
  • Shadow Blur 在最终 ShadowMask 后创建 ViewRect 快照,模糊链保持局部范围,合成仅读快照并只写 B。
  • ShadowMask 的两处阴影输入都绑定只读快照;Toon Light 的 SceneTexture 颜色输入绑定已完成光照的副本。两条光照 mesh pass 以只读深度绑定,并补齐对应 PSO 的实际目标格式。
  • 优先深度 Phase 1 使用空图集,Phase 2 在目标覆盖生产后绑定实际图集;组失败时覆盖为零。
  • 完整遮挡包括仅写深度的普通组件与 Nanite。前一帧的 primitive/instance occlusion、预计算可见性和 Nanite HZB 不得丢弃被头发遮住的真实阻挡物。
  • 延迟头发深度完成后修正 Nanite shading mask/decal stencil、清除被替换表面的速度,再生成后续 HZB。
  • Depth、Base Pass、Velocity、Toon ShadowMask、Toon Light 共用覆盖规则;普通 Opaque 让位材质保留材质像素判断。
  • 完整基线在原生预深度清除 LOD stencil 前生成;补绘及 Toon 光照通过每次绘制的参数复现相同过渡判定,不读取已清除的 stencil。LOD 过渡绘制由原生可见性流程禁止缓存。
  • 新 mesh pass 的 PSO collector 与实际 blend、depth/stencil、目标格式和材质筛选保持一致。
  • 未参与视图不提交优先深度/图集测试 Pass。

待运行:基础回归

  • 对比功能关闭时旧 Toon、普通非 Toon、混合材质、Nanite 场景。
  • 确认旧材质无需重做连接,Toon Light 的 AreaLightLightingModulate 仍为 Float3,序号和默认值不变。
  • 验证普通静态网格、骨骼网格、Masked、Opaque、WPO、PDO、法线贴图和材质实例。
  • 检查新节点在传统编译路径与 MIR 下的输入类型、默认值及生成函数。
  • D3D/Vulkan 所用目标平台检查 Shader 参数、RHI validation、RDG validation 和 PSO precache 日志。
  • 普通与 Nanite Toon ShadowMask/Light 导出、描边和阴影晕染回归。

待运行:优先显示

  • 同角色眼睛完整穿过已标记头发;未标记发片保持遮挡。
  • 脸部遮眼;墙在头发前方、头发与眼睛之间、眼睛后方三种位置。
  • 多角色共享材质但组独立;不同角色头发、脸和眼睛交错。
  • 同一网格不同材质槽;跨组件成员;成员移除、重注册、重复登记与运行时 RefreshMembers。
  • 隐藏目标、距离裁剪、LOD/dither 过渡、骨骼动画、WPO、PDO、相机切换。
  • 遮挡物上一帧完全被头发挡住,本帧仍正确阻挡目标;仅写深度组件仍遮挡。
  • Nanite 普通墙体挡眼;补绘头发覆盖 Nanite 后,没有残留 Nanite 着色或速度。
  • 降低 MaxAtlasSize 制造容量失败,失败组恢复普通遮挡,其他组不串数据。
  • 多 ViewRect、非零原点、分屏、动态分辨率;功能未参与视图没有新增对应 Pass。
  • DDM_AllOpaque、DDM_AllOpaqueNoVelocity 和不同 prepass 设置下深度一致。
  • TSR/TAA 下头发边缘、眼部、运动向量、历史重投影与描边一致。
  • 检查投射阴影、Lumen 场景捕获、光追反射仍保留原始头发几何。

待运行:成本记录

场景 优先 Pass GPU ms Toon Light GPU ms Lumen 更新 GPU ms Atlas MiB 临时纹理峰值 MiB
功能关闭 待测 待测 待测 待测 待测
单角色优先显示 待测 待测 待测 待测 待测
多角色优先显示 待测 待测 待测 待测 待测

记录分辨率、RHI、GPU、角色数和材质覆盖面积。优先图集之外的基线快照、逐组临时资源和遮挡剔除成本也须计入。