# 渲染画质设置 · 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 实现和[官方说明](https://threejs.org/docs/pages/SMAAPass.html)位于 OutputPass 前;旧主场景默认无额外抗锯齿。 - AO 更换采样数时替换并 dispose 旧 pass,切换阴影尺寸时释放旧 shadow map;AO 分辨率在 composer resize 后单独设置。相同画质不重复应用,音量调节不会重建画质资源。 - 使用 [WebGLRenderer 的 transmissionResolutionScale](https://threejs.org/docs/pages/WebGLRenderer.html)控制折射捕获精度,不改变透光率与颜色。 - 查看器同步清晰度、纹理过滤和折射设置。启用 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 上限限制尺寸,并不保证所有设备的帧率或显存占用。