特定于BZ的模型部件会影响其运作方式。包括生命值、部件层级结构、炮塔、履带等。本文不涵盖建模基础知识,例如如何导入/导出或修改几何形状,而是更倾向于作为已了解如何修改模型的人员的中级指南。有关导入/导出的内容,请参阅Blender指南。 轴心点/原点 请注意,这些术语在不同建模程序中往往有所不同,本文考虑了3ds Max和Blender这两款软件。在3ds Max中,它们被称为“轴心点(Pivot Points)”,而Blender通常将其称为“原点(Origins)”。本指南主要使用“轴心(Pivot)”或“轴心点(Pivot Point)”这一术语,但要知道将其应用于Blender时逻辑是相同的。根据所使用的程序,轴心点的外观也会略有不同。3ds Max 用 XYZ 坐标十字表示它们,而 Blender 则仅使用橙色圆点,但在启用【仅影响原点】选项时也能显示坐标十字。 3ds Max - 轴心点

Blender - ĺçš

总之,轴心点基本上是物体的“核心”。在建模软件中,轴心点与其名称的关联更为紧密,它是物体进行变换、旋转或缩放时所围绕的点。但这超出了本指南的范围,因为我们仅讨论它们在《战斗区域:战斗指挥官》中的相互作用。在许多情况下,《战斗区域:战斗指挥官》会查找轴心点,并将其视为物体的“中心”,无论物体的其他部分位于何处,即使轴心点被手动移动到其他位置也是如此。正如指南后面所解释的,这可以为我们所用。在大多数情况下,轴心点应保持在其所属部件的中心位置,但也有例外情况,我们将对此进行详细说明。方向:枢轴点的朝向可能因其用途而有所不同。大多数情况下,默认朝向即可满足需求,但对于某些功能,如建筑物上的灯光或终端,可能需要自定义方向。枢轴点的方向很容易确定,但有些违反直觉。最恰当的描述方式是在XYZ坐标指南中,枢轴点的【前方】指向Y轴的反方向。Z轴朝上,X轴朝右。以下是来自两个程序的示例。在这两个示例中,枢轴点都朝向【军刀】的炮管方向,即其前方。3ds Max

Blender

层级结构 模型的层级结构本质上是将模型的各个部分“组合”到一个中央部件上。这一点难以准确描述,实际展示比文字说明更直观。 【原版军刀战机层级结构 - 3ds Max】 【原版军刀战机层级结构 - Blender】


为简单起见,在层级结构中,位于上方的部件称为父部件,位于下方的则称为子部件。 根网格体BZCC要求任何模型都必须有一个单独的根网格体。这意味着模型中的每一个部件都必须位于一个主部件之下。请注意,在上述“军刀”的层级结构中,所有部件都归组在“main_body”(主体)部件之下。具有多个根网格体的模型容易出现诸如无法完全加载或在某些情况下崩溃等问题。当本指南在后续解释中提到“默认为根网格体”时,指的就是这一点。对于大多数模型,建议(但在大多数情况下并非强制要求)将“hp_dummyroot”(生命值虚拟根)作为根网格体。带有底板的建筑则将其底板作为根网格体。继承移动:在建模程序和游戏中,移动父物体时会带动其可能拥有的子物体一起移动。这适用于平移、旋转和缩放操作。由于我们主要关注游戏内交互,且游戏中无法对模型进行缩放,因此缩放不在讨论范围内。以下将通过几个示例来演示这一点。首先是修改“军刀”(Sabre)的火炮后坐力。recoilName1 = "turret_x"

注意,虽然在反冲名称中只指定了一个部件,但多个部件都会受到影响。炮塔_x部件下方的所有部件都会移动,这仅仅是因为炮塔_x是父部件。这也包括hp_eyepoint,这就是为什么开火时相机会抖动。模型视图

第二个示例是为模型添加旋转动画效果。在这个特定模型中,有两个hp_emits(生命值发射器)围绕着塔楼旋转。我没有手动为hp_emits制作圆周运动动画,而是在中间创建了一个自定义的hp_spin(生命值旋转器)部件,使其原地旋转。由于hp_spin是hp_emits的父级,所以发射器会继承旋转器的运动。
模型视图


