Three.js 仅负责表现。自适应分辨率、阴影、植被、后处理、粒子与预热会随设备变化;60 Hz 战斗模型保持不变。
帧组合
渲染路径基于最新的插值状态更新相机、可见的车辆模型、世界细节、表现特效、灯光、阴影与后处理。已建立的热循环复用 scratch 对象与对象池,而不是每帧分配。
晚于不透明物体的特效与主场景共享深度信息。炮口光、曳光、火花、烟尘、火与碎片按距离与画质策略被接纳。
光照与后处理
生物群落光照提供太阳方向、天空、雾、曝光与阴影策略。稳定的级联阴影跟随相关的相机区域。后处理链组合环境光遮蔽、抗锯齿、必要的泛光、输出分级以及最终的动态渲染缩放。
截图视角会固定画质与渲染缩放,避免对比图漂移。持续负载下,玩法可降级昂贵的层。

自适应画质
桌面与移动端解析出不同的起始配置。内部分辨率、阴影工作、植被密度、特效预算和后处理可独立降级。滞回机制防止快速振荡。
设备诊断与实测过载——而非仅靠 user-agent 字符串——决定安全路径。画质变化绝不改变炮弹飞行、点亮、伤害或权威时序。
保持启动与路由隔离
车库在明确的 Battle 意图出现前不会构建战场。公开页面不导入可玩渲染器;车库启动也不会急切地导入完整的仿真或舰队图。具体的车辆族与世界工作只在所选路由需要时才获取。
冷启动探针禁用缓存并记录网络与应用工作,让一次热导航无法冒充首访性能。

把战斗加载藏到幕布之后
战斗进入阶段会获取精确的世界与阵容、上传所需纹理、准备特效、提交车辆材质、预热着色器与后处理,并在揭示前建立首个可用相机。必需工作在倒计时之前完成,而不是以黑屏或冻屏开场。
进度反映归属的阶段。意图改变时取消陈旧工作;可重试的生命周期负责恢复,而不是把定时器散落在组合根中。
性能证据
性能 trace 记录帧类别、渲染器计数、动态缩放与过渡预算。浏览器探针覆盖冷加载、战斗进入、地图切换、车库与多人渲染。
渲染相关工作请使用 npm run perf:dev、npm run perf:cold、npm run perf:transitions 与生产构建。
车灯、阴影与烟幕
驾驶灯取自模型实际灯口并跟随车体姿态,暖色光束现在照亮更远的前方。只有附近符合条件的光源占用固定灯光池,其他可见灯镜仍可发光。关闭车灯或摧毁车辆会移除其照明贡献,潜望镜、后视镜及装甲不会因为共用材质而发光。
环境光遮蔽与投射阴影相互独立,关闭 AO 不应关闭太阳阴影。阴影稳定性、云层历史及特效合成都有针对镜头移动、射击和画质切换的检查。烟幕既是视觉效果,也是模拟中的视线阻挡;画面和侦察决策由不同模块负责,但必须保持一致。
图形恢复与旧会话
浏览器可能在内存压力下回收图形上下文。游戏会暂停展示,在遮挡画面下恢复资源后继续。恢复应有界、保留战斗状态并避免反复分配。只有恢复无法完成时才以重新加载兜底,正常切地图或切车不应依赖刷新。
普通标签页与新标签页表现不同时,应先对照应用版本和已保存画质设置,再判断是否由某个渲染效果造成。带哈希的资源及部署版本检查用于防止混用版本。报告时记录地图、车辆、画质、视口和复现步骤;单张截图不足以区分旧资源、设置或 GPU 状态。
