Files
rhinelab-ui/verification/RENDER-QUALITY.md
T

3.8 KiB
Raw Blame History

渲染画质设置 · 2026-09-09

入口:系统设置 → 渲染画质 → 精细设置。沿用参考视频与原生实现流程。

预设

预设 渲染比例 DPR 上限 抗锯齿 阴影 AO 采样 AO 分辨率 景深 折射分辨率 纹理过滤
性能 80% 1 原始 1024 关闭 50% 关闭 50% 4×
原始(默认) 100% 1.5 原始 2048 32 100% 100% 100% 16×
高 125% 2 SMAA 4096 32 100% 100% 100% 16×
极高 150% 2 SMAA 4096 64 100% 100% 100% 16×

自定义渲染比例 50–200%,步进 5%;景深强度 0–150%,步进 5%。另支持 DPR 上限 3、AO 16 采样、AO 分辨率 75%、折射分辨率 25%/75% 及 1×/2×/8× 纹理过滤。纹理过滤限制到显卡实际支持值。

屏幕显示尺寸乘以 min(设备 DPR, 设置上限) 再乘渲染比例,得到请求分辨率。全尺寸缓冲限制到 8,294,400 像素及硬件纹理边长;达到限制时面板显示实际尺寸和限制提示。1080p、DPR 1 时极高渲染为 2880×1620,为原始的 2.25 倍像素,不能据此推断帧率。

实现

  • src/render-quality.ts 负责预设、规范化、本地旧布尔设置迁移和分辨率计算。旧低画质继续保留 2048 阴影与全分辨率折射,只关闭 AO/景深并使用 DPR 1。
  • 主场景顺序为 RenderPass → SSAO → Bokeh → SMAA → OutputPass。SMAA 按本地 Three.js 实现和官方说明位于 OutputPass 前;旧主场景默认无额外抗锯齿。
  • AO 更换采样数时替换并 dispose 旧 pass,切换阴影尺寸时释放旧 shadow map;AO 分辨率在 composer resize 后单独设置。相同画质不重复应用,音量调节不会重建画质资源。
  • 使用 WebGLRenderer 的 transmissionResolutionScale控制折射捕获精度,不改变透光率与颜色。
  • 查看器同步清晰度、纹理过滤和折射设置。启用 SMAA 时用独立后处理管线,原始档位继续直接渲染以保留其原生抗锯齿。阴影、AO、景深只控制阵列,在设置标签中标明。
  • 设置储存在 rhine-settings.rendering;修改单项自动标记自定义,选预设恢复整组参数。范围滑块拖动时更新数值,释放或键盘修改提交后应用,避免拖动期间连续重建大尺寸缓冲。
  • 同步保留并行音频任务的开关、音量与场景音频接线。

验证

  • node scripts/check-quality.mjs:通过。覆盖新旧设置、无效持久化值、范围约束、预设识别、序列化恢复、超采样比例及 48 组屏幕/DPR/硬件边长组合。
  • npm run build:通过。Vite 保留大于 500 kB 的主包提示。
  • 实际浏览器切换全部四个预设:主场景读取到对应分辨率、AO 采样、阴影尺寸和景深开关。
  • 自定义 16 采样、50% AO 分辨率时,全尺寸 1180×664 对应 AO 590×332;关闭 AO 后其分辨率控件禁用。
  • 构建后预览选择极高,再设置景深 0%、折射 50%、纹理 4×:刷新后上述值一致;查看器读取到相同分辨率、SMAA、50% 折射和 4× 过滤,模型载入、拆解和返回正常。
  • 关闭阴影与 AO 后恢复原始:实际恢复 2048 阴影、32 采样、100% 景深;详情画面正常。
  • 展开精细设置后面板内部可滚动;原生 select、range、summary 可键盘操作,模态焦点循环包含新增控件并排除折叠项与禁用项。
  • 实际渲染与查看器检查未发现控制台 error。现有 PCFSoftShadowMap 被当前依赖自动降为 PCFShadowMap 的弃用提示与本次改动无关。

尚未进行跨显卡帧率、显存峰值或长时间稳定性基准测试。8.3 MP 上限限制尺寸,并不保证所有设备的帧率或显存占用。