From b8d6ce30bc42d2d6e713798b5fd4257f1ab7302a Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Tue, 1 Mar 2022 14:49:14 +0800 Subject: [PATCH] first commit --- .gitignore | 3 + gen.py | 23 +++++++ imgs/.gitkeep | 0 main.css | 48 +++++++++++++ main.md | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 261 insertions(+) create mode 100644 .gitignore create mode 100644 gen.py create mode 100644 imgs/.gitkeep create mode 100644 main.css create mode 100644 main.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2fafb8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# ignore generated file + +main.html \ No newline at end of file diff --git a/gen.py b/gen.py new file mode 100644 index 0000000..c600f20 --- /dev/null +++ b/gen.py @@ -0,0 +1,23 @@ +import markdown + +with open('main.md', 'r', encoding='utf-8') as fr: + with open('main.html', 'w', encoding='utf-8') as fw: + fw.write('\ +\ +\ +\ +\ +\ +\ +') + fw.write(markdown.markdown( + fr.read(), + output_format='html5', + extensions = [ + 'markdown.extensions.admonition', + 'markdown.extensions.tables' + ])) + fw.write('\ +') + +print('OK!') \ No newline at end of file diff --git a/imgs/.gitkeep b/imgs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/main.css b/main.css new file mode 100644 index 0000000..bd30cb9 --- /dev/null +++ b/main.css @@ -0,0 +1,48 @@ +* { + font-family: Whitney, Roboto, "Open Sans", "Segoe UI", sans-serif; + word-wrap: break-word; +} + +img { + max-width: 100%; +} + +body { + padding: 24px 12px; + max-width: 700px; + margin: auto; +} + +h2 { + border-bottom: 1px solid black; +} + +div.admonition { + padding-left: 1rem; + padding-right: 1rem; + padding-bottom: 1rem; + + border-radius: .1rem; + box-shadow: 0 0.2rem 0.5rem rgba(0,0,0,.05),0 0 0.05rem rgba(0,0,0,.1); +} +p.admonition-title { + padding-bottom: 1rem; + padding-top: 1rem; + + margin-left: -1rem; + margin-right: -1rem; + padding-left: 1rem; + padding-right: 1rem; + + font-weight: bold; +} + +div.admonition.info > p.admonition-title { + background-color: #e5f8fb; +} +div.admonition.warning > p.admonition-title { + background-color: #fff4e5; +} +div.admonition.error > p.admonition-title { + background-color: #ffe7ec; +} diff --git a/main.md b/main.md new file mode 100644 index 0000000..bf83a1c --- /dev/null +++ b/main.md @@ -0,0 +1,187 @@ +# 适用于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也支持对一部分直接建模物体进行快速材质贴图的方法。 + +!!! info "且试身手" + 你应该练习一下添加路面的东西。比如自己创建多样的路面。又比如创建属于自己的路面。 + +!!! warning "且试身手" + 你应该练习一下添加路面的东西。比如自己创建多样的路面。又比如创建属于自己的路面。 + +!!! error "且试身手" + 你应该练习一下添加路面的东西。比如自己创建多样的路面。又比如创建属于自己的路面。 + + +## Blender - 添加钢轨 + + +## Blender - 添加机关 + + +## Blender - 杂项 + + +## Virtools - 基本操作 + + +## Virtools - 脚本 + + +## 一些建模的经验公式 + + +## 为什么Virtools里要这么做 + + +## 过时软件介绍 + + +## 最新勘误 + +历代制图过程都是一个循序渐进的过程,在这个过程中,难免会有因为技术限制或错误理解而导致的制图规则上的错误,历代制图手册都有对上一版本的勘误,这里也仿照着之前的版本,根据最新的发现,来对之前的一些制图上的理解进行勘误。 + +### 影子坐标 + + +## 结语 + +现在,踏入制图之人,教程已告终,但你仍未越过最后的门扉。若你理解制图的意义,就上前来,来做图,做出一张真正的地图,向大家证明你是最好的制图人。然后,就去开创属于自己的制图旅程吧。我的记忆已经磨损了太多,但我总还记得,我也玩过Ballance。