LogoArcartX Doc

模型

ArcartX模型使用指南

若想获得自由,你必须愿意成为自己生命的主人

模型系统

ArcartX提供了多种多样的模型功能:实体模型、物品模型、方块模型、箭矢模型,在此之上,还提供了自定义光源和骨骼碰撞的功能。

一、模型导入

我们使用模型的第一步,是将模型导入到我们的配置中。模型文件导入的配置位于ArcartX根目录下的model/resource目录下,你可以创建多个导入模型配置。

配置项名将作为你的模型ID,这个ID会在后续很多地方用到,请记住它且不要重复。

example: 
  model: "[location]model/1.geo.json"  # 模型文件路径
  animation: "[location]model/1.animation.json" # 动作文件路径
  texture: "[location]model/1.png" # 贴图文件路径
  glow_texture: "" # 发光贴图路径【没有留空,别删了】
  lod: false # 是否开启lod优化方案

二、实体模型

  • 实体模型的配置非常简单,除配置方式以外,你还可以通过API或者MM语句的方式设置实体模型。
  • 以配置方式,可以用名称匹配的方式来渲染实体模型,配置位于ArcartX根目录下的model/named_entity目录中,你可以创建多个实体模型配置

生物碰撞体积不要设为0,否则会导致实体不可见。匹配名称时请不要包含颜色代码。

example:
  matchName: "boss" # 匹配的生物名
  modelID: "e2" # 模型ID
  width: 1 # 生物碰撞体积尺寸
  height: 1 # 高度
  scale: 1 # 模型缩放比例

三、物品模型/方块模型

大型模型的渲染消耗较高。如果是需要长期手持的物品模型,会在HUD和手持位置同时渲染两次。建议为此类物品设置2D贴图,在UI模式下会优先使用2D图标以减少性能消耗。

  • 方块模型和物品模型的配置有点长 但是非常易于理解
  • 我们可以通过指令 /a item setModel <modelID> 来设置物品模型 如果手上是一个"头颅方块"那么将它放置到地面上就会显示设置的模型
  • 方块和物品模型的配置位于ArcartX根目录下的model/item目录中,你可以创建多个物品/方块模型和物品模型的配置
example:
  # 模型ID'
  id: "e2"
  # 如果作为方块渲染该模型,该模型的可见区域宽度
  # 注意这个并非修改方块尺寸,而是视锥体可见范围
  width: 5
  # 如果作为方块渲染该模型,该模型的可见区域高度
  # 注意这个并非修改方块尺寸,而是视锥体可见范围
  height: 5
  # 如果作为方块模型,该模型的光照等级 取值范围 0-15
  light: 15
  # 不同场景下模型渲染偏移设置
  view:
    firstperson_righthand: # 第一人称右手
      scale: # 缩放
        x: 1.0
        y: 1.0
        z: 1.0
      rotation: # 旋转
        x: 0.0
        y: 0.0
        z: 0.0
      translation: # 平移
        x: 0.0
        y: 0.0
        z: 0.0
    thirdperson_lefthand: # 第一人称左手
      scale:
        x: 1.0
        y: 1.0
        z: 1.0
      rotation:
        x: 0.0
        y: 0.0
        z: 0.0
      translation:
        x: 0.0
        y: 0.0
        z: 0.0
    firstperson_lefthand: # 第三人称左手
      scale:
        x: 1.0
        y: 1.0
        z: 1.0
      rotation:
        x: 0.0
        y: 0.0
        z: 0.0
      translation:
        x: 0.0
        y: 0.0
        z: 0.0
    thirdperson_righthand: # 第三人称右手
      scale:
        x: 1.0
        y: 1.0
        z: 1.0
      rotation:
        x: 0.0
        y: 0.0
        z: 0.0
      translation:
        x: 0.0
        y: 0.0
        z: 0.0
    gui: # 在UI中
      scale:
        x: 1.0
        y: 1.0
        z: 1.0
      rotation:
        x: 0.0
        y: 0.0
        z: 0.0
      translation:
        x: 0.0
        y: 0.0
        z: 0.0
    ground: # 掉落到地上
      scale:
        x: 1.0
        y: 1.0
        z: 1.0
      rotation:
        x: 0.0
        y: 0.0
        z: 0.0
      translation:
        x: 0.0
        y: 0.0
        z: 0.0
    block: # 作为方块渲染
      scale:
        x: 5
        y: 5
        z: 5
      rotation:
        x: 0.0
        y: 0.0
        z: 0.0
      translation:
        x: 0.0
        y: 0.0
        z: 0.0

四、模型LOD优化

  • LOD会根据帧率状态自动调整模型精度,以平衡性能和视觉效果。
  • 熟悉游戏优化的朋友一定听过LOD这个设定,它是根据距离、帧率等因素调节模型精度。ArcartX也具有了类似的功能。
  • ArcartX会在游戏过程中查询帧率状态,如果帧率由于模型过多导致帧率严重下滑,会根据策略进行调整
  • 如果您导入模型的过程中,开启了LOD,那么以下内容会生效:

优化等级说明:

  • 0级: 帧率稳定,原样渲染
  • 1级: 剔除0.5像素以下的面
  • 2级: 剔除0.6像素以下的面
  • 3级: 剔除所有底面和0.9像素以下的面
  • 4级: 剔除底面、右面和0.9像素以下的面
  • 看见上面这些,你可能觉得:我模型被掏空了岂不是和bug一样?其实实际测试一般到达3级就停了,而剔除底面并不会太影响模型外观,除非站在脚底下看
  • 不过,也无需太担心,ArcartX即使不用LOD也有对模型的优化,你可以在一些关键模型上关闭lod,在非关键而且可能渲染好几个的模型打开lod
  • 对于一些又可能多但是又要想开启LOD但是又有一些帧率要求的,你可以开启模型lod并且将不想被剔除的骨骼名加上_no_lod尾缀

五、模型骨骼碰撞

  • ArcartX提供了对模型骨骼的碰撞事件,也就是俗称的"弱点击破"该碰撞必须在生物原本碰撞箱之内才会生效,此外我们需要对需要检测碰撞的骨骼的名称加上尾缀_hitbox
  • 当然,这个功能需要你有个技术或者会写代码才能用,在玩家攻击实体时,如果有骨骼碰撞,服务端会发起骨骼碰撞事件。

六、MythicMobs支持

ArcartX提供了一系列MythicMobs语句支持:

# 设置实体模型
# m:模型ID s:缩放大小(默认1)
model{m=model; s=1}
# 播放动画
# n:动作名 t:过渡时长(tick) s:播放速度 k:持续时间(-1为播放一次)
animation{n=idle;t=5;s=1;k=-1}
# 隐藏骨骼
# b:骨骼名 h:开关隐藏
hideBone{b=head;h=true}
# 设置碰撞体积
# w:宽度 h:高度
boundingBox{w=1;h=1}
# 设置动作替换
# s:状态 a:状态指向的动作
defaultState{s=idle;a=idle2}
# 播放3D音效
# s:音频文件路径 c:音频类型 d:范围 p:音调 k:持续时间
sound3d{s=[location]1.ogg;c=master;d=16;p=1;k=2000}

看到这你可能想说:我用了xxx,他和你的词条内容重复了,怎么办! 没关系,ArcartX提供了自定义字段,你可以在ArcartX的根目录下找到mythicmobs/key_words.yml 来修改词条名称(需要重启才会生效)

On this page