名称附加词 本指南大部分内容涉及游戏中无法直接看到的部件。这是通过名称附加词实现的,即在模型部件的实际名称前后添加字符,以赋予其某种次要效果。以下是已知的名称附加词,其他均为自定义且无游戏内功能(例如“turret_x”中的“_x”)。 __2:双面。不常生效,但某些模型可被创建为部分部件仅显示一个可见“面”。 __c:碰撞。仅适用于建筑和炮塔。通常与__h结合使用以隐藏碰撞网格,这在碰撞部分有介绍。 __e:自发光。不受光照影响。 __g:发光。已过时。现在使用它没有意义,因为已被发光贴图取代。使用此功能实际上可能导致雾效照明出现错误。 hp_隐藏部件,或称为据点。在模型部件名称开头添加此前缀会使其不在游戏中渲染。如果你想隐藏模型的某个部分,仅在必要时使用此前缀。更好的做法是使用__h来隐藏物体,因为游戏会从左到右读取名称。例如建筑中的“terminal”部件,在炮塔、工厂、回收厂中,游戏会查找名为“terminal”的部件。“hp_terminal”是无效的,因为该部件以“h”开头,游戏会停止读取其余部分。但由于__h位于末尾,游戏会在检查附加部分之前成功读取“terminal”。 __h隐藏。不在游戏中渲染。标准生命值点 生命值点是《战斗区域:战斗指挥官》中用于指定模型某种特性的简单部件。实际上只有它们的枢轴点位置是重要的,这就是为什么通常使用三角形或立方体等极简几何体来制作它们。也可以用单个顶点来表示它们,在建模程序中基本不可见,但这可能会给想要修改单位的人带来更多困难。由于带有hp_前缀,它们在游戏中也不会渲染。 hp_com 适用对象:所有单位 限制:1个。使用hp_com或hp_com_1没有区别。多余的会被忽略。 重要性:如果不存在,默认使用根网格的枢轴点 模型上供准星锁定的部分。这也是敌方单位会攻击的点,这意味着将其保持在物体的几何结构内非常重要,如果模型较高,不要离地面太高。库存示例

无法识别内容,已删除。


模型视图

hp_eyepoint 适用对象:载具和炮塔 限制:1个。使用hp_eyepoint或hp_eyepoint_1没有区别。多余的将被忽略。 重要性:如果未设置,默认使用根网格的 pivot point(轴心点) 相机透视点。最佳位置是放置在舰船中心,不过有些自定义舰船会将其放在特殊位置。 库存示例


无法识别内容,已删除。


模型视图

hp_light_#【适用对象】:所有物体 【限制】:未知 【重要性】:不适用,纯可选 灯光通过“lightHard#”ODF参数添加。这些不是像hp_emit_#s那样的自定义HP,因此lightHard#s只能与hp_light_#s配合使用。默认情况下,可按L键开关灯光。默认情况下,标准“佩刀”战机有两个灯光HP,但通常只使用一个。 lightHard1 = "hp_light_1" lightName1 = "spotblue2" lightHard2 = "hp_light_2" lightName2 = "" 标准示例

模型视图

hp_smoke 适用对象:载具 限制:1个。使用hp_smoke或hp_smoke_1无区别,更多的将被忽略。若需添加更多烟雾源,应使用hp_moresmoke_#。 重要性:若未设置,默认使用根网格的轴心点 库存示例

模型视图

hp_moresmoke_#【适用对象:载具】 限制:1-7。注意必须从hp_moresmoke_2开始。hp_moresmoke_1无任何作用。实在不确定为何要这样设置,而不是直接使用hp_smoke_2、3等…… 重要性:不适用,纯属可选 用于添加舰船损伤烟雾/火焰效果的新来源。 示例

模型视图

武器生命值(weapon)# 适用对象:载具和炮塔 限制:1-5。 重要性:可选,但不设置的话单位将没有任何武器! 武器包含以下类别: hp_gun_# hp_cannon_# hp_rocket_# hp_mortar_# hp_special_#* hp_hand_# hp_pack_# *(hp_special不仅用于载具,还用于其他用途,见下一节) 武器生命值大多不言自明,但有几点需要注意。一艘舰船一次最多可使用5个武器生命值,且可以是1到5个的任意组合。hp_(weapon)_6及以上的设置会被忽略,即使实际总数不足6个。此外,尽管能够支持5种武器,但界面最多显示4个武器组,因此5种独立武器无法全部使用,至少其中一种必须与其他武器组合。注意标准型军刀战机配备1门加农炮、2挺机枪、1门迫击炮和1个特殊装备。模型视图

