物品栏图标缓存

物品栏图标缓存

物品栏图标缓存是一项性能优化工具,可提升帧率并消除打开物品栏背包、与储物箱交互或使用制作台时常见的微卡顿。

此模组目前仍是一个工作理论和实验性尝试,旨在解决大型物品栏界面卡顿问题。它需要实时性能分析和测试。

  • 工作理论:基于对 ItemDrop.ItemData.GetIcon 的源代码分析,Valheim 原生似乎使用实时 3D 摄像机管线( IconCamera )即时生成物品栏槽位图标——很可能是为了支持动态物品外观(如自定义盾牌涂装变体和披风颜色)。如果属实,打开一个大型模组容器(例如 100 格巨型箱子)会迫使 GPU 在 2D 菜单画布内同时运行多个隐藏的 3D 资源渲染循环,从而导致界面微卡顿。
  • 尝试性修复:此模组针对所有静态、不可自定义的物品,在该特定管线上实现了一个结构性断路器( [HarmonyPrefix] -> return false ),强制 UI 改为拉取原生扁平 2D 精灵指针。理论上,这会完全短路 3D 生成摄像机。
  • 可能出错的地方:如果没有附加 [i]RenderDoc[/i] 或 [i]Unity Frame Debugger[/i] 之类的实时图形分析器来明确审计服务器的顶点绘制调用峰值,这仍然只是一个有根据的推断。引擎可能已经在启动时使用了内部纹理图集缓存,这意味着所感知到的性能提升可能是安慰剂效应,或者只是优化了比预期小得多的布局代码部分。

问题:

默认情况下,Valheim 不使用扁平 2D 图像在物品栏槽位中显示物品。相反,每次绘制容器或背包界面画布时,游戏引擎都会在地图边界外的虚空空间中主动实例化隐藏的 3D 资源模型。一个专用子摄像机( IconCamera)会实时渲染这些 3D 模型,并将其投影到你的物品槽位上。 如果你拥有拥挤的物品栏,或打开包含数十件物品的大型储物箱配置,你的计算机会在 2D 菜单内持续同时运行多个隐藏的 3D 渲染进程。这会造成突发的处理峰值,导致明显的菜单卡顿和界面帧率下降。

解决方案 此模组在核心图标生成管线( ItemDrop.ItemData.GetIcon)之上引入了一个事件驱动的拦截器。 该模组不允许持续的 3D 渲染通道,而是让引擎在你首次遇到某个物品资源布局视图时,只精确捕获一次。随后,它会立即将一个轻量级引用令牌( "Ninefinger_BakeStaticIcon")直接写入该物品的持久化存档配置数据中。 在之后所有的游戏循环和重启中,前缀脚本会捕获该签名标记键,完全短路沉重的 3D 摄像机管线,并指示用户界面以原生方式拉取预加载的扁平图标。这会以极快的内存路径完全绕过 3D 模型虚空摄像机生成循环。

混合排除防火墙 为确保你不会失去原生游戏视觉选项,此模组设有一个专用验证门( ShouldItemBeSafelyExcludedFromBaking)。优化循环在遇到具有动态自定义设置的物品时,会自动退出并允许原版 3D 渲染正常运行:

  • 盾牌( ItemType.Shield ): 排除,以保留你自定义选择的涂装条纹设计。
  • 披风( ItemType.Shoulder ): 排除,以保护你的动态亚麻颜色选择。
  • 火把与酒杯: 排除,以确保活跃的燃料纹理和蜜酒杯液面填充高度正确渲染。

所有其他静态物品——包括所有标准武器、护甲板、工具、奖杯,以及基地箱子墙内数以千计的原材料——都会被安全优化。

功能与技术规格

  • 0ms 后台开销: 在你奔跑、战斗或探索时,此模组不会运行活跃的后台更新计时器。它会完全休眠,直到界面画布变化主动请求物品卡图标。
  • 极低内存占用: 整个运行时会话缓存注册表存储在堆外空间,整个游戏数据库总共消耗不到 15 至 30 MB 内存。
  • 100% 可安全卸载: 你的模组逻辑利用 Valheim 原生 ZDO 网络数据系统。如果你之后移除 .dll 插件,基础游戏会遇到该文本键,将其作为无法识别的匿名字段安全忽略,并回退到原生 3D 渲染,绝对零文件损坏风险。

BepInEx 配置选项

首次启动时,会在你的 BepInEx\config 文件夹内自动生成一个名为 ninefinger.valheim.inventoryiconcache.cfg 的配置文件:

  • EnablePermanentSymbolBypass(True/False):切换以完全开启或关闭优化。
  • DisplayBakeConsoleNotices(True/False):开启此项后,可在黑色 BepInEx 控制台输出日志窗口中实时观察模组主动标记静态材料和武器。

安装说明 将 InventoryIconCache.dll 直接放入你的 Valheim\BepInEx\plugins\ 文件夹


我的模组:

Auto Refuel Engine Auto Ballista Reload Deep Storage Crafting Zone GC Throttler Auto-Save Manager Recipe Search Optimizer Construction Drone Master Open World Congestion Governor Network Stream Widener Base Virtual Proxy Optimizer Particle Pacing Limiter Immersive Weather and Acoustics Terrain Loading Priority Fix Performance Booster Auto Repair Fix Crosshair Hitbox Fix Network Culling Optimizer True Axis Build Rotator First Person Perspective Wolves Can Jump Server Spawn Data Governor Spear Tracker Trophy Engine Optimizer Inventory Icon Cache