diff --git a/imgs/zh-cn/custom_floor_1.png b/imgs/zh-cn/custom_floor_1.png new file mode 100644 index 0000000..16f12eb Binary files /dev/null and b/imgs/zh-cn/custom_floor_1.png differ diff --git a/imgs/zh-cn/custom_floor_2.png b/imgs/zh-cn/custom_floor_2.png new file mode 100644 index 0000000..f9fce59 Binary files /dev/null and b/imgs/zh-cn/custom_floor_2.png differ diff --git a/main.md b/main.md index 878f037..96e8524 100644 --- a/main.md +++ b/main.md @@ -6,8 +6,8 @@ ### 作者想说的 -我自认为,Ballance已经是穷途末路,强弩之末了,无论人们再怎么去拯救,它可能也无力回天了。我打开了使用Blender制图的门,但是大家还是喜欢去3ds Max家,使用那些陈旧,专有的东西,捡了西瓜丢了芝麻。 -从各个地方来看,Ballance都在被吞噬,即使现在Ballance Mod Loader足够出色,有一些颇有技术力的人仍然在开拓新世界,但一个腐朽的架构已经无法支撑其上层的发展。因此我打算尽我最后的力量,把Blender制图的一切介绍给大家。也许我能够把它写得很棒,但,这一切值得么? +目前的Ballance制图教程,基本都是基于3ds Max的,并且没有英文版本。这阻碍了更多人创作Ballance UGC内容。 +因此我想在这里介绍一个全新的制图流程,使用Blender进行Ballance制图,并给出相应的英文教程,以惠及所有的Ballance玩家。 ### 此教程面向的人 @@ -37,9 +37,9 @@ 1. [Blender - 杂项](#jump-9) 1. [Virtools - 基本操作](#jump-10) 1. [Virtools - 脚本](#jump-11) -1. [一些建模的经验公式](#jump-12) -1. [为什么Virtools里要这么做](#jump-13) -1. [过时软件介绍](#jump-14) +1. [Blender经验公式](#jump-12) +1. [Virtools经验公式](#jump-13) +1. [过时软件与不适用软件介绍](#jump-14) 1. [最新勘误](#jump-15) 1. [结语](#jump-16) @@ -66,7 +66,7 @@ 此外,Blender的插件系统也非常地亲近用户,选择了Python作为插件语言,而不是像3ds Max那样还需要用C++配上专用的库才能编写插件,这使得插件的迭代可以很快,并且高级用户还可以自己定义方便自己操作的插件。来自开放世界的力量将会通过网络来指导你攻破操作软件时的每一个困惑之处。但需要注意,这个教程并不会教授你如何对Blender进行基本操作,只会在这里列出一些常用操作的方法和制作Ballance关卡所需要的技术,其他技术,还需要你自行参悟。 -### Blender制图的运作 +### Blender制图的工作流 正如基本概念中所述,我们使用Blender作为3D建模软件,在最后处理的部分使用Virtools进行,期间,两者的文件交换由BMX文件(于下文进行叙述)和2个插件来承担,它们分别是: @@ -139,11 +139,18 @@ BallanceVirtoolsHelper是一个可以用于Virtools 3.5的插件,当然,也 路面是Ballance中最为重要的一种物体,您可以在大多数关卡中见到它。本章节中的路面仅指代普通的路面,对于类似于[Modul_15](https://ballance.jxpxxzj.cn/wiki/Modul_15)以及出生点盘点这种特殊路面,请参考添加机关章节。 -路面的制作方法自自制地图创始以来就一直在被所有制图者进行研究,目前主要有3种流派:用原版路面或原版1x1路面做微分法的拼接法;使用外部工具(BMMaker或MapEditor)进行预先绘制后导出为脚本,批量生成;以及直接建模的方法。三种方法中拼接法最简单,但限制最多,限制制图者的创造力。而外部工具由于其实现特性,会出现生成时卡机,制作后冗余顶点过多,只能制作直来直去的路面的缺陷。只有直接建模法是Ballance路面制作的最终出路,是最自由的,最能发挥制图者创造天赋的方法,也是我们需要关注和介绍的方法。而直接建模法最重要的两点,根据我的经验则是:生成对应形状;以及贴图匹配。目前在Blender中对于路面建模的操作还是比较丰富的,在BallanceBlenderHelper的加持下,我们可以通过BallanceBlenderHelper内的BMERevenge模块批量生成较为规整的路块,这些路块具有自定义程度高以及几乎没有冗余顶点的特点。同时BallanceBlenderHelper也支持对一部分直接建模物体进行快速材质贴图的方法。 +路面的制作方法自自制地图创始以来就一直在被所有制图者进行研究,目前主要有3种流派: + +1. 用原版路面或原版1x1路面做微分法的拼接法 +1. 使用外部工具(BMMaker或MapEditor)进行预先绘制后导出为脚本,批量生成 +1. 直接建模 + +三种方法中拼接法最简单,但限制最多,限制制图者的创造力。而外部工具由于其实现特性,会出现生成时卡机,制作后冗余顶点过多,只能制作直来直去的路面的缺陷。只有直接建模法是Ballance路面制作的最终出路,是最自由的,最能发挥制图者创造天赋的方法,也是我们需要关注和介绍的方法。 +直接建模法最重要的两点,根据我的经验是:生成对应形状;以及贴图匹配。目前在Blender中对于路面建模的操作还是比较丰富的,在BallanceBlenderHelper的加持下,我们可以通过BallanceBlenderHelper内的BMERevenge模块批量生成较为规整的路块,这些路块具有自定义程度高以及几乎没有冗余顶点的特点。同时BallanceBlenderHelper也支持直接建模方法,并提供了进行快速材质贴图的功能。 ### 使用BMERevenge添加路面 -BMERevenge是内置于BallanceBlenderHelper的一个全新的路面生成模块,是Ballance Map Editor的上位替代。您可以在`添加 - Floors`中立即添加BMERevenge所提供的任意一种路面。其中Basic floors是指构成路面的最基本模块,包括三种变球器,平凹转换路面,以及平路面和凹路面的最小单元。而Derived floor则是一系列基于Basic floor组合而成的组合路面,包括路面转角,路面,以及平台等多种非常便捷的路面类型。通常来说只需要根据自身需要来选择合适的路面点击,设定参数,点击确定即可生成。 +BMERevenge是内置于BallanceBlenderHelper的一个全新的路面生成模块,正如其名字,BMERevenge是Ballance Map Editor的上位替代,在实现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)中,具有非常高的侧面的路面。 @@ -155,14 +162,57 @@ Face部分是指示上下顶面的使用情况,而Side部分指示的是路面 !!! info "Ballance Map Editor" Ballance Map Editor是一款老旧的,基于Tilemap的Ballance路面创造软件,我们已经不建议您使用这个软件,因为其创建了大量无用顶点。相比较而言,BMERevenge完美地解决了这个问题。如果您仍然需要使用这个软件,或想了解这个软件,请参见过时软件介绍章节。 +### 直接建模添加路面 +在本节中,我们将通过逐步介绍一个六边形平台的建造方法,来引导您熟悉直接建模添加路面的方法,并熟悉BallanceBlenderHelper中提供的快速材质贴图功能。 + +![](./imgs/zh-cn/custom_floor_1.png) + +我们可以先通过一些基本图元的创建,来帮助我们更快地搭建起整个物体的框架。为了获得六边形,我们可以首先利用`添加 - 网格 - 圆环`,然后将其顶点设置为6.然后我们假设我们的六边形平台的半径大约为20,因此需要将其半径设置为20。除此之外,我们还需要构造一个相同的,半径为22.5(20 + 2.5)的圆环,与半径20的圆环同平面共心放置。这么做是为了在平台边缘分割出一个2.5(单位路面大小5x5的一半)的边缘。虽然平台的上表面看起来是一个整体,但实际上其边缘的花纹和中心的图案分别来自不同的贴图,因此我们需要将它们分割到不同的面上来赋予不同的材质。这样一来,我们就有了两个6边形,我们暂且将半径20m的六边形称为内六边形,将半径为22.5的六边形称为外六边形。 + +然后我们需要选中这两个物体,右键选择合并(快捷键`Ctrl + J`),现在这两个物体被合并了,我们可以在此基础上构建一些面。进入编辑模式(快捷键`Tab`,退出编辑模式再按一下即可),选择顶点模式,选择内六边形的6个顶点,然后使用`面 - 填充`(快捷键`Alt + F`)。这样内部的7,8,9,10号面就填充完毕了。然后我们需要够造外围的1到6号面。首先选中外六边形的两个顶点,再选择内六边形的两个顶点,使用`顶点 - 从顶点创建边/面`(快捷键`F`)创建一个四边形面,以此类推创建所有的面。需要注意的是,务必使用`顶点 - 从顶点创建边/面`而不是`面 - 填充`来创建内六边形与外六边形之间的1到6号面。因为这样创建的面将不会是三角面,为我们后面进行贴图创造了便利。 + +我们拥有了平台的顶面,现在我们需要创建它的边缘6个面。我们仍然需要使用`添加 - 网格 - 圆环`添加一个22.5半径的六边形,然后将其下移5个单位,我们将其称为底六边形。选中我们的顶面和这个底六边形,右键选择合并。然后我们进入编辑模式,选择顶点模式,仍然使用`顶点 - 从顶点创建边/面`,在外六边形和底六边形中分别选择2个点,构建侧面的6个面。现在我们已经构造完整个平台的几何结构了。 + +现在我们需要为其创建贴图。首先我们需要设定材质插槽。请先转到Shading选项卡,然后选中平台,并进入编辑模式。在下方的着色器编辑器的中上部,选择左侧的下拉列表并使用添加按钮,添加3个插槽。然后分别选中每个插槽,并在下拉列表右侧的材质选择按钮中选择相应的材质。我们的平台需要3个材质:`FloorSide`,`FloorTopBorderless`,`FloorTopFlat`。选择好后,我们需要为每个面指定材质,需要进入编辑模式的面选择模式。然后选择内六边形内的面,然后选中`FloorTopBorderless`,然后点击下方的指定,即可设定其材质。同理,为内外六边形之间的6个面设置为`FloorTopFlat`,为底六边形和外六边形之间的6个面设置为`FloorSide`。现在每个面都有正确的材质了,但是它们仍然看起来非常奇怪,这是因为它们的UV还没有正确设置。 + +`Ballance - Flatten UV`提供了一个特殊功能,它可以按照Ballance中物体与贴图的比例关系(3D中的5对应UV贴图中的1),按照指定面的某条边,将材质展开到这个面上,这在这一步中是非常重要的。首先选择内六边形内部的所有面,然后使用`Ballance - Flatten UV`,您可以观察到这些面的材质正确了。现在您可以尝试选中内外六边形之间的6个面,然后继续使用`Ballance - Flatten UV`,您可能会发现,原本应当位于边缘的条纹现在可能被贴到了其他边上,这是因为参考边选择错误,我们可以在`Ballance - Flatten UV`的弹出框中调整`Reference edge`的大小,其数值的含义是使用多边形中的第x个边作为参考边。通过调整参考边,您可以将边缘条纹贴到正确的位置。对于底六边形和外六边形之间的6个面也是如此操作。现在我们的平台完成了。 + +!!! info "为什么我没找到你说的材质" + 这大多发生在从空白Blender文件进行创建的过程中。一个最简单的解决方法是使用BMERevenge添加一个路面,这个路面最好包含了您要使用的所有贴图,然后将添加的路面删除,这样只会导致物体被删除,但是和物体一同被添加的相关路面材质则会被留在Blender文档中,直到您清除无效数据块后才会被删除(如果它仍然未被引用)。 + 当然,通过手工方式创建材质也是可以的,这取决于您的Blender技术,上述的方法是适用于Blender新手的便捷操作。 + +!!! info "Flatten UV小贴士" + 在Flatten UV中调整`Reference edge`时,如果您熟悉了相关操作,则可以很快地判断该如何修改`Reference edge`来得到正确的结果,例如本例中,条纹被贴到了对面的边上时,我们可以直接将`Reference edge`+2或者-2(取决于哪个数值是合法的,因为`Reference edge`最大为3,最小为0),就可以将其贴到正确的位置。 + Flatten UV不止可以用于不规则路面的贴图够造,它还可以用在很多地方,例如当您通过拉伸顶点,导致材质显示错误的时候,您可以选择对应的面,并使用Flatten UV将材质重新贴到正确的位置。但是Flatten UV不能解决物体本身的拉伸导致的材质变化,因为Flatten UV是根据物体的网格进行操作的,而物体的拉伸是物体的属性,不是网格的属性,Flatten UV无法识别到来自物体的属性。 + + +现在,我们将对上面所述路面的生成方式进行改进,我们将使用螺旋修改器来重新制作和上述路面一摸一样的路面,并且会做的更快更好。 + +![](./imgs/zh-cn/custom_floor_2.png) + +!!! info "为什么我想不出来使用这种方式构建模型" + 直接建模添加路面往往并不是对Ballance制图工具的考验,而是考验制图者对于该3D软件的熟悉程度。您对Blender越熟悉,对于构建自定义路面则会越得心应手。甚至在完全熟悉Blender后超越我以上提供的构建方法,以更快的速度构建出模型,并且不依赖BallanceBlenderHelper提供的贴图功能贴上正确的贴图。 + 对于刚开始使用Blender的新手而言,这很难做到,一个快速提升建模水准的方法是多看多练。我们在本制图文档中提供了许多不规整的模型的构建方法,您需要仔细学习其理念并举一反三。并对于别人地图中的一些奇异构型,需要时刻想着如何在Blender中更快地构建出相似的结构。相信通过如此学习,您会在Blender建模上取得更快的进步。 + 还有,每章节的练习也不要忘了做哦,对于提升您的水准也有帮助。 ## Blender - 添加钢轨 +### 钢轨的本质 + +讲一下单双轨区别 + +### 添加单轨和双轨 + + + +### 添加螺旋钢轨 + + ### 添加钢轨材质 -在完成钢轨的构建后,我们需要给钢轨添加对应的材质以及UV才能让钢轨具有正确的颜色。我们可以先选定钢轨,然后通过`Ballance 3D - Create Rail UV`来为钢轨添加材质和UV。对话框中的材质(Material)选择钢轨材质即可。而对于类型(Type),则有3种类型,分别是点(Point),均衡(Uniform)和缩放(Scale)。这三种模式对应了程序对UV的不同处理方式。由于Ballance对于游戏中的钢轨的视觉效果具有特殊的处理,所以选择何种类型可能并不会对最后钢轨的呈现有什么影响。但是我们仍然建议您选择视觉上观看最好的模式,您可以反复选择参数来观察结果以决定选择何种类型。通常来说,一个好的钢轨,在视觉上看来它的花纹要分布均匀,但这也并非唯一标准。下面将会对这3中不同类型的具体处理方法进行讲解。 +在完成钢轨的构建后,我们需要给钢轨添加对应的材质以及UV才能让钢轨具有正确的颜色。我们可以先选定钢轨,然后通过`Ballance - Create Rail UV`来为钢轨添加材质和UV。对话框中的材质(Material)选择钢轨材质即可。而对于类型(Type),则有3种类型,分别是点(Point),均衡(Uniform)和缩放(Scale)。这三种模式对应了程序对UV的不同处理方式。由于Ballance对于游戏中的钢轨的视觉效果具有特殊的处理,所以选择何种类型可能并不会对最后钢轨的呈现有什么影响。但是我们仍然建议您选择视觉上观看最好的模式,您可以反复选择参数来观察结果以决定选择何种类型。通常来说,一个好的钢轨,在视觉上看来它的花纹要分布均匀,但这也并非唯一标准。下面将会对这3中不同类型的具体处理方法进行讲解。 下图展示了三种类型的工作方式。首先讲解均衡类型。均衡类型会试图按照一个轴向(Projection axis),将物体套在整张钢轨贴图中并进行贴图,视觉上来说就像是将3D的钢轨按一个轴向拍扁到钢轨贴图的平面上,而钢轨中的网格在这个平面上的映射就成为了它对应的UV。而点类型和缩放类型则是均衡类型的扩展。缩放类型允许用户提供一个缩放值(Scale),这个缩放值控制了这张钢轨贴图的缩放,因此可以被看作原先的钢轨贴图变成了钢轨贴图的一部分(缩放大于1),又或者变成了多张钢轨贴图首尾相接(缩放小于1)。点类型则是将整个三维的钢轨映射到了一个点,因此也可看作特殊的缩放类型,其缩放值为0。 @@ -175,6 +225,10 @@ Face部分是指示上下顶面的使用情况,而Side部分指示的是路面 缩放设置的轴向实际上并不能如此简单的解释,它实际上是相对于物体的局部坐标系的XYZ,但此处这么理解也并没有什么问题,因为大部分钢轨不涉及较为复杂的旋转等操作,因此其局部坐标系与全局坐标系是统一的。 点类型实际上与缩放设置为0的缩放类型在表现上其实并不相同。具体的实现可以通过阅读代码了解。但对于初学者来说,这么理解就已经足够了。 +### 更多类型钢轨的参数 + +放bug那张图 + ## Blender - 添加机关 @@ -187,13 +241,13 @@ Face部分是指示上下顶面的使用情况,而Side部分指示的是路面 ## Virtools - 脚本 -## 一些建模的经验公式 +## Blender经验公式 -## 为什么Virtools里要这么做 +## Virtools经验公式 -## 过时软件介绍 +## 过时软件与不适用软件介绍 ## 最新勘误