hp_special适用对象:回收器、工厂和建造器 限制:1个。与武器版本不同,这种情况下只能有1个hp_special。添加hp_special_2及以上无效。 重要性:若不存在,则默认使用hp_com 这些单位上的hp_special是建造效果的起始点。原版工厂没有hp_special,因此将在我认为应设置该点的位置展示默认工厂和一个经特殊修改的工厂示例。 原版示例

模组示例

模型视图

hp_vehicle(载具生成点) 适用对象:回收厂、工厂、训练中心 数量限制:1个 重要性:若未设置,则默认使用根网格体的轴心点 该属性决定载具从生产建筑生成时的位置。理论上也决定飞行员从训练中心生成的位置,但在原版游戏中此交互存在严重bug,无法正常工作。 hp_powerup(强化道具生成点) 适用对象:军械库 数量限制:1个 重要性:若未设置,则默认使用根网格体的轴心点 该属性决定强化道具从军械库生成时的位置。目前尚不明确为何回收厂、工厂、训练中心的“生成点”与军械库的“生成点”采用不同命名。 ODF交互/自定义生成点 与上述生成点不同,自定义生成点可任意命名。有一些ODF参数允许指定模型部件,该对象的名称无关紧要。即使在库存模型中,最常见的示例也是hp_emit_# 特殊部件名称 这些是模型的一部分,它们在建模编辑器中的名称决定了其独特功能。 [后续添加] 牵引器 履带 地形 驾驶舱 适用对象:载具 限制:1个。如果有多个名为驾驶舱的部件,游戏似乎只会选择层次结构中位置靠下的那个。根模型命名为驾驶舱时无效。 重要性:如果没有驾驶舱,狙击准星和飞行员出口将默认使用hp_eyepoint。 名为“驾驶舱”的部件具有一些功能。首先,驾驶舱的枢轴点是通过狙击镜观察单位时狙击准星的放置位置。其次,驾驶舱部件的几何结构是通过狙击镜观察时会显示友方/敌方/盟友/中立的发光部分。第三,驾驶舱的枢轴点是飞行员跳出载具时的 exit 位置。如果只想将狙击准星和飞行员 exit 位置设置在自定义位置,而无需更改视点,可以使用名为 cockpit__h 的部件。值得注意的是,默认情况下,原版军刀战机没有定义驾驶舱部件,这一问题在 ISDF 增强模型包中已得到修复。如果你希望充分利用驾驶舱部件的所有不同功能,那么独立移动轴心点而不影响基础几何形状就显得尤为重要。 库存示例 增强示例


模型视图

无法识别内容

模型视图

碰撞 适用对象:建筑、炮塔 限制数量:1 重要性:如果没有“碰撞”部件,或任何标记为__c的部件,模型将自动生成自身碰撞。 这是较旧的碰撞实现方法。如果物体只需要1个碰撞部件,这种方法效果良好,但对于多个碰撞部件,则需使用带有__c的部件。有关更多内容,请参见碰撞部分。 flame_#__h 适用对象:载具 限制数量:未知 重要性:不适用,纯可选 火焰部件是简单的对象,用于指定引擎火焰效果的生成位置。该部件有两种效果:怠速效果和推进效果。推进效果仅在飞船按下前进键时触发,其他方向不适用。火焰通常以非常简单的2D网格形式实现。将3D对象命名为flame_#会导致游戏崩溃。 库存示例 - 闲置 库存示例 - 前进


模型视图

从技术角度来说,【__h】修饰符并非必需,但如果没有它,火焰的原始几何图形也会显示出来,从而产生难看的裁剪效果。轴心点还决定了小型闪光精灵的位置,并且似乎对火焰本身也有轻微影响。 错误示例 - 闲置状态 错误示例 - 前进状态


模型视图

