Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

游戏地图自动生成

4,359 views

Published on

2009 年 9 月 19 日,广州技术沙龙第2期《游戏地图自动生成》,林伟主讲。

Published in: Technology
  • Be the first to comment

游戏地图自动生成

  1. 1. 游戏地图自动生成 • 自然峡谷与山洞地型图生成技术
  2. 2. 讲师介绍 • 姓名:林伟 • 昵称:小林子 • 性别:男 • 年龄: 19 • Id : skywind • 格言:办公室就是我 di 家,电脑爱我我爱 ta • 目标:游戏开发一块砖,哪里需要哪里搬 • EMAIL: weilin@corp.netease.com
  3. 3. 地图生成的五大认识误区 • 误区 1 :该算法只适用于 10 人以内的游戏。 • 误区 2 :自动地图生成效果不行,不如手工制作。 • 误区 3 :使用自动地图生成需大量改动引擎以及制作方式 。 • 误区 4 :我们的游戏已经开始开发了,来不及使用改技术 。 • 误区 5 :该算法不太科学,没见哪个主流网游使用。
  4. 4. 内容简介 如今自由视角的 3D 游戏野外场景越来越多,制作成本也越 来越高:  如何才能生成高度仿真自然的关卡并放置各种修饰?  如何让该关卡具备一定游戏性?  如何放置怪物并保持游戏平衡?  如何降低服务器生成地图的负载及数据量?  如何通过自动地形生成方法降低美术制作成本?  如何增加副本乐趣让人每次进入副本都有不一样的体验? 敬请参加本次演讲。
  5. 5. 特性前瞻: • 根据参数生成自然状态的峡谷与山洞地图 • 根据参数添加各种游戏要素 • 自动导出模型与纹理 • 服务器每次只需传送参数与随机种子 • 降低制作成本:大量固定场景可考虑自生成 • 增加游戏乐趣:每次进入副本都不一样
  6. 6. 自动地图历史 • 最早出现的各种自动迷宫生成算法 • 早期《红色警戒》有了较低级的自动地图 • Jamis Buck 的 “ 2D地下城生成算法” • 《暗黑破坏神 II 》中漂亮的 2D 动态地图系 统 注:更多早期地图生成算法信息详见参考篇
  7. 7. (插图) 传统 2D 地下城生成算法
  8. 8. 技术对比 • 传统技术基于传统 2D 游戏,难以 3D 化 • 新技术更加注重模仿 “自然状态”的各种规 律 • 传统技术需要大量图量单元用于拼接 • 新技术不需要大量图量单元进行拼接
  9. 9. 新的设计有哪些主要过程呢?
  10. 10. 新系统结构图 地图化地图参数 地图大小与模式,预设区域等 路径图 原地图 自然化 相关参数 原模型 纹理图 光照图 游戏化 相关参数 模型数据 纹理数据 碰撞数据 事件数据
  11. 11. ( 插图 ) 原地图与原模型生成
  12. 12. 自动地图在效果上肯定无法有手工地图细致 不可能完全代替美术产生户外场景 ~~
  13. 13. 第一章:地图化算法 • 如何初始化地图? • 什么是细胞自动机? • 什么用自然连通图? • 如何生成原地图?
  14. 14. 我们需要怎样的算法? • 现在有大量成熟的迷宫生成算法 • 大都不适合自然地貌的生成 • 我们需要怎样的算法呢?
  15. 15. 如何初始化地图? • 简单的初始化是根据长和宽创建二维数组 • 将数组中所有的元素设置为“墙” • 然后随即将该数组中若干位置设为“地面” • 地面的砖块数除以数组面积是密度 • 给定面积与密度下计算需要多少随机“地面”
  16. 16. (插图)我们得到下面的东西 • 这是地图初始化效果 • 最简单的第一步 • 神奇之旅将从此开始
  17. 17. Cellular Automata – 细胞自动机 浏览数组中每个格子 统计当前格子周围八个格子的“墙”的数量 如果墙数小于 X 值,就将当前格设为“地面” 如果墙数大于 Y 值,就将当前格设为“墙” 如果在 X-Y 之间,则当前格保持不变 实际生成中我们取 4-5 的模型
  18. 18. (插图) CA 处理后结果 • CA 处理结果如右图 • 同数组可以处理多次 • 现在我们有六块区域 • 此处需处理预设区域 • 出口等位置在此设定 • 剩下的就是连接它们
  19. 19. 如何将随机结点连接起来?
  20. 20. Battle in Space ( PKU-ACM 试题) 新游戏“ Battles in Space: Unification” (BSU) 在不久 的将来会发行:人类被分散到 N 个相互敌对的星 球上,玩家扮演某一星球的领主,使用外交与军 事技巧占领其余的星球。重构人类的新秩序。 特殊的“星际隧道”将两个星球连接在一起,使他们 可以进行交流,所有连接星球的隧道称为“地图” 当前开发者正致力于生成随即的星际地图,他们 将每两个星球是否相连用概率 p 来表示。。。。
  21. 21. 能够随机连接么? 如果按照游戏 BSU 中 的做法:按 40% 概率 随机连接两个结点, 得到右图,显然不是 我们需要的。 如何连接各个结点才 自然呢?神奇之处即 将开始。。。。
  22. 22. 自然连接图 • 将所有结点连接起来并且没有环路的图, 我们称为完备迷宫图( Perfect Maze )。 • 模仿自然状态连接的完备迷宫图我们称为 自然连接图。
  23. 23. 判定两点间能够连接 • 如果两个点处于同一个集合则不能相连 • 如果两点连线覆盖到另一点则不能相连 • 如果两点连线交叉到已有线段则不能相连
  24. 24. 算法定义 1 )每个独立的节点为一个独立的集合 2 )计算所有能够连接的点和他们之间的距离 3 )在距离最短的备选边中选择一条最短的 4 )将其两点连接,归并到同一集合 5 )重复到 2 ,直到空间中只有唯一一个集合
  25. 25. (插图)我们得到下面这类效果 算法由于选取优先连接短边,同时避免交叉,形成类似植物一节一节的生长的效 果。该算法的结果是形成没有环路,连接所有结点的模仿自然状态的路径图
  26. 26. 算法的技巧 • 每次不一定找最短的边,而是按所有可连通边的距离从小 到大排序,筛选出前 N 名后随机取一条较短的。 • 同样的结点按照上述方法生成 2 分结果后合并,可以得到 带环路的路径图,一定量环路能增加游戏乐趣。 • 给定预设点后,围绕预设点生成 N 个结点,与预设点一起 生成路径图,然后循环 m 次,每次删除一个单向连通的非 预设点。 M 越大则路径越干净,非给定结点外的分支越 少。
  27. 27. 原地图生成 我们将前面 Cellular Automate 生成的类似细胞单元图,使用“自然连同图”算法 进行带噪声的直线连接,取区域中心作为结点位置。如果在画直线过程中不管 碰到目标区域或者非目标区域,都将其二者联合,重新计算可连通区域。最终 得到右边形似山洞的效果,我们称为“原地图”。
  28. 28. 仿自然效果生成的不同“原地图”
  29. 29. SUMARY • 细胞自动机( Cellular Automata ) • 自然连通图 • 模仿峡谷与山洞的原地图生成 • 我们完成了“地图化”工作
  30. 30. TEA - TIME 喝水时间,休息十分钟 (接下来将介绍如何将导出三维模型并“自然化”)
  31. 31. 第二章:自然化算法 • 如何生成山地? • 如何定制地形? • 如何导出模型? • 如何导出纹理?
  32. 32. 不规则地形生成 • 多数情况下,这是一种更简单、更真实的地形制作方法。 • 在超大规模地图制作以及动态地图方面,或者当我们没有 足够资源让美术人员来为我们制作大型世界的时候,该技 术将会发挥出它的特殊作用。 • 按照通常的表述方法,不规则地形生成也就是生成记录高 度的二维数组以及相应纹理。 • 现有的不规则地形生成算法有:断层构造、中点位移、粒 子沉积同流体侵蚀算法等。
  33. 33. Fault Formation (断层构造法) 首先将高度图的二维数组全部归零 画一条通过网格的线,将线一端的地形升高特定高度 重复上述步奏:画线升高,但减少每次升高的高度 如果想要地形平滑,那增加一个平滑过滤器(如模糊过 滤)
  34. 34. Midpoint Replacement (中点 法) 二维生成为例:选取场景中的线段,找到其中点 在其中点加入一个新节点并升高 / 降低一个随机 数 在两条新线段上重复该步骤并减少随机数范围
  35. 35. Midpoint Replacement (中点 法) • 重复上述步骤足够多次,便能得到下述图像
  36. 36. Midpoint Replacement (中点 法) • 用中点位移法加 Diamond-Square 的分形方式可以如法泡制三维地形 • 此方式除去生成三维地形外还能生成自然状态的云彩与河流
  37. 37. 基础算法有何局限? • 前面所述算法对系统而言几乎“不可控” • 除了改变随机种子外,无法控制整体格局 • 无法根据我们的需要,导出模型 • 因此,我们需要更高级的方法
  38. 38. Parametrically Controlled Terrain Generation – GRAPHITE 07 通过平面画 L 条直线并切割出多个多边形区域。 从包含指定山顶位置的多边形开始寻找 R 个相邻的多边形然后升高该区域地形特定的高度 。 重复上述步骤 N 次。通过控制参数( N , L , R )以及每步升高的因子可得到各式山峰。
  39. 39. 如何用二维地图生成三维模型? • 我们需要将第一章“地图化”导出的结果在这里生成模型。 • 前面所述各种方法都可以用于将二维地图转化为三维地形 。 • 可以用上页所提及的方法,将二维原地图中属于“墙”的部 分用特定参数生成一座一座的山峰,最终导出模型。 • 我们也可以用中点位移法生成初始地图再按照二维原地图 的形态进行若干修正。
  40. 40. 中点位移修正法 • 先选择中点位移法生成任意给定大小的地形 • 将地形的高度压缩到 (0.1-0.4) 之间 • 整体高度增加 0.4 ,则处于( 0.5-0.8 )之间 • 按照原地图与地形大小的比例来划分 • 如果原地图某位置不是墙,那该区域平滑下降 0.4 • 用 (0.1-0.2) 之间的新地形和原地形作加法(避免路面太 平) • 使用 Cellular Automata 将模型边角除去 • 使用平滑过滤器将模型平滑,最终导出高度图
  41. 41. 三维地形的 CA 处理 • 考虑地图上每个节点周围 26 个节点,数出周围 26 个节点中属于“山”的个数 N • 如果 N 小于特定值,那把 该点删除 • 如果 N 大于特定值,那把 该点设置设置为山
  42. 42. 最终模型导出
  43. 43. 最终模型导出
  44. 44. 通用纹理合成 • 通用编辑器都有纹理合成功能,一般将地图按高 度分层,不同的高度对应不同的纹理:地、草、 岩石和雪。再按具体高度差值得到最后的图像。 • 这样的做法将生成比较机械的纹理,比如生成的 草都在同一个等高线上,看起来十分不自然,所 以该方法只能用于前期处理,一般都要美术最终 手工修正才能勉强真实。 • 自然状态的自动纹理合成是比较复杂的事情。
  45. 45. 如何合成真实纹理? • 仔细观察发现,各层地形材质的特性各不相同。 • 山峰顶部的积雪,其实并不是按照等高线划分的,比如长 期向阳的部分,积雪会比较薄,同时积雪无法留在山势陡 峭的地方。 • 草地也有其规律,向阳的地方比背阴处茂密,山势陡峭的 地方也无法长草。 • 最后根据太阳光照带来明暗效果生成光照图再合成为最终 纹理。 那么如何生成真实纹理呢?我们将采用 Gyurchev 的算法。 。
  46. 46. Gyurchev’s Texture Algorithm 高度:确定基本的地形纹理 法向:确定该位置的倾斜度与材质修正 光照:确定材质的稀疏程度与阴影 过渡:规定材质过渡的范围 Yordan Gyurchev 的算法将依据上述四个变量在高度 图各个位置中的数值确定最终的合成结果。
  47. 47. 真实纹理合成 真实纹理生成效果演示
  48. 48. 后期峡谷效果( 1 )
  49. 49. 后期峡谷效果( 2 )
  50. 50. 峡谷内效果图
  51. 51. 算法优化方向 • 将峡谷上下作镜象再合成可得山洞模型。 • 基于中点位移法生成的地形细节不够。 • 用流体侵蚀算法,制造更细致更加起伏跌 宕的山脉。 • 沿着峡谷边缘随机放置少量树木。 • 比较大的空地上放置少量草地模型。 • 适当的地方放置河流,用桥连接必要路径 。
  52. 52. SUMARY • 不规则地形生成法:断层构造中点位移法 。 • 参数可控的地形生成算法。 • 根据二维原地图导出三维模型。 • 如何根据模型导出真实纹理。 • 算法优化的方向。
  53. 53. TEA - TIME 喝水时间,休息十分钟 (接下来将介绍如何将导出三维模型并“自然化”)
  54. 54. 第三章:要素合成 • 如何抽象 NPC 数据? • 如何批量产生 NPC ? • 如何放置 NPC ? • 如何添加道具? • 如何合成要素?
  55. 55. 如何生成 / 放置 NPC? 1. NPC 生成 / 放置首要工作是参数模型抽象 2. 策划将给出 NPC 各项参数的范围批量生成 3. 评估地图各个区域的重要性 4. 根据路地图特点放置 NPC 本章只给出基本模型,具体游戏具体分析
  56. 56. NPC 简单模型 参 数 说 明 姓 名 将通过人名字典分别随机出姓与名并组合得到 性 别 随机生成 种 族 英雄、战士、德鲁伊、猎人之类的东西 等 级 根据给定范围生成 举 止 攻击,防卫,闲游,隐藏 范 围 怪物的活动范围,与格子计算 状 态 无意识,烦躁,怯懦,拼命 携 带 根据范围随机得到
  57. 57. 批量生成 NPC 需要指定什么? 参 数 说 明 数 量 生成多少个 NPC 第一种族 首要随机生成选择的种族 第一种族等级 范围值( 0-5 , 5-10 , 10-15 )或者具体值 第二种族 次要随机生成选择的种族 第二种族等级 同上 第三种族 最后随机生成选择的种族 第三种族等级 同上 总等级 所有 NPC 的等级合取值范围 总宝物 所有 NPC 携带的财富和 给定上述值后将根据种族与等级的范围批量生成 NPC
  58. 58. 网络资源 • René Vernon 的NPC模板:将 NPC 抽象为七个大类 别、二十七个小类别的方法。 • Jamis Buck 的NPC生成器:批量生成地牢游戏的 NPC 数据。 • NPC背景故事生成器:给定 NPC 的等级参数,它 将为 NPC 生成一段动人的背景故事。
  59. 59. 如何选择放置位置? • 我们用 2D 原地图来分析 • 如何放置更自然? • 如何放置更有趣? • 统计所有节点 • 计算到出口的路径长短 • 计算每个路口的角度和
  60. 60. 地图区域如何评估? 我们需要用连通图来进行区域分析,计算各个地图区域的重要性
  61. 61. 区域评估三要素 我们可将地图区域用如下三要素来表示: • 区域面积:就是 CA 过后该区域格子数量,用来计算该区 域可以摆放多少东西。 • 最短距离:该区域到入口的最短距离,用来将重要的东 西摆远一点,这样玩家需要较长时间才能到达。 • 累加角度:从入口到该节点的有向路径中各条边的角度 差的绝对值和,用来描述一共拐了多少弯,值约大玩家越 难发现,这样可以放置一些隐藏要素。
  62. 62. 地图放置规则 A. 从连通图中的单向连通节点区域开始按照到入口的最短距离排序 B. 按照宝物价值排序,顺序放入上述排序过的单向连通区域中,这样玩 家不会因为走到一个死胡同一无所获而恼怒。 C. 按怪物等级高低排序,等级最高的放在离入口最远的地方,难度递增 。 D. 从入口开始处延路径每经过一个节点的方向改变角度绝对值的和称为 累加角度。 E. 角度和越大的地方,代表拐弯越多的地方,按此数值排序,顺序设置 隐藏宝物,这样会增加玩家探索的乐趣。 F. 先按照节点的边数,再按照节点离入口的距离排序,然后顺序放下剩 下等级怪物,这样重要的路口会有更厉害的怪物守卫。 G. 如果还有怪物剩下,那么随机放置到各条路径中。
  63. 63. 要素合成 – 增加游戏乐趣 • 将地图的轮廓提取出来,部署栅栏模型 • 在比较开阔的地方放置建筑或者标志 • 设置可打破的墙壁将某些支路封闭隐藏 • 在太阳经常照射的方向布置草模型 • 在开阔的区域布置少量树模型 • 在某些区域开辟山洞连接其他场景 • 单独处理 BOSS 的生成与放置
  64. 64. 网络化处理 • 生成地图需要相当大的计算过程,结果也 相当庞大。 • 服务器每日晚上计算出 1000 幅自动地图 (不需要计算纹理),并保存参数与种子 。 • 当确定具体某场景后将该参数与种子传递 给客户端,客户端同步计算出场景数据。 • 客户端 / 服务器使用相同数据同时开始游戏 。
  65. 65. SUMARY • NPC 建模方式 • NPC 自动批量生成 • 地图区域评估 • NPC 放置 • 要素合成
  66. 66. 参考资料 • 传统迷宫生成算法 • Jamis Buck 的地下城生成 /NPC 生成法 • 断层构造 / 中点位移 / 流体侵蚀算法 • 参数可控山地生成 • Yordan Gyurchev 的地形纹理合成法
  67. 67. 发展方向 • 模型真实化的提高:可以参考地理信息系 统的最新地形还原技术。 • 纹理真实华的提高:倾斜度高的山脚用单 独的纹理坐标防拉伸,考虑更多自然因素 。 • 加入更多地图要素:诸如河流,桥梁。 • 随机加入带剧情 / 任务的 NPC 角色。
  68. 68. 游戏自动地图生成技术的发展空间仍然很 大,传统二维地形生成已经成为历史,如 何生成更加真实自然与有趣的游戏关卡成 为问题核心。 虽然不能完全代替手工制作,但该方法在 提升游戏乐趣与降低制作成本方面将发挥 独特的作用。。。。。
  69. 69. 课后交流 - 谢谢大家 《游戏地图自动生成》的所有内容到此结束 只开风气,不为人师 MAIL: weilin@corp.netease.com

×