结构模型
结构模型
基岩模型似乎只能用于渲染,但YWZJ创新性地使用它来描述逻辑结构,服务端也因此需要加载存放于data/tutorial/models/bedrock/vehicle/载具名.structure.json的结构模型文件,其以载具配置的structure_model参数体现
"structure_model": "ywzj_vehicle:vehicle/ztz99a"结构模型的具象化是OBB,其广泛用于物理碰撞、精细命中、方位逻辑表达等场景
提示
考虑计算复杂度,载具目前仅使用车体结构中最大的OBB来表现整体运动的物理效果
关于OBB
方向包围盒OBB(Oriented Bounding Box)是一种任意朝向的立方体状数学描述
基岩模型中的每一个块都可以视作一个OBB。在载具中,对于一个OBB,其三维可以描述一个部件的碰撞体积,其枢轴可以描述部件的方向机,其上一点可以描述成座位、镜头等随动点

OBB表现的车体、炮塔、炮管等
提示
在YWZJ中,许多配置的自动计算都依赖于OBB,如玩家的乘坐位置、武器的炮口位置等
开发工具
文档撰写的目前,大部分载具模组的OBB配置往往基于代码硬编码或特殊格式,开发非常不便。YWZJ因使用基岩模型描述OBB,Blockbench下即可自由绘制OBB


Blockbench中的载具模型与结构模型
分组与枢轴
与渲染用的渲染模型类似,结构模型也需要良好分组,并且枢轴位置关系与渲染模型一致,才可保证在复杂旋转时OBB的逻辑方向与载具的视觉方向一致
提示
结构模型中的组名有专用含义,如vehicle_body专属于车体,而其他组名与前文中载具part配置中的structure_bone参数对应,用于表达一个载具部件,如turret代表炮塔

在本例中,显然,炮塔自身的炮管、炮塔的同轴机枪、高射机枪、烟雾弹发射器都是附着在炮塔上的,因此结构模型中,它们对应的部件OBB也分属于炮塔OBB的组下
若有更复杂的部件运动关系(比如多炮塔神教),显然需要更深层嵌套的OBB组来描述它们
提示
武器单元是特殊的载具部件,其炮管与座圈分属于两个枢轴,因此需两个组来描述,其中约定名为部件名_barrel的组属于炮管组,如turret_barrel就是主炮塔的炮管组

你可以直接在渲染模型上拖拽拉伸绘制结构模型
枢轴对齐是本章稍显费力的环节,因为基岩模型中,枢轴是嵌套递归计算绝对位置的,所以渲染模型中某结构的枢轴坐标往往不能直接抄给结构模型。
提示
你可以将渲染模型的组逐级解析到根层级,再复制它的枢轴值给结构模型


炮塔的枢轴在渲染模型与结构模型的位置保持一致

解析渲染模型的分组
