游戏地图自动生成

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注:更多早期地图生成算法信息详见参考篇
(插图) 传统2D地下城生成算法
技术对比
传统技术基于传统2D游戏,难以3D化 新技术更加注重模仿 “自然状态”的各种
规律
传统技术需要大量图量单元用于拼接 新技术不需要大量图量单元进行拼接
新系统结构图
地图大小与模式,预设区域等
地图参数
地图化
模型数据 纹理数据 碰撞数据 事件数据
不规则地形生成
多数情况下,这是一种更简单、更真实的地形制作方法。 在超大规模地图制作以及动态地图方面,或者当我们没有
足够资源让美术人员来为我们制作大型世界的时候,该技 术将会发挥出它的特殊作用。 按照通常的表述方法,不规则地形生成也就是生成记录高 度的二维数组以及相应纹理。 现有的不规则地形生成算法有:断层构造、中点位移、粒 子沉积同流体侵蚀算法等。
特殊的“星际隧道”将两个星球连接在一起,使 他们可以进行交流,所有连接星球的隧道称为 “地图”
当前开发者正致力于生成随即的星际地图,他们 将每两个星球是否相连用概率p来表示。。。。
能够随机连接么?
如果按照游戏BSU中 的做法:按40%概率 随机连接两个结点, 得到右图,显然不是 我们需要的。
如何连接各个结点才 自然呢?神奇之处即 将开始。。。。
如何用二维地图生成三维模型?
我们需要将第一章“地图化”导出的结果在这里生成模型。
前面所述各种方法都可以用于将二维地图转化为三维地形。
可以用上页所提及的方法,将二维原地图中属于“墙”的 部分用特定参数生成一座一座的山峰,最终导出模型。
我们也可以用中点位移法生成初始地图再按照二维原地图 的形态进行若干修正。
(插图)我们得到下面这类效果
算法由于选取优先连接短边,同时避免交叉,形成类似植物一节一节的生长的效 果。该算法的结果是形成没有环路,连接所有结点的模仿自然状态的路径图
算法的技巧
每次不一定找最短的边,而是按所有可连通边的距离从小 到大排序,筛选出前N名后随机取一条较短的。
同样的结点按照上述方法生成2分结果后合并,可以得到 带环路的路径图,一定量环路能增加游戏乐趣。
游戏地图自动生成
自然峡谷与山洞地型图生成技术 网易互动娱乐 林伟
特性前瞻:
根据参数生成自然状态的峡谷与山洞地图 根据参数添加各种游戏要素 自动导出模型与纹理 服务器每次只需传送参数与随机种子
降低制作成本:大量固定场景可考虑自生成 增加游戏乐趣:每次进入副本都不一样
自动地图历史
最早出现的各种自动迷宫生成算法 早期《红色警戒》有了较低级的自动地图 Jamis Buck 的 “2D地下城生成算法” 《暗黑破坏神II》中漂亮的2D动态地图系统
因此,我们需要更高级的方法
Parametrically Controlled Terrain Generation – GRAPHITE 07
通过平面画L条直线并切割出多个多边形区域。 从包含指定山顶位置的多边形开始寻找R个相邻的多边形然后升高该区域地形特定的高度。 重复上述步骤N次。通过控制参数(N,L,R)以及每步升高的因子可得到各式山峰。
真实纹理合成
真实纹理生成效果演示
后期峡谷效果(1)
后期峡谷效果(2)
峡谷内效果图
算法优化方向
将峡谷上下作镜象再合成可得山洞模型。 基于中点位移法生成的地形细节不够。 用流体侵蚀算法,制造更细致更加起伏跌
宕的山脉。 沿着峡谷边缘随机放置少量树木。 比较大的空地上放置少量草地模型。 适当的地方放置河流,用桥连接必要路径。
如何选择放置位置?
我们用2D原地图来分析 如何放置更自然? 如何放置更有趣?
统计所有节点 计算到出口的路径长短 计算每个路口的角度和
地图区域如何评估?
我们需要用连通图来进行区域分析,计算各个地图区域的重要性
区域评估三要素
我们可将地图区域用如下三要素来表示: 区域面积:就是CA过后该区域格子数量,用来计算该区
给定上述值后将根据种族与等级的范围批量生成NPC
网络资源
RenéVernon 的NPC模板:将NPC抽象为七个大 类别、二十七个小类别的方法。
Jamis Buck 的NPC生成器:批量生成地牢游戏的 NPC数据。
NPC背景故事生成器:给定NPC的等级参数,它 将为NPC生成一段动人的背景故事。
使用 Cellular Automata将模型边角除去 使用平滑过滤器将模型平滑,最终导出高度图
三维地形的CA处理
考虑地图上每个节点周围 26个节点,数出周围26个 节点中属于“山”的个数 N
如果N小于特定值,那把 该点删除
如果N大于特定值,那把 该点设置设置为山
最终模型导出
最终模型导出
仿自然效果生成的不同“原地图”
SUMARY
细胞自动机(Cellular Automata) 自然连通图 模仿峡谷与山洞的原地图生成
我们完成了“地图化”工作
TEA - TIME
喝水时间,休息十分钟
(接下来将介绍如何将导出三维模型并“自然化”)
第二章:自然化算法
如何生成山地? 如何定制地形? 如何导出模型? 如何导出纹理?
给定预设点后,围绕预设点生成N个结点,与预设点一起 生成路径图,然后循环m次,每次删除一个单向连通的非 预设点。M越大则路径越干净,非给定结点外的分支越少。
原地图生成
我们将前面 Cellular Automate生成的类似细胞单元图,使用“自然连同图”算 法进行带噪声的直线连接,取区域中心作为结点位置。如果在画直线过程中不 管碰到目标区域或者非目标区域,都将其二者联合,重新计算可连通区域。最 终得到右边形似山洞的效果,我们称为“原地图”。
Fault Formation(断层构造法)
首先将高度图的二维数组全部归零 画一条通过网格的线,将线一端的地形升高特定高度 重复上述步奏:画线升高,但减少每次升高的高度 如果想要地形平滑,那增加一个平滑过滤器(如模糊过滤)
Midpoint Replacement(中点法)
二维生成为例:选取场景中的线段,找到其中点 在其中点加入一个新节点并升高/降低一个随机数 在两条新线段上重复该步骤并减少随机数范围
那么如何生成真实纹理呢?我们将采用 Gyurchev的算法。。
Gyurchev’s Texture Algorithm
高度:确定基本的地形纹理 法向:确定该位置的倾斜度与材质修正 光照:确定材质的稀疏程度与阴影 过渡:规定材质过渡的范围
Yordan Gyurchev 的算法将依据上述四个变量在高 度图各个位置中的数值确定最终的合成结果。
剩下的就是连接它们
如何将随机结点连接起来?
Battle in Space (PKU-ACM试题)
新游戏“Battles in Space: Unification” (BSU) 在 不久的将来会发行:人类被分散到N个相互敌对 的星球上,玩家扮演某一星球的领主,使用外交 与军事技巧占领其余的星球。重构人类的新秩序。
如何初始化地图?
简单的初始化是根据长和宽创建二维数组 将数组中所有的元素设置为“墙” 然后随即将该数组中若干位置设为“地面” 地面的砖块数除以数组面积是密度
给定面积与密度下计算需要多少随机“地 面”
(插图)我们得到下面的东西
这是地图初始化效果 最简单的第一步 神奇之旅将从此开始
Cellular Automata – 细胞自动机
通用纹理合成
通用编辑器都有纹理合成功能,一般将地图按高 度分层,不同的高度对应不同的纹理:地、草、 岩石和雪。再按具体高度差值得到最后的图像。
这样的做法将生成比较机械的纹理,比如生成的 草都在同一个等高线上,看起来十分不自然,所 以该方法只能用于前期处理,一般都要美术最终 手工修正才能勉强真实。
如何生成/放置NPC?
1. NPC生成/放置首要工作是参数模型抽象 2. 策划将给出NPC各项参数的范围批量生成 3. 评估地图各个区域的重要性 4. 根据路地图特点放置NPC
本章只给出基本模型,具体游戏具体分析
NPC简单模型
参数
姓名 性别 种族 等级 举止 范围 状态 携带
说明
将通过人名字典分别随机出姓与名并组合得到 随机生成 英雄、战士、德鲁伊、猎人之类的东西 根据给定范围生成 攻击,防卫,闲游,隐藏 怪物的活动范围,与格子计算 无意识,烦躁,怯懦,拼命 根据范围随机得到
中点位移修正法
先选择中点位移法生成任意给定大小的地形 将地形的高度压缩到(0.1-0.4)之间 整体高度增加0.4,则处于(0.5-0.8)之间
按照原地图与地形大小的比例来划分 如果原地图某位置不是墙,那该区域平滑下降0.4 用(0.1-0.2)之间的新地形和原地形作加法(避免路面太平)
自然状态的自动纹理合成是比较复杂的事情。
如何合成真实纹理?
仔细观察发现,各层地形材质的特性各不相同。 山峰顶部的积雪,其实并不是按照等高线划分的,比如长
期向阳的部分,积雪会比较薄,同时积雪无法留在山势陡 峭的地方。 草地也有其规律,向阳的地方比背阴处茂密,山势陡峭的 地方也无法长草。 最后根据太阳光照带来明暗效果生成光照图再合成为最终 纹理。
Midpoint Replacement(中点法)
重复上述步骤足够多次,便能得到下述图像
Midpoint Replacement(中点法)
用中点位移法加 Diamond-Square的分形方式可以如法泡制三维地形 此方式除去生成三维地形外还能生成自然状态的云彩与河流
基础算法有何局限?
前面所述算法对系统而言几乎“不可控” 除了改变随机种子外,无法控制整体格局 无法根据我们的需要,导出模型
批量生成NPC需要指定什么?
参数
数量 第一种族 第一种族等级 第二种族 第二种族等级 第三种族 第三种族等级 总等级 总宝物
说明
生成多少个NPC 首要随机生成选择的种族 范围值(0-5,5-10,10-15)或者具体值 次要随机生成选择的种族 同上 最后随机生成选择的种族 同上 所有NPC的等级合取值范围 所有NPC携带的财富和
原地ቤተ መጻሕፍቲ ባይዱ 路径图
游戏化 相关参数
相关参数 自然化
原模型 纹理图 光照图
(插图)原地图与原模型生成
自动地图在效果上肯定无法有手工地图细致 不可能完全代替美术产生户外场景
第一章:地图化算法
如何初始化地图 细胞自动机 自然连通图 原地图生成
我们需要怎样的算法?
现在有大量成熟的迷宫生成算法 大都不适合自然地貌的生成 我们需要怎样的算法呢?
浏览数组中每个格子 统计当前格子周围八个格子的“墙”的数
量 如果墙数小于X值,就将当前格设为“地面” 如果墙数大于Y值,就将当前格设为“墙” 如果在X-Y之间,则当前格保持不变
实际生成中我们取4-5的模型
(插图)CA处理后结果
CA处理结果如右图 同数组可以处理多次 现在我们有六块区域 此处需处理预设区域 出口等位置在此设定
SUMARY
不规则地形生成法:断层构造中点位移法。 参数可控的地形生成算法。 根据二维原地图导出三维模型。 如何根据模型导出真实纹理。
算法优化的方向。
TEA - TIME
喝水时间,休息十分钟
(接下来将介绍如何将导出三维模型并“自然化”)
第三章:要素合成
如何抽象NPC数据? 如何批量产生NPC? 如何放置NPC? 如何添加道具? 如何合成要素?
域可以摆放多少东西。 最短距离:该区域到入口的最短距离,用来将重要的东西
摆远一点,这样玩家需要较长时间才能到达。 累加角度:从入口到该节点的有向路径中各条边的角度差
的绝对值和,用来描述一共拐了多少弯,值约大玩家越难 发现,这样可以放置一些隐藏要素。
自然连接图
将所有结点连接起来并且没有环路的图, 我们称为完备迷宫图(Perfect Maze)。
模仿自然状态连接的完备迷宫图我们称为 自然连接图。
判定两点间能够连接
如果两个点处于同一个集合则不能相连 如果两点连线覆盖到另一点则不能相连 如果两点连线交叉到已有线段则不能相连
算法定义
1)每个独立的节点为一个独立的集合 2)计算所有能够连接的点和他们之间的距离 3)在距离最短的备选边中选择一条最短的 4)将其两点连接,归并到同一集合 5)重复到2,直到空间中只有唯一一个集合
相关文档
最新文档