# 适用于Blender的Ballance制图手册
yyc12345入吧9周年&退吧版本
## 写在前面
### 作者想说的
我自认为,Ballance已经是穷途末路,强弩之末了,无论人们再怎么去拯救,它可能也无力回天了。我打开了使用Blender制图的门,但是大家还是喜欢去3ds Max家,使用那些陈旧,专有的东西,捡了西瓜丢了芝麻。
从各个地方来看,Ballance都在被吞噬,即使现在Ballance Mod Loader足够出色,有一些颇有技术力的人仍然在开拓新世界,但一个腐朽的架构已经无法支撑其上层的发展。因此我打算尽我最后的力量,把Blender制图的一切介绍给大家。也许我能够把它写得很棒,但,这一切值得么?
### 此教程面向的人
* 有一定制图技术的人(例如已经尝试过Virtools制图和3ds Max制图的人)
* 会玩一点点Virtools的人,但是还不知道怎么制图
* 具有**自主学习能力**的制图新手
### 此教程不适合的人
* 我要学制图,那你能帮帮我嘛
* 怎么没有隔壁Ballex那样的制图器?
* 这东西怎么那么复杂
* 这好难啊
* 我看不懂英语,没有汉化版本么
* 怎么连3ds Max里的xx功能都没有,太垃圾了
## 目录
1. [写在前面](#jump-1)
1. [目录](#jump-2)
1. [在开始制图前](#jump-3)
1. [安装插件](#jump-4)
1. [关卡基本构造](#jump-5)
1. [Blender - 添加路面](#jump-6)
1. [Blender - 添加钢轨](#jump-7)
1. [Blender - 添加机关](#jump-8)
1. [Blender - 杂项](#jump-9)
1. [Virtools - 基本操作](#jump-10)
1. [Virtools - 脚本](#jump-11)
1. [一些建模的经验公式](#jump-12)
1. [为什么Virtools里要这么做](#jump-13)
1. [过时软件介绍](#jump-14)
1. [最新勘误](#jump-15)
1. [结语](#jump-16)
## 在开始制图前
### 基本概念
在进行制图前,我们需要对一些基本概念进行了解。首先,Ballance是以Virtools 2.1为基础进行制作的,而Virtools是一个引擎,不是一个模型制作器,这意味:
* 如果想要制作Ballance可以读取的关卡,最后的步骤一定是用Virtools处理成Ballance可接受的格式。
* 没法用Virtools制作新的模型。如果不使用任何其他的软件,那么只能利用原版关卡的一些结构来制作新的关卡。
因此,我们需要一个3D建模软件,来为我们的关卡创造全新的模型。然后再将我们创建好的模型导入到Virtools中来制作关卡。然而,Virtools 2.1是一个非常古老的版本,现在根本没有它的可用版本(我们已经咨询过Virtools的公司,Dassault),这意味着:
* 我们只用利用更新的Virtools版本来进行地图制作,Virtools 2.5, 3.0, 3.5。Virtools 4.0及以后的版本不可以用于地图制作。
* 可以导入到Virtools中的模型格式十分有限,且体验也不是十分好,经常会出现缺失东西的情况。
* 进一步限制了可用的3D建模软件,因为我们需要将模型导入Virtools,如果不能导入,则此建模软件就不能使用。
目前,大家都在使用一个Max2Virtools的3ds Max插件来进行制作,这个插件可以将3D物体直接导出为Virtools原生的格式。Max2Virtools是发行Virtools的公司,Dassault所制作的用于辅助Virtools使用的3ds Max插件,因为可以直接安装在3ds Max上,而且可以直接导出Virtools的默认文档格式,因而在制图初期受到广大制作者青睐,并在如今仍然在使用。以上,就是你经常会在Ballance制图中听到的一些概念。
### 为什么选择Blender
3ds Max的价格令一般人望而却步(最新版价格为1500美元/年,Autodesk也采用了“软件即服务”的销售方式)。但是,Blender是一款不需要用户付费就可以合法使用、而且和3ds Max一样强大的建模软件,但一直被忽略了。通过将Blender变成可以用于制图的软件,可以彻底甩掉任何可能的法律责任。虽然我们已经非法使用了Virtools,3ds Max可以用于制图的版本也有破解器可以用,但是与其背负一个沉重的法律包袱,不如去选择一个没有法律包袱的东西。相信它,Blender并不比3ds Max差,在某些方面来说,它甚至更直观,尤其是对于Ballance这种非常规则的模型的建立。如果你曾被Ballance的3ds Max制图视频中如同咒语和叠罗汉一般的修改器指令感到恐惧,并希望寻求一个替代产品的话,Blender将是你不二的选择。通过简单认识到计算机对于三维图形的表达形式(可以简单理解为三角面),理论上你就可以在Blender里捏出你想要的任何物体。
此外,Blender的插件系统也非常地亲近用户,选择了Python作为插件语言,而不是像3ds Max那样还需要用C++配上专用的库才能编写插件,这使得插件的迭代可以很快,并且高级用户还可以自己定义方便自己操作的插件。来自开放世界的力量将会通过网络来指导你攻破操作软件时的每一个困惑之处。但需要注意,这个教程并不会教授你如何对Blender进行基本操作,只会在这里列出一些常用操作的方法和制作Ballance关卡所需要的技术,其他技术,还需要你自行参悟。
### Blender制图的运作
正如基本概念中所述,我们使用Blender作为3D建模软件,在最后处理的部分使用Virtools进行,期间,两者的文件交换由BMX文件(于下文进行叙述)和2个插件来承担,它们分别是:
* BallanceBlenderHelper(也称BallanceBlenderPlugin)
* BallanceVirtoolsHelper(也称BallanceVirtoolsPlugin)
#### BallanceBlenderHelper
BallanceBlenderHelper,正如其名,它是一个Blender插件,它主要的功能是:
* 导入导出BMX文件
* 快速插入一些Ballance中的常见机关,路面和钢轨
* 提供一些Blender不提供,隐藏比较深,或更加贴合Ballance制图的操作
我们在Blender中主要的操作当然是建模,建立属于我们自己的关卡模型,而不是被动利用原有关卡的结构。当然,制图技术发展至今,我们也采取了更加方便的模式,也就是3ds Max制图经常采用的模式:在3D制图软件中一次性做好,导出到Virtools,然后做一些小处理(仅针对普通地图,对于需要依靠大量脚本操作的地图,导出后还需要在Virtools里做很多工作)。就可以完成地图的制作。
#### BallanceVirtoolsHelper
BallanceVirtoolsHelper是一个可以用于Virtools 3.5的插件,当然,也可以重新编译让它可以用于其他版本。它具有以下功能:
* 导入导出BMX文件
* 归组,材质和常见错误的修复
* 一些便捷小工具(例如切换编码等)
在Virtools中需要的操作并不多,尤其是在地图测试的时候,只有在地图最终发布时才需要借由chirs241097发明的地图内置脚本技术插入脚本执行。其余大多数情况只需要导入,然后让插件自动处理一些事情即可。这些部分的操作将会在后文介绍,此处仅仅是介绍一下。
### BMX文件
通常来说,3D建模软件所拥有的功能,以及其存档文件中存储的数据,其内容远超Ballance所需,过分的解读这些文件费时费力,也不容易进行适配。相反,一些通用文件交换格式支持的特性太少,一些重要的Ballance地图数据无法被准确储存。因此,一个为了Ballance地图制作的通用的,特化的文件格式就此产生,也就是BMX文件。它几乎包括了所有你会在Ballance地图编辑中会用到内容,而不包含任何多余的内容。
此外,BMX文件使用一个标准描述文档来描述自身的格式,其独立于所有格式之外,是Ballance团体自主可控的,我们可以根据这个独立的标准,为各个3D建模软件编写导入导出插件,便可以让Ballance地图可以被任何3D软件所接受。达到了以一个文件格式,适配所有3D软件的目标。举例,如果有人写出了可以在3ds Max中导入导出BMX文件的插件,那么Ballance地图可以在3ds Max,Virtools和Blender之间畅通无阻地进行转化。
然而就目前而言,BMX只能被Virtools和Blender所接受,其对应的导入导出插件在上文已叙述。如果你对编程很感兴趣,并且愿意将BMX文件带到其它的平台上,可以尝试自己编写对应的插件,来让BMX可以做到更多。
## 安装插件
## 关卡基本构造
在最初的设计上,Ballance本身并不支持用户自定义关卡,我们能够玩上我们的自定义关卡,是因为我们摸索出了游戏关卡的结构,然后通过遵守和仿制这个结构,然后替换游戏原本的关卡文件,让游戏误以为它在读取原作者的关卡。正因为如此,我们在制作一个关卡的时候,有一些必须要遵守的东西,例如设计规则等,如果我们不遵守,那么游戏很大概率会拒绝加载。
### 出生点,盘点,重生点与终点
出生点(四个火焰)和终点(飞船)是一个关卡必须的两个元素。作用于第一小节的重生点也是必须的,通常情况下和出生点放在一起。此外,根据之前制图教程的建议,盘点(两个火焰)也至少需要有1个,即至少需要两个小节,尽管单小节的地图文件可以被游戏接受并加载运行,但是一些人说这样做会有一些问题。
需要注意的是,终点就是飞船本身。而出生点,盘点,仅仅是那几团火和通过一小节的判定点,重生点也仅仅是球重生的位置,其与下方可以与球进行碰撞的不动物体,例如路面等没有任何关系,这点与Ballex不同,也是很多新制图人会搞混的东西。此外,出生点,盘点,重生点彼此分离,也就意味着,小节的通过判定点和重生点可以不一样(尽管它们基本上都在一起,事实上也理应在一起),这在一些地图(主要是早期地图,也有比较近代的地图)中被用于远距离传送,比如2010年代的开头。
### 不动物体
[路面](https://ballance.jxpxxzj.cn/wiki/%E8%B7%AF%E9%9D%A2),[木板](https://ballance.jxpxxzj.cn/wiki/%E6%9C%A8%E6%9D%BF)和[钢轨](https://ballance.jxpxxzj.cn/wiki/%E9%92%A2%E8%BD%A8),在游戏中被设定为不可动物体。这些不可动物体并不是必须的,你也可以创建一个没有任何不可动物体的关卡。
### 机关
[机关](https://ballance.jxpxxzj.cn/wiki/%E6%9C%BA%E5%85%B3)是指Ballance中出现的各类道具,它们可以和玩家球产生互动,在影响玩家球的同时,玩家球也可以影响机关。同样,机关也不是必须的。
### 装饰
[装饰](https://ballance.jxpxxzj.cn/wiki/%E8%A3%85%E9%A5%B0)不会与玩家球进行任何物理运算,如果使用一些作弊模式,那么球将会表现为直接穿过。通常来说,灯柱等都是如此,当然也有一些地图将灯柱布置在道路上并将其设定为不动物体。装饰也不是必须的,但通常而言,装饰可以让地图更美观,以及不会显得空荡,一般是制图最后修缮时才会涉及到装饰的添加。
### Stopper
[Stopper](https://ballance.jxpxxzj.cn/wiki/Stopper/zh)通常指T板,推板附近与道路连接的小垫片。这些垫片只能与机关计算物理碰撞,而不会与玩家计算物理碰撞,如果玩家球触碰,其效果和装饰一样。
### 互相转换
出生点,盘点,重生点,终点,以及机关,这些都是游戏内置的东西,不建议进行替换。而不动物体,Stopper,机关这三者,可以被视为一个物体是否具有物理碰撞的3种状态,可以根据需要,通过归组的手法(后文会介绍),在这三者之间来回转换。举例,钢轨可以被设定为Stopper,然后只有道具球才可以行走,灯柱可以被设定为不动物体,让它阻碍玩家的通行。这三者需要结合起来进行记忆。
## Blender - 添加路面
路面是Ballance中最为重要的一种物体,您可以在大多数关卡中见到它。本章节中的路面仅指代普通的路面,对于类似于[Modul_15](https://ballance.jxpxxzj.cn/wiki/Modul_15)以及出生点盘点这种特殊路面,请参考添加机关章节。
路面的制作方法自自制地图创始以来就一直在被所有制图者进行研究,目前主要有3种流派:用原版路面或原版1x1路面做微分法的拼接法;使用外部工具(BMMaker或MapEditor)进行预先绘制后导出为脚本,批量生成;以及直接建模的方法。三种方法中拼接法最简单,但限制最多,限制制图者的创造力。而外部工具由于其实现特性,会出现生成时卡机,制作后冗余顶点过多,只能制作直来直去的路面的缺陷。只有直接建模法是Ballance路面制作的最终出路,是最自由的,最能发挥制图者创造天赋的方法,也是我们需要关注和介绍的方法。而直接建模法最重要的两点,根据我的经验则是:生成对应形状;以及贴图匹配。目前在Blender中对于路面建模的操作还是比较丰富的,在BallanceBlenderHelper的加持下,我们可以通过BallanceBlenderHelper内的BMERevenge模块批量生成较为规整的路块,这些路块具有自定义程度高以及几乎没有冗余顶点的特点。同时BallanceBlenderHelper也支持对一部分直接建模物体进行快速材质贴图的方法。
### 使用BMERevenge添加路面
BMERevenge是内置于BallanceBlenderHelper的一个全新的路面生成模块,是Ballance Map Editor的上位替代。您可以在`添加 - Floors`中立即添加BMERevenge所提供的任意一种路面。其中Basic floors是指构成路面的最基本模块,包括三种变球器,平凹转换路面,以及平路面和凹路面的最小单元。而Derived floor则是一系列基于Basic floor组合而成的组合路面,包括路面转角,路面,以及平台等多种非常便捷的路面类型。通常来说只需要根据自身需要来选择合适的路面点击,设定参数,点击确定即可生成。
下图展示了添加路面的参数设置页面,以及不同参数的生成对比。
Basic param部分是基础参数,类型(Type)表明了生成路面的类型,如果您在添加菜单中点错了按钮,也可以在这里切换成正确的路面。高度指定了生成的路面的高度,小于1的数值可以生成类似于[魔虬](https://ballance.jxpxxzj.cn/wiki/%E9%AD%94%E8%99%AC)中的薄路面。而大于1的数值则可以生成类似[魔脓空间站](https://ballance.jxpxxzj.cn/wiki/%E9%AD%94%E8%84%93%E7%A9%BA%E9%97%B4%E7%AB%99)中,具有非常高的侧面的路面。
扩展(Expand)部分是指定了这个路面的延展方向。Expand mode指明了这个路面的延展模式。Freedom表示这个路面可以向2个方向自由延展,因此会具有两个延展数值D1和D2;Column则表示只能向单一方向延展,只有一个延展数值D1;而Static则表示这个物体只有这样一种大小,不能做任何更改,因此也不会有任何延展长度字段。Unit size指定的D1和D2的数值基于的单位是哪一种,Small表示一个单位长度是2.5,而Large则表示单位长度是5(Ballance中1x1路块的大小是5x5)。Expand mode下面的图形则指示了D1和D2分别是哪一个方向。
Face部分是指示上下顶面的使用情况,而Side部分指示的是路面的四个表面的使用情况,下方的图片表明了4个方向的真实位置。在取消勾选后,对应面将不会生成。通常来说,对于任意一种路面类型,这部分的默认值适合大多数路面的生成,除非您确实需要或不需要某个面,否则一般不需要修改这个部分。
![](./imgs/zh-cn/bmerevenge_example.png)
!!! info "Ballance Map Editor"
Ballance Map Editor是一款老旧的,基于Tilemap的Ballance路面创造软件,我们已经不建议您使用这个软件,因为其创建了大量无用顶点。相比较而言,BMERevenge完美地解决了这个问题。如果您仍然需要使用这个软件,或想了解这个软件,请参见过时软件介绍章节。
## Blender - 添加钢轨
### 添加钢轨材质
在完成钢轨的构建后,我们需要给钢轨添加对应的材质以及UV才能让钢轨具有正确的颜色。我们可以先选定钢轨,然后通过`Ballance 3D - Create Rail UV`来为钢轨添加材质和UV。对话框中的材质(Material)选择钢轨材质即可。而对于类型(Type),则有3种类型,分别是点(Point),均衡(Uniform)和缩放(Scale)。这三种模式对应了程序对UV的不同处理方式。由于Ballance对于游戏中的钢轨的视觉效果具有特殊的处理,所以选择何种类型可能并不会对最后钢轨的呈现有什么影响。但是我们仍然建议您选择视觉上观看最好的模式,您可以反复选择参数来观察结果以决定选择何种类型。通常来说,一个好的钢轨,在视觉上看来它的花纹要分布均匀,但这也并非唯一标准。下面将会对这3中不同类型的具体处理方法进行讲解。
下图展示了三种类型的工作方式。首先讲解均衡类型。均衡类型会试图按照一个轴向(Projection axis),将物体套在整张钢轨贴图中并进行贴图,视觉上来说就像是将3D的钢轨按一个轴向拍扁到钢轨贴图的平面上,而钢轨中的网格在这个平面上的映射就成为了它对应的UV。而点类型和缩放类型则是均衡类型的扩展。缩放类型允许用户提供一个缩放值(Scale),这个缩放值控制了这张钢轨贴图的缩放,因此可以被看作原先的钢轨贴图变成了钢轨贴图的一部分(缩放大于1),又或者变成了多张钢轨贴图首尾相接(缩放小于1)。点类型则是将整个三维的钢轨映射到了一个点,因此也可看作特殊的缩放类型,其缩放值为0。
![](./imgs/zh-cn/rail_uv_type.png)
!!! info "钢轨材质的来源"
如果您选择使用地图模板创建您的地图,那么材质可以直接从文档中选中,因为文档中已经具有钢轨的材质了。而如果您选择从一个空白文件开始创建地图,那么您可能要先创建一个材质,然后再回到此处为钢轨添加材质和UV。
!!! info "类型的实际情况"
缩放设置的轴向实际上并不能如此简单的解释,它实际上是相对于物体的局部坐标系的XYZ,但此处这么理解也并没有什么问题,因为大部分钢轨不涉及较为复杂的旋转等操作,因此其局部坐标系与全局坐标系是统一的。
点类型实际上与缩放设置为0的缩放类型在表现上其实并不相同。具体的实现可以通过阅读代码了解。但对于初学者来说,这么理解就已经足够了。
## Blender - 添加机关
## Blender - 杂项
## Virtools - 基本操作
## Virtools - 脚本
## 一些建模的经验公式
## 为什么Virtools里要这么做
## 过时软件介绍
## 最新勘误
历代制图过程都是一个循序渐进的过程,在这个过程中,难免会有因为技术限制或错误理解而导致的制图规则上的错误,历代制图手册都有对上一版本的勘误,这里也仿照着之前的版本,根据最新的发现,来对之前的一些制图上的理解进行勘误。
### 影子坐标
## 结语
现在,踏入制图之人,教程已告终,但你仍未越过最后的门扉。若你理解制图的意义,就上前来,来做图,做出一张真正的地图,向大家证明你是最好的制图人。然后,就去开创属于自己的制图旅程吧。我的记忆已经磨损了太多,但我总还记得,我也玩过Ballance。