火焰的颜色由建模程序决定。它使用一种非常基础的纹理,该纹理仅包含一个已定义的基色。原版军刀战机使用浅蓝色。3ds Max Blender


颜色改变

火焰部件的枢轴点旋转决定了特效的产生方向,特效将从后方方向出现。模型视图

终端 适用建筑:回收站/工厂、炮塔、指挥地堡 数量限制:1个 重要性:无,纯可选 终端的功能因所附着的建筑而异。在生产建筑上,可访问建造菜单以更换武器;在炮塔上,可控制炮塔;在指挥地堡上,可切换至卫星视图。操作生产建筑和指挥地堡的终端时,飞行员会停留在使用终端的位置;但操作炮塔终端时,飞行员会消失,直至退出炮塔。这可能是因为游戏中炮塔在技术上被视为单位,使用终端相当于玩家“驾驶”它们,就像进入飞船一样。 这也是枢轴点重要性的另一个体现。枢轴点决定玩家交互准星的居中位置,以默认的中继碉堡为例,其准星随机居中于屏幕中央,这可能是设计时未考虑到的问题。默认示例

模型视图

枢轴点的真正重要性体现在其旋转功能上。终端只能从枢轴点的【正面】进行交互,这一点在指南的第一章中有示例说明。 另外需要注意的是,名为terminal__h的部件也可以正常使用。对于在自定义位置添加终端而言,这可能是一种比手动调整可见终端枢轴点更便捷的方法。 示例

模型视图

碰撞 《战地2100:战斗指挥官》有两种碰撞类型。炮弹碰撞用于武器/子弹与物体的碰撞,物理碰撞用于载具。 炮塔 炮塔是 GunTower、突击坦克和悬浮突击单位在环顾四周时使用的装置。它们在ODF文件中指定,这是将Sabre改造为突击悬浮单位的最基本示例。创建此单位时未对模型进行任何改动。 turretCount = 2 turretName1 = "turret_y" turretName2 = "turret_x" 示例

请注意,要将标准悬浮单位完全转换为如上所示的带炮塔悬浮突击单位,还必须设置其他ODF属性。turretName1用于控制水平环视的轴,turretName2用于控制上下俯仰的轴。有些模型有3个炮塔,并将观察点指定为第三个,但我实际上不知道这有什么作用。飞行员也是一个独立的类别,最多使用6个炮塔,一旦弄清楚,这将需要单独的完整章节。只需知道,使用上述示例可以生成一个功能正常的带炮塔单位。炮塔部件的名称无关紧要,但人们通常将它们指定为turret_x和_y。这让我有点困惑,因为通常turret_y被指定为水平炮塔,而_x被指定为垂直炮塔,但在我看来这两者应该互换才对。我通常会将它们命名为turret_1和turret_2,这样更简单。 炮塔围绕其枢轴点旋转。前一个示例的模型视图可以在本指南的第一张图片中看到,其中显示了枢轴点。 不良示例

模型视图

这意味着实际上有两种方法可以让炮塔围绕特定点旋转。上面看到的示例移动了turret_y部件的枢轴点,但也可以创建一个隐藏部件来充当炮塔。让我们以自定义模型为例。 在这种情况下,我们希望turret_y围绕这个用蓝色标记的精确点旋转。

但如你所见,炮塔Y轴的轴心位置并不在其正常旋转所需的位置上。我们可以通过移动轴心来解决这个问题……

或者通过创建一个用作炮塔的隐藏部件。

两种方法均可正常使用,但如果采用隐藏部件法,请务必确认层级结构正确,确保隐藏炮塔部件应影响的所有内容都已正确与其成组。成组在turret_y部件下的所有内容将水平旋转,但在上下视角移动时保持位置不变。这就是为什么dummyProp(原旧炮塔部件)仅成组在turret_y下,而非同时成组在两者下,因为我们不希望该部件上下移动。

请注意,在ODF中设置炮塔名称时,不要在turretName中包含“__h”。我倾向于使用枢轴方法,因为模型中的部件越少,事情就会稍微简单一些,但这实际上取决于个人偏好。 无论如何,本指南到此就差不多结束了。随着我学到更多知识,我会回来更新它,但现在先告别了。





换一换 






















