Skip to content

附加包性能优化

本页面镜像自
BedrockWiki

根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。

WARNING

本页内容主要基于多方社区反馈整理。因此部分信息可能存在概括性、主观性或矛盾性。优化附加包时请始终自行判断。本页面不能替代在多种设备上实际测试附加包性能。

附加包性能至关重要,因为即使技术上最出色的附加包,如果大多数玩家设备无法流畅运行也将失去意义。开发附加包时需时刻谨记,许多基岩版玩家使用性能远低于开发设备的终端进行游戏,移动端用户尤为明显。因此应从性能角度设计附加包,并尽可能在低端设备上进行测试。

本指南按基岩版各子系统分类,列出非详尽性能考量事项。各条目不应视为铁律,而应作为识别潜在优化领域的参考。

生物群系与特征生成

生物群系

  • 生物群系系统整体效率较高
  • 通常能妥善处理高度图的大数值
  • climate组件会产生大量粒子风暴

特征生成

  • 生物群系生成通常比特征生成更少卡顿
  • 单个区块内执行数百次多方块特征迭代性能损耗较低
  • 单个区块内数千次多方块特征迭代将显著影响游戏体验
  • 单个区块内执行数十万次单方块特征迭代性能损耗较低
  • 单个区块内数千个特征实例性能成本较低
  • 单个区块内数万个特征实例会显著影响区块加载
  • 单个区块内数十万特征实例将导致区块加载极度缓慢

方块

材质

  • 应始终使用渲染需求最低的材质类型

alpha_blend性能差于alpha_test,后者又差于opaque

数量与类型

  • 应尽量避免并减少流动液体

更新

  • 应尽量减少方块更新

命令

数量与类型

  • 最小化每tick执行的命令数量

每个tick执行/effect/gamemode等命令应避免,这些操作对性能影响显著

  • 应避免在运行时进行大规模clone、fill和结构加载

将大型操作拆分为多tick执行的多个命令可避免卡顿,建议使用结构加载动画

选择器

  • 需注意避免对过多实体执行函数导致执行次数过多
  • 执行记分板命令的成本高于多次运行实体选择器
  • 使用c=1确保选择器在找到第一个实体后停止可提升性能
  • 使用相同选择器执行多个命令时,应改用函数避免重复解析

标签与记分板

  • 记分板在大规模使用时性能优于标签

实体

  • 实体通常是各子系统中性能影响最大的要素,应尽可能减少

组件

  • 飞行生物寻路计算性能消耗显著
  • 飞行生物通常存在性能问题

如有可能,建议通过动画模拟飞行生物

虚拟实体

  • 虚拟实体与常规实体性能影响相当(不含寻路等重型组件时)

几何结构

骨骼

  • 骨骼数量未观测到明显性能影响

元素

  • 除极端情况(数千元素)外,元素数量通常不成问题

材质

  • 应始终使用实现预期效果所需的最低材质
  • 不确定时可参考材质定义文件,同时考虑材质继承系统

数量

  • 应尽量减少任意时刻加载的实体数量

保持30个以下为最佳

光照

地图设计

  • 空心区域即使不可见仍会导致光照计算卡顿

填充未使用的封闭空间可避免此问题

  • 保持昼夜恒定可避免光照重新计算

光源

  • 基岩版动态计算光照,不同光源性能成本不同

光源方块性能最佳(无粒子、渲染和特殊状态逻辑)

火把因产生粒子、渲染和连接状态逻辑存在较小性能问题

含最少组件的自定义光源方块是性能与美观的合理折中

对比表格

光源类型评分红石更新动画纹理光照更新Tick更新粒子效果渲染
光源方块1
灯笼4
自定义方块2
蘑菇3
红石灯3
荧石3
海晶灯笼4
火把4
红石火把5

Molang

递归

  • 尽量减少递归使用
  • 深度嵌套循环结构会导致性能问题
  • 适时使用break跳出循环

结构体

  • 避免结构体过深,每层嵌套均有性能损耗

变量

  • 尽量使用临时变量减少内存占用
  • 根据脚本类型考虑变量计算频率

纹理

texture_list.json

数量

  • 建议不超过3000个纹理

Render Dragon引擎限制为4096个纹理,1.16版本原版已有800个

分辨率

  • 最大支持16384x16384
  • 推荐最大4096x4096以保证低端设备兼容性
  • 注意纹理图集化处理,大尺寸纹理可能影响低端设备图集生成
  • 根据可视距离需求确定必要纹理尺寸

交易系统

村民交易在达到60项以上时会导致性能问题甚至全设备崩溃。建议拆分交易至多个村民或自定义实体/NPC,测试表明30项交易是安全阈值。 可能与JSON界面系统有关

音效

数量

  • 已注册音效总数会影响性能

压缩

  • 音效压缩显著减小包体积
  • 在Switch等老旧/低功耗设备上效果明显
  • 基岩版使用的FMod简单API会将所有音效解压为WAV格式后加载至内存,CPU性能无提升

流式音频不在此列

流式处理

  • 体积超过500KB或时长超过1分钟的音效应采用流式处理

红石

区块边界

  • 应避免红石电路跨越区块边界

命令方块

  • 构建大型命令链时应垂直堆叠于单个区块内
  • 尽可能用函数和行为包替代命令方块

常加载区域

  • 总区块数比常加载区域更需关注
  • 非必要时应避免动态区域
  • 最佳实践是将常加载区域限制在单个区块

所有持续运行的红石装置应置于此区块

  • 通过/testforblock测试并及时卸载不再需要的常加载区域

文件管理