如何用最简单的C++代码生成游戏百度地图在线生成代码

Can anyone tell me a way to generate island structures or hill structures like in minecraft?
I'm just searching for a proper THEORY for that random-shape generating, but it should keep a defined base pattern..
like: islands schould be rounded but variate in shape and scale ( min/max width & height ).
or: rivers schould not be straight lines, they should have curves and a random width.
or even: generating some sort of forest, where trees are placed in a way that the user can still walk through the forest (that's a simple one I think, just say that some blocks around a tree should remain blank, if code tries to put more trees around the last one )
What kind of math can I use to do such things?
I would be glad for some links for tutorials or references. I've searches all around the web for hours, but all I could find was some books to buy like "game mathematics" or something, but my budget is set to zero.
First of all, I'm sorry for my bad englisch.
Secondary I want to thank all of you for your answers. These are great references and I'll spend much time to go deeper in that.
解决方案 I strongly recommend looking at
and other blog posts by him.
He had a whole series on creating realistic looking maps with rivers, coastlines, etc.
Building Worlds
Although procedural map generation can be applied to non-grid worlds,
it’s most often used with grids. Viewed at a single point in time,
generated game maps are rarely as nice as hand-crafted worlds.
However, they have three advantages: (1) lower cost per world if there
are many worlds to be made, (2) more replay value because the next
time through the world is different, and (3) potential for the world
evolving while the game progresses.
Amit’s World Map Generator
Procedural Content Generation: generating terrain, cities, buildings
Dungeon generation in Unangband
Generating game worlds with a lock-and-key structure so that certain rooms require objects from other rooms
Algorithm for building rivers
Adding rivers to randomly generated terrain
The original Rogue algorithm for generating dungeons
11 Maze Generating Algorithms with demos and code
Using noise functions to generate caverns such as those in Terraria and Minecraft
Irregular shaped rooms, simple algorithm
Resizable interior room regions
Tunneler algorithm for digging dungeons in DungeonMaker
Guide to random Terrain Generation techniques
Wiki guide to procedural content generation
Simulating Large Virtual Worlds
(first item in list) is a hugely impressive article that talks about the logic of generating sensible shaped coastlines, islands, rivers, mountains, etc.
Hugely impressive bit of work!
[included in above list] fairly simple algorithm for generating a river's path based upon the other 'tiles' in the map, e.g. their type and elevation.
本文地址: &
谁能告诉我一个方法来生成岛状结构或小山结构,比如在我的世界?
我只是在寻找一个合适的理论是随机的形状发生,但它应该保持一个定义的基本模式。
像:海岛schould是圆形的,但变动内容的形状和规模(最小/最大宽度和放大器;高度)
或:河流schould不是直线,他们应该有曲线和随机宽度
甚至是:产生某种形式的森林,那里的树木被放置的方式,用户可以通过森林仍然走的(这是一个简单的,我认为,只是说在树上的一些块应该保持空白,如果$ C $?试图把周围的最后一个更多的树)
我可以使用什么样的数学题做这种事情?
我很乐意为一些链接的教程或引用。我已经搜索各地的网站了几个小时,但我能找到的是一些书籍购买,如“数学游戏”什么的,但我的预算设置为零。
首先,我对不起我的坏englisch。
次级我要感谢你们所有人对你的答案。这些都是很好的推荐,我会花很多时间去在更深了。
解决方案 我强烈建议看以及其他博客文章了。他有一个全系列与河流,海岸等创建逼真的地图。
虽然程序映射生成可以应用到非网格世界,
它最常用于电网。在一个单一的时间点上观察时,
生成的游戏地图是很少像你一样手工制作的世界。
然而,它们有三个优点:(1)每世界成本较低,如果有
被许多世界来进行,(2)更重玩的价值,因为下一个
通过世界时间是不同的,(3)潜在的世界
不断发展的同时,在游戏的过程。
阿密特世界地图生成
在程序内容生成:生成地形,城市,建筑
地下城代Unangband
带锁和键结构,使得某些房间需要从其他房间的对象生成的游戏世界
在算法的建筑河流
添加河流随机生成的地形
在原来盗贼算法生成的地牢
在11迷宫生成算法与演示和code
使用噪声函数生成的洞穴,如在泰拉瑞亚和我的世界
在形状不规则的房间,简单的算法
可调整大小的内部空间的区域
掘洞算法挖掘地窖中DungeonMaker
指南随机地形生成技术
百科指南,程序内容生成
在模拟大型虚拟世界
Amit的 (列表中的第一项)是谈论发生体感形海岸线,岛屿,河流,山脉,工作等巨大的IM pressive位的逻辑一个巨大的IM pressive文章!
[包括在上面所列内容]相当简单的算法,在地图上,如产生基于对方的瓦片'河流的路径它们的类型和高程。
本文地址: &
扫一扫关注官方微信【Visual C++】游戏开发笔记之九 游戏地图制作(一)平面地图贴图_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
【Visual C++】游戏开发笔记之九 游戏地图制作(一)平面地图贴图
上传于||文档简介
&&【​V​i​s​u​a​l​ ​C​+​+​】​游​戏​开​发
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢其实很简单《自由禁区》让地图制作平易近人_网络游戏-官方_新浪游戏_新浪网
不再自动弹出
其实很简单《自由禁区》让地图制作平易近人
15:59:07& &来源:
  西山居2016年度重磅FPS+网游新作《自由禁区》明日14:00即将开启创世首测!游戏首曝FPS+全新理念,以创世引擎为线索,集地图、视频、形象等编辑器玩法于一身,为玩家提供一个高自由度的创想世界,轻松打造属于自己的专属枪战世界!传承经典的射击玩法、宏达背景下的PVE高自由度体验、首创FPS新手镇等海量内容在UE4引擎的强大推动力下必将成为众多FPS玩家瞩目的焦点!11月25日创世首测在即,你准备好创造属于自己的枪战了么?
自由禁区正式官网
  [轻松原创 简单享受]
  在《自由禁区》中,创客通过地图编辑器,可以根据自己的喜欢与想象自主创造、制作专属于自己的原创地图。虽然地图编辑器这一概念,并不是由自由禁区第一个提出,但其仍拥有着其他编辑器不可比拟的优势。自由禁区可以说将其编辑器的简单性与易用性提高到了极致。在制作地图时,创客无需掌握繁琐难懂的编程、PS等能力,也无需考虑纹理等细节如何制作——只需将物件进行简单的拼接组合,将其摆放到你想要的位置,犹如摆放乐高积木一般,即可创造出属于自己的完美伊甸园。只要你拥有天马行空的想象力,在自由禁区中,你就可以轻松创造出你想要的世界!
轻松原创引爆作图热潮
  [高清化可视编辑器 提升创造快感 ]
  《自由禁区》首次将高清化地图编辑器带到玩家的面前来,相比于《我的世界》与《全民枪战》,自由禁区将带给各位创客们更为冲击的视觉体验!玩家无需在强忍着马赛克来完成创造。在自由禁区中,无论物件、场景都将写实的出现在玩家眼前!玩家将更加直观的感受到所创造地图的美观度与平衡性!
地图编辑器光影效果出色
  [自由共享 享受共同创造的乐趣]
  相比于其他地图编辑器,自由禁区的另一大特点便是自由共享。在创造地图时,玩家可以在制作的途中随时随地保存自己原创的地图,并可随时随地邀请游戏中的好友一起参与地图的测试。同时,玩家还可将自己原创的地图分享给其他好友,邀请其一同参与地图的创造,从而创造出更加精美的枪战地图!俗话说,独乐乐不如众乐乐,相信这一大特点必将带给玩家们更多意想不到的惊喜与快乐!
享受原创乐趣
  自有禁区创世首测明日盛大开启,享受原创乐趣,从EXtopia开始!更多精彩内容敬请关注游戏官网!
  [关于北木仓]
  北木仓作为西山居旗下专注于FPS游戏的全新工作室,它的制作团队来自中国、美国、德国、韩国等各个国家,将一群FPS游戏的狂热爱好者聚集到一起,拥有丰富的FPS游戏和研发经验,专业背景深厚。“北木仓”、“西山居”,从工作室名称上来看,西山居似乎有意为之,旨在打造一个专注于FPS游戏的研发工作室,与创作了剑侠情缘系列作品的珠海西山居平分秋色。“一南一北一剑一枪”,西山居研发工作室的战略格局已经初露端倪。而随着中文名称的正式曝光,这款蛰伏已久的FPS网游也将逐渐向网游市场显示出它真正的实力。
  扫《自由禁区》官方订阅号(或微信搜索:extopia),获取最新资讯:
Extopia官方微信二维码
新浪声明:新浪网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
中国游戏排行榜(China Game Weight Rank)是由新浪游戏推出的国内最全面、最专业、最公正、最客观的多平台游戏评测排行榜,包含了目前市场上所有的手游、端游、主机游戏、VR游戏、智能电视游戏及H5游戏,力图为中国玩家打造最值得信赖的游戏推荐平台。
评天下游戏、测产品深浅—新浪中国游戏排行榜CGWR!
新浪游戏APP
新浪游戏APP为广大玩家提供最及时、最个性化的聚合订阅游戏资讯,以及业内最丰富、最具价值的游戏礼包资源,首测资格、稀有道具,成为高玩就这么简单。新浪游戏APP论坛力求打造一个属于所有玩家的超大朋友圈,为玩家的生活增资添彩。新浪游戏秉承为玩家提供优质服务为宗旨,不断优化创新,让我们一起创造快乐!
全民手游攻略
全民手游攻略”是新浪游戏为全球手游玩家量身打造的一款手游攻略大全及专业游戏问答社区APP。“全民手游攻略”涵盖Apple Store游戏畅销榜前150名手游,网罗最新手游通关秘,帮助玩家畅玩手游;打造最全手游攻略资料站,帮你用最省钱方式吊打土豪。最火爆专业的游戏问答,让众多大神带你开启不同手游人生,寻找志同道合小伙伴一起并肩作战。
新浪游戏大事记
16年01月14日
16年01月14日
15年12月15日
15年11月19日
15年11月16日
15年01月08日
14年12月27日
14年12月17日
14年03月27日
14年01月09日
13年12月27日
13年12月07日
13年10月11日
用微信扫描二维码
分享至微信朋友圈诸如GTA,武装突袭之类的游戏中,开发者是如何实现超大地形的?对于这一问题有什么主流的解决方案?补充:例如一些开发者提到的浮点精度问题是如何解决的?又如果npc在玩家视野之外是如何运算的??
----------------------------本文同时发在我的 Blog,在那里或可获得更好的阅读体验:----------------------------首先肯定一下,这是一个非常有趣的问题。在这个答案里,我将尝试先回答主干问题,再对补充说明里的几个问题简单说一下。下面是本文将涉及到的一些相关技术的列表,(需要说明的是,这些技术单独来看并不复杂,实际动手实现并理解各种取舍以后,在项目当中针对具体的需求去设计和搭配才是关窍之所在)----------------------------一、程序技术篇:算法和架构(Programming Algorithms & Architecture)1. 无限循环的平铺地图(Infinite Tiling)2. 可预测随机数和无限宇宙(Predictable Random)3. 精度问题解决方案(Precision Problem Solving)4. 超大地形的处理 (Terrain Visualization)
4.1 古典算法(从 GeoMipMapping,Progressive Mesh 到 ROAM)
4.2 层次的艺术(Quadtree 和 Chunked LOD)
4.3 以GPU为主的技术(Paging,Clipmap 到 GPU Terrain)5. id tech 5 的 megatexture (超大地表上的非重复性海量贴图)6. 过程式内容生成 (Procedural Content Generation)
6.1 过程式纹理(Procedural Texturing)
6.2 过程式建模(Procedural Modeling)二、内容制作篇:设计和创造(Content Design & Creation)1. 随机地图类游戏 (Diablo II) 中地图的拼接2. 无缝大世界 (World of Warcraft) 中区域地图的拼接3. 卫星地质数据的导入,规整化和再加工(一些飞行模拟类游戏)4. 超大地图的协同编辑:并行操作,数据同步,手动和自动锁的运用三、异次元篇:我们的征途是星辰大海1. 终极沙盒(EVE):当规模大到一定程度——宇宙级别的混沌理论与蝴蝶效应2. 打通两个宇宙(EVE & Dust):发现更广阔的世界——宇宙沙盒游戏和行星射击游戏联动----------------------------## 一、程序技术篇:算法和架构(Programming Algorithms & Architecture)### 1. 无限循环的平铺地图(Infinite Tiling)我们就从最平淡无奇的无限循环平铺地图说起吧。这应该是最原始,也是最没有技术含量的开放世界构筑方式了。技术上由于过于朴素,也没什么好说的,就是在同一个坐标系内像铺地砖那样展开,坐标对齐即可,就是接头处需要注意一下,不要穿帮就行。但是千万别因为简单就小看这个技术哟,上面列表里面的不少技术都是在循环平铺的基础上发展起来的,下面我们就来瞧一瞧吧。按照维度的不同,循环平铺有下面三大类:a. 在一维方向上扩展的横版卷轴游戏(以动作类游戏为主)和纵版卷轴游戏(以射击类游戏为主)。这些类型的游戏里,为了避免循环平铺给玩家带来的重复的疲劳,卷轴游戏会添加一些随机或动态的元素,比如超级玛丽里的背景上云朵的位置,分出多个层次以不同速率卷动的背景层,等等。b. 在二维方向上循环平铺的固定视角2D游戏。这一类游戏里,比较典型的就是 Diablo。暗黑中的随机地图生成,在本质上,就是叠加了一定的随机性,约束和边界条件的循环平铺效果。c. 在 3D 游戏里循环平铺高度图,形成连绵不断的地形效果。这在早期的模拟飞行射击类游戏里比较常见,现在已经很难搜到图了,我在上大学的时候写的第一个地形渲染 demo 就是平铺的,可惜刚刚翻硬盘已经找不到了555。这一类游戏,在平铺时适当地辅以一些贴图的变化,可以在很省内存的条件下,做出非常不错的效果。找不到游戏内的图,拿下面这个高度图来凑数吧。请大家脑补一下,把下面这个灰度图立体化之后,一块一块像地砖一样循环平铺以后,3D渲染出来的连绵起伏的直抵地平线(好吧,直抵远裁剪面)的山脉的壮观效果吧。----------------------------### 2. 可预测随机数和无限宇宙(Predictable Random)(本节内的描述和算法,部分参考了《Game Programming Gems I》 [“2.0 Predictable Random Numbers”]() 一文,请感兴趣的同学自行查找原文通读)有个传说中的游戏叫 Elite ,不知道有没有同学玩到过。据说这游戏运行在32K内存的机器上,其中16K还是只读的ROM。这游戏据说拥有难以匹敌的游戏深度:近乎无限个行星,每一个都有各自的名字和特征。可预测随机数本身是游戏内运用非常广泛的一个技术,这里我们着重谈一下它在为游戏提供(微观上)更丰富的细节和(宏观上)更广阔的世界的作用。这一技术的最重要原则是,为了在一个游戏世界中给出无限空间的幻觉,我们需要满足两个分解条件,可以把它们成为宏无限(macro-infinite)和微无限(micro-infinite)”。前者涉及到问题的空间规模,后者则任意一个对象所支持的最小细节层次级别。----------------------------从实现上来说,如何设定随机种子是这个技术的核心。由于给定一个随机种子,生成的随机序列是完全可预测的,那么根据游戏内的一些时空的设定,通过对随机种子进行一些定制,得到在游戏内任意某个时刻和某个空间点上完全可预测的行为就是可行的了。最简单的是使用以下几个元素与随机种子配合计算:1. 世界坐标(即 X Y Z 值,既可以表示空间中的某个点,也可以表示某个区域)2. 系统时间(可以用真实时间,也可以用游戏内设计者定义的时间,如果是前者的话需要考虑离线时的处理)3. 正态分布(在游戏里建一个查找表即可,这是最廉价的方案)这些因素加上对应的随机序列,已经可以营造出宏观上比较有深度的一个宇宙空间了。理论上,如果所有的随机性都是由给定的随机种子产生,而这些随机种子要么是游戏定义的常量,要么是查表得到,要么是均匀流逝,要么是由更高层次的随机种子生成,那么这样一层一层上溯到尽头的话,任何一个游戏内的宇宙,都可以归因到一个初始的种子,这个种子,就是决定论中经典物理学的所谓的第一推动吧。其实如果真做到了这一点,我们大可以把这个种子交给玩家,在首次进入游戏的时候掷一个 2^64 骰子。这是真正的上帝创世的感觉,想象一下,上帝说,要有光,于是掷出了骰子,第一推动怦然落地,整个时空的巨大齿轮开始运转,在不同的时间点和空间点上,更多的随机序列被生成出来...这幅图来自于游戏 Frontier:Elite II(出自[这篇文章]()),下面配的字样是:“This picture doesn't even begin to show the scale of the universe.” 大家感受一下。----------------------------微观上本质上也是一样的,只是把发散的过程倒过来,变成了逐级收敛的过程。为了在某一个点上放大时,能得到尽可能细致,准确和一致的表现,我们需要对较低层次的世界定义更丰富的规则和约束,比如黑洞对周围的影响情况,双星体系的轨道,恒星的种类与行星个数之间的对应关系,不同恒星系结构下行星表面的大气构成,等等。这样才能较好地平衡多样性和独特性,带来更真实的模拟效果和更令人信服的游戏体验。----------------------------### 3. 精度问题解决方案当足够大尺度的世界被创建出来时,就会自然而然地遇到精度的问题。同时这也是补充说明中提到的一个问题,这里我们简单介绍一下几种实践中的解决方案。先描述一下问题吧,我们知道,IEEE754 中规定的32位浮点数中,有23位是用来表示尾数的。也就是说,对于接近1的浮点数,可能会带来 2E-24 左右的误差(大约是 0.)以现实单位计算的话,如果游戏世界是边长为100km的正方形,那么在这个正方形的最远角落里,我们的最小空间单位是约 7.8 毫米;而如果是中国这么大的面积的话,空间误差将达**半米**左右。那么可以想象一下,如果是宇宙级别的游戏,采用32位浮点数作为全地图精度,那么实际误差可能会有多么大。在实践中,这种误差可能会带来以下这些影响:1. 无法将相邻的对象对齐。这种情况,场景美术(关卡设计师)应该会比较头疼,这对于游戏的编辑器来说是大问题了。物件没法在引擎编辑器里对齐;在不同的平台上,对齐也不一样;甚至不同的编译器,同一个编译器的不同版本编出来的引擎;对齐都不一样 ... 所以说处女座不要做 LD :P。2. 模型间的穿插和裂缝 本来封闭的墙角可能漏个洞,本来放在地上的石头变成了悬浮在空中。这实际上是上一种的变种。3. 骨骼动画的抖动 由于世界矩阵往往参与骨骼动画的运算,误差可能会被逐级放大,在那些最远离根骨骼的骨头上(也是玩家最容易注意到的地方),抖动可能会发生得非常剧烈。4. 物理模拟失真 一些柔体的模拟可能会直接失败,而刚体也可能会产生怪异的运动。碰撞系统也可能无法正常工作。所有这些一旦发生,都是很容易觉察的。一旦你发现在一个很大的坐标上有这些问题,而接近原点处问题却消失了,那么很有可能就是精度在作怪。而需要注意的是,出现这种问题,只和游戏中出现的数字的规模和跨度有关,和游戏选择了什么样的长度单位(如用毫米还是公里做单位)无关。----------------------------那么怎样使用有限的坐标精度来描述较大尺度的世界呢?最直接的方案是 使用双精度浮点数 (64 位),如果这是可接受的选择,那么就不必费心引入后面讨论的复杂度了。其次是 区域划分法 。我看到
同学已提到,不过这里出于完整性的考虑,再简单说一下。正如 Milo 同学所说,“把世界划分成不同的区域,在区域内的计算使用其局部坐标系统。”相对应的跨区访问,需要对应的“本地A -& 世界 -& 本地B”的坐标转换。还有一个方案是 节点中转法。正如移动电话的基站用来承载和协调整个通信网络那样,我们在游戏的给定活动区域使用静态信标,所有的逻辑上与之相关的单位,都以该信标的坐标作为参考单位,这样也可以做到把数据访问局部化。相距足够远的两个物体(相当于上面的跨区访问)交互总是通过静态信标来完成(正如移动电话网络中发生的那样),这样的好处是相关的复杂度可以隔绝在这个中转系统的内部。此外
同学提到了一个坐标转换法,“所有位置信息都以角色位置为中心做一次转换”。这正是 《Game Programming Gems IV》 [“4.0 Solving Accuracy Problems in Large World Coordinates”]() 文中的方案。这个方案可以解决部分问题(主要是渲染相关的问题),但是仍有一些问题需要考虑,比如:1. (上面提到的)编辑器内操作的物体,在序列化到文件中时,精度丢失的问题。2. 大部分物理模拟通常需要一个角色无关,摄像机无关的全局坐标系。等等。----------------------------### 4. 超大地形的处理 (Terrain Visualization)终于说到对超大地形的处理了。可以说从上世纪九十年代起,超大地形的可视化,一直是3D游戏领域热门的话题。今天我们就借着这个机会,把相关的算法和实现理一理吧。考虑到篇幅太长的话,俺的手指头招架不住,再一个不少对这个话题感兴趣的同学可能压根就不是程序员,一些实现细节可能我就只是简单提一下,贴代码什么的还是算了,尽量保证整篇文章的信息浓度适中吧。----------------------------总的来说,这十多年来,地形渲染技术的发展史就是一部生动的对现代GPU的开发,利用和改进史。整个过程大致可以分成三个阶段:一开始,GPU处理顶点能力很弱,这个时期的各种精巧算法(如一些VDPM和后期的ROAM),**尽力在用CPU来降低顶点的总量**,避免一不留神压垮图形系统;后来,图形系统的能力上去了,人们开始更多地考虑到**把地形系统融入到通用的场景管理**中去,如四叉树八叉树什么的就是在这个阶段被广泛应用的;再往后,GPU已经很强大了,CPU由于要承担更复杂的游戏逻辑,越来越成了整个系统的瓶颈,这个阶段,人们琢磨的更多的是,怎么**利用GPU给CPU减负**了,一直到如今,由 GPGPU 带动起来的异构计算,也都是这个路数。----------------------------由于内容比较杂,超大地形这个段落,按上面的描述,咱们分为三个小段分开来讲吧。让俺先沏上一杯碧螺春,为客官一一道来。#### 4.1 古典算法(从 GeoMipMapping,Progressive Mesh 到 ROAM) GeoMipMapping 是从纹理的 MipMapping 技术演化来的一个地表处理技术,原理上是根据任何一小块地形在屏幕上显示的实际尺寸(主要跟与摄像机的距离和起伏程度有关)来选择对应密度的网格,然后把不同分辨率的网格之间以某种方式拼接起来(没有这一步的话就会有裂缝),本质上是一种比较粗糙的区域 LOD 算法。顺便说一下,由于那时候针对顶点级的处理很多,导致这种T型裂缝很常见,以至于有个专门的名字叫“T-Junction”,针对这个的处理在当时也有很多方案。这是俺刚刚到老硬盘里刨出来的大三时写的 GeoMipMapping 代码,编了一下居然还能跑起来。有点土,别介意:P 可以看到不同的 MipMap 级别是用不同的颜色渲染的,也可以看到接头处 T 型裂缝的处理。唉,这代码勾起了俺的青葱回忆啊,那就顺便再来两张 T 型裂缝的示意图和消除过程吧。--------------------------------------------------------Progressive Mesh 是后来很流行的技术 Simplygon 的前身,原理上基本也是一致的,就是以某种方式渐变性地化简某个给定的 Mesh。渐进式网格有两种:视点无关的 (View-Independent Progressive Mesh,VIPM) 和视点相关的 (View-Dependent Progressive Mesh,VDPM)。两者的区别就是,前者预先离线生成好所有的渐变过程,运行时直接用就行(也是后来 Simplygon 采用的方案),而后者随着摄像机的位置和角度的变化,生成对应的简化模型。两相对比,VIPM的好处是运行时运算开销低,简化模型的效果好,缺点是费内存(因为数据都存下来了,当然后来增量的方式能省一些),而VDPM在当时是不错的选择,因为跟VIPM相比不用费额外的内存,而且对于视点(就是摄像机)变化不剧烈的应用,不需要每帧处理和更新对应的简化模型(普通的MMO类的一般一秒一次就够了),此外由于一些简单的遮挡剔除和背面剔除,能够比VIPM裁掉多得多的顶点(一般能多裁1/3到一半吧,在当时这可是头等大事)。总的来说,至少在当时,两者的应用都比较广泛,而到了后来,显存越来越大,总线却越来越紧张,VDPM这种典型的刷顶点的算法(比较费总线带宽)就逐渐失去了市场,这是后话了。大家可以在[这里]()看到一些 PM 在地形渲染上的应用。图咱就不上了,大家可以到 Simplygon 的网站上去看。----------------------------ROAM 可算作是上面提到的 VDPM 更进一步了。这个算法实际上借鉴了当时主流引擎的标配BSP的思路,想利用二叉树这个最简洁的空间描述数据结构,把(CPU端的)顶点消减发挥到极致。整个地表被组织成一个巨大的二叉树,有两个队列,一个是分割队列,一个是合并队列,分别用于处理摄像机移动时,增加进入视野的区域细节和消减退出视野的区域细节。精心设计的 ROAM 效果非常华丽(尤其是在线框模式下),你会看到在各种因素的影响(包括局部坡度,与摄像机的夹角,遮挡情况等等)下,各种三角形像魔术般的不断地变幻,生成和擦除超多的细节,效果非常魔幻。我印象很深的是当时连续打Quake3两个小时完全无感的我,调试这玩意的时候,每每不到十分钟眼就花了。网上找了两张比较典型的 ROAM 大家感受一下吧。--------------------------------------------------------#### 4.2 层次的艺术(Quadtree 和 Chunked LOD)其实用于空间管理的树状结构有四叉树和八叉树(还有上面的二叉树),但地表通常以前者居多。是因为,从小范围来看,变化剧烈的地形是3D的,适合八叉树在xyz三个方向上扩展;但当尺度大到一定规模之后,地形通常退化为相对扁平的2D空间,就像摊平了的地球表面那样,在竖直的Z方向上变化相对不大,而XY平面则是可能无限延伸的。Quadtree 四叉树很直白,具体的细节我就不讲了。值得一提的是四叉树往往也同时用于场景管理的快速剔除和查找,从理论上来讲,四叉树是一个平面上最迅速的用于剔除空间,定位一个物体,内存开销也是相对较低的数据结构。当用于地形渲染时,顶点剔除的效率也很高,我印象中仅次于高度优化的 ROAM。内存开销低主要是因为四叉树是可以完美展开到一个位数组里的,这样的话意味着整个树的利用率达到了百分之百——所有的空间都用来存储数据而不是维持结构。不过四叉树也不是啥都好,T型裂缝就比 GeoMipMapping 难处理,因为存在跨级的多段 T 缝,如下图:除此之外还有一些细节问题,这里就不一一说明了,地形的四叉树渲染还是有很多细节需要细心处理的,此处暂且放下不表。----------------------------Chunked LOD 是一种杂合改良的 LOD,其实糅合了上面说的不少细节,本质上是一种分区块地消减细节的技术。所谓 Chunk 是批量处理的一种方式,只是一种粒度划分的单位而已,跟现在 Java 的 GC 里分区回收概念上差不多。下面是典型的 Chunked LOD 后的效果:顶点多次过滤优化后的效果:效果在当时还是很惊艳的。通常不到50k的渲染数据量已经能有非常逼真的效果了。----------------------------#### 4.3 以GPU为主的技术(从 Paging,Clipmap 到 GPU Terrain)上面的基本上都是传统方案,这一节我们将逐渐过渡并挨个介绍一下以 GPU 为运算主体的算法。----------------------------所谓分页(Paging)实际上是仿效虚拟内存的运行机制的一种方法。由于地表的顶点数据都是静态数据,适合常驻显存。当世界尺度较大时,显存没法一次放入所有数据,那么系统就像虚拟内存那样,把那些暂时没有用到的数据交换出去。随着游戏的进行,Paging In/Out 也在不断进行,辅以一定的异步机制,加载到显存的延迟可以被很好地掩盖。玩家的直观感受就是:哇,海量的细节。----------------------------而 Clipmap 则比 Paging 更进一步,以金字塔的形式逐级把数据排列好,直接整体更新和渲染。从这里也可以看出 GPU 时代人们的思维方式的逐步变迁。从以前顶点级别(Vertex Level)的“锱铢必较”,到后来的一次多塞一点也无所谓,只要批次(Batch)少就 OK。下图可以看出 Clipmap 的基本思路。----------------------------所谓的 GPU Terrain Rendering 就是把高度图从内存里经由 2D Vertex Texture 搬到 VS 里去生成三角面,这样的好处是 CPU 和内存就被彻底解放出来了。只是访问上有一些限制,不像直接处理内存那样方便。具体的细节可以看这里:[GPU Gems 2: Terrain Rendering Using GPU-Based Geometry Clipmaps]()在 GPU 上做还有个巨大的好处是可以借助 Gaussian Noise 即时生成更多的细节了。直接拿一小块预生成的高斯噪点图在需要的时候叠加一下,就能在没太大额外开销的情况下,增加各种细节。如下图所示:----------------------------随着大家对 GPU 理解的深入,地形的处理又有很多的小技巧可以做,尤其是在 PS 里面,比如法线生成,动态uv展开,光照按需叠加/衰减什么的。不过呢据我所知没有什么非常别具一格的架构上的新思路了,所以就不再深入了。### 5. id tech 5 的 megatexture (超大地表上的非重复性海量贴图)megatexture 在当年(2007)是一个非常值得一提的技术。在这个技术出现之前,几乎所有的地表渲染用到的贴图都是若干张 blend 到一起后,以 tiling 的形式重复平铺在地表上的(包括比较典型的魔兽世界也是如此),这样的直接后果是图片的种类用多了耗资源,用少了又很容易感到单调和重复。而 megatexture 则是一张全局的超大贴图,从根本上避免了重复这个问题,理论上(实践上也是)能够生成非常壮丽和独特的地质风貌,是传统的刷地表无法创作出的效果。可以说这个技术让真正的全景地貌成为可能。----------------------------技术上的细节puzzy老师写过一个 pdf,强烈推荐感兴趣的同学搜来看一下(可以搜“ **ID Tech 5 中"Megatexture"针对地形的D3D9
基本实现原理 - 姚勇**”),珠玉在前,我就不啰嗦了。就来一张效果图吧(好吧我知道能坚持看到这儿的同学,这图基本上肯定都看过了)全局超大贴图对一个开放性世界的价值不言而喻。想象一下,跟拿乐高积木拼接出来的视觉效果(传统的 texture blending and tiling)相比,一幅万米画卷上,每个像素都可以随意描绘,是一种什么感受。 比如,你可以相对轻松地实现“整个世界的地貌瞬间被密集核弹蹂躏了一场之后”的效果。如果你想模拟整个生态环境的变迁,在不同粒度上的整体性修改更是无价之宝。----------------------------### 6. 过程式的内容 (Procedural Content Generation)“过程式生成”是一个不是很恰当的翻译,实际上更贴近本意的说法是“以程序的手段生成”,这里我们简洁起见,仍使用过程式生成的字样吧。过程式的内容生成是随机技术的在视觉效果上的一个重要衍生。这个技术虽然到最近才被广泛应用,但实际上从技术角度讲,在很久以前就已经有比较成熟的实现了。我手头的 2003 年出版的翻译版 Game Programming Gems III 中 就有 4.16 和 4.17 连续两篇文章以“程序手段生成的纹理”作为主题。这是构建超大规模的世界的一个重要的技术工具,尤其是与上面的 megatexture 技术结合起来,可以创造出非常令人震撼的视觉复杂度。下面是 sourceforge 上一个开源的项目 [PCity - Procedural Modeling and Rendering of Cities]()可以看出,对于过程式生成来讲,只要有非常小的初始数据集(meta-data),可以在宏观上达到很大尺度和复杂度的视觉效果。过程式生成有两大分支,一个是过程式纹理,另一个是过程式建模(上面的 PCity 属于后者),下面我们分别来谈一谈。#### 6.1 过程式纹理(Procedural Texturing)人们发现,自然界中有很多视觉效果是可以用数学公式加上一些简单的随机性来模拟的,比如云彩,水流,火焰,木纹,大理石,草地,夜空,大气等等,程序生成的纹理效果大大丰富了普通纹理能表现的效果,就好像是物理引擎给游戏增加了活力一样。一个普通的噪点图,在不同的情境下,作为辅助参数来参与生成动态纹理,可以产生出近乎无穷无尽的变化。这是过程式生成的云,出处在[这里]()。这是过程式生成的外观,使用了 Allegorithmic 公司的 Substance Designer,出处在[这里]()这里是一些分解材质,相当于过程式纹理的图素,出处在[这里]()。#### 6.2 过程式建模(Procedural Modeling)过程式建模特指以程序的手段动态建模。这是一个更大的话题,现在比较成熟的中间件的代表是 Speedtree,比如下面这个效果:完全不同风格的纹理,模型的任意杂合,随意生成,效果也非常真实,非常适合做恐怖游戏。在 Speedtree 的网站上还可以看到长成茶壶的树之类的奇葩。我还记得有一年的GDC,在 IDV 的 Speedtree 的展台看到的一段华丽视频,就是各种藤蔓植物在几秒钟之内长满了一个峡谷内的整个大坝,电影级的效果非常震撼,不知道现在网上是否还能找到。----------------------------过程式建模是一项非常迷人的技术,我本人也曾被深深吸引,在上面投入过一段时间的精力。2010年时,我在开发一款飞行射击类的 MMO,当时接触到了 [Gamr7]() 的过程式建模技术,感觉很不错,在飞行类游戏中,地面物体的建模可以完全以程序方式生成,这个对当时的我来说吸引力太大了。那时我花了一个月把 Gamr7 的技术集成到自己的框架里,并在上海世博会期间,与 [Bernard Légaut 先生]() 一起在世博会的法国企业馆展示了合作成果。摘两张当时的 PPT 吧。截图中的素材基本上都是使用了过程式自动生成的(不是美术手放上去的),树是用 speedtree 生成的。总得来说,过程式建模是一项潜力远远没有得到释放的技术,现有的工具还处于比较原始的阶段。在当年 PPT 的技术展望(Beyond the Tech)一节中,我写到“(过程式建模带来的)更高级的抽象使我们可以控制更高的复杂度,从而带来更丰富的细节 (Higher abstraction makes much more details and complexities manageable) ”时至今日,受限于技术的发展,这仍只在某个特定的主题(如 Speedtree 的植被模拟和一般的城市模拟)内有效。对于随机性的粒度,我们仍缺乏有效的手段去控制。当年展望时的两大 Expectation(一个是建立起模式和库抽象从而满足不同层次上的复用需求,另一个是如何统一过程式技术中的无序和有序,有效地控制随机性的粒度),现在据我所知仍是所缺甚多,颇为渺茫。当然了,对有志之士,这也不失为一大探索方向。## 二、内容制作篇:设计和创造(Content Design & Creation)聊完了程序方面的内容,我们来简单讲讲超大规模世界在设计和制作方面的一些情况。这方面因为我不是专家,只是做一下简单的介绍,不足之处,还请专业人士指正。### 1. 随机地图类游戏 (Diablo II) 中地图的拼接在暗黑二,暗黑三和类似的游戏“火炬之光”等游戏中,通过巧妙的拼接,理论上可以通过组合,生成近乎无限大的地图。这是暗黑三第二章里所有地图的可能的部件形状:这是拼接之后的样子:除了拓扑结构上可以任意排列组合以外,在每一个分片上预留足够多的通用接口也很重要。比如一扇拱门,可以是闭合不可交互的状态,也可以通向下一个直角走廊,也可以是通往一个副本的入口。要注意标准化的组件如果太多也会让玩家觉得单调和重复感过强,火炬之光在这一点上就做得不错。下图是火炬之光生成好的地图样貌:可以看到效果还是很不错的,一眼看过去已经不太有重复感了。### 2. 无缝大世界 (World of Warcraft) 中区域地图的拼接无缝世界类游戏的区域拼接和上面的随机生成类游戏的区域拼接是很不一样的。可以看出,不同的区域之间有着很长的接壤线和完全不规则的边缘。在这种情况下,为了简化制作,大部分边界区域以高山作为阻隔。你几乎不怎么会看到有建筑横跨两个不同的区域,原因也是在此。在沙盘制作时,通常的做法是在整个世界地图(对应的世界编辑器)中规划好每个区域的范围,也就是分区分块。每个区域由不同的设计师在场景编辑器中分开制作。在制作当前场景时,与该场景接壤的几个场景的最新版本都会加载上来,编辑器中可以提供一些方便的工具,便于在接壤处对齐。主要是高度的对齐和贴图的融合。前者通常的选择是高度上用 Smooth 工具平滑过渡到邻接场景,后者通常最简单的处理方法是真正的过渡点两边使用同一种贴图即可,实际的美术风格过渡(如果需要的话)在邻接地图的接壤线附近完成。一些贯穿不同地图的元素(如河流等)可能需要世界编辑器的参与来指定水平面的高度和区域范围之类的参数,但这一类元素通常不会太多,因为它们没有明显的 Gameplay 贡献,反而加剧了不同场景之间的耦合。如果游戏有动态的天气/环境氛围系统,那么不同场景之间需要做一些平滑的过渡,这些程序用普通的插值实现就可以了,设计师一般只用关心当前场景内的表现即可。当然有的游戏这个过渡做的不好,玩家体验非常生硬,也是有的。总得来说,这一类无缝大地图的复杂度主要是在编辑器的协同方面(后面我们会再提到),实际的创作复杂度较前面的随机地图生成为低。----------------------------### 3. 卫星地质数据的导入,规整化和再加工(一些飞行模拟类游戏)超大规模的开放性世界地图,还有一类是直接使用卫星地质数据以加强整个世界真实性的。据我所知,育碧出品的 Tom Clancy's H.A.W.X. I & II (就是国内翻译的 鹰击长空 I & II)就是使用了 GeoEye 的商业级高分辨率卫星地图。既然用了真实的卫星地质数据,这一类游戏同样能生成非常震撼的效果,也就不用多说了。找两张截图大家感受一下吧:这一类的缺点是不能模拟真实世界中没有的环境(当然拿去再创作的不算)。这种真实数据的数据源就没什么好说的了,我简单说一下导入后的处理。通常导入后的贴图需要美术在色彩和明暗上二次加工一下,得到和游戏匹配的整体氛围。需要提供比较精确的工具给美术进行高度图和高分辨率纹理的拟合。此外通常这一类地质数据是没有 NormalMap 的,需要提供工具生成一下。还有就是,河流和湖泊这一类水体的处理,3D游戏通常在渲染效果方面对水面特效照顾得比较多。如何生成跟真实环境相匹配的河流和湖泊是一大难点。因为一般游戏里是有一个绝对水平的特效面片的,而如果给真实环境中得来的高度数据上配一个这种特效面片,通常无法跟真实的贴图相吻合(尤其是在山脉和峡谷等地形中的水体)如何提取真实的高分辨率贴图中的水面信息,自动生成对应的3D水面,也是一大话题。当然,如果不怕费事,也可以由美术直接做出来了事。----------------------------### 4. 超大地图的协同编辑:并行操作,数据同步,手动和自动锁的运用现在咱们回过头来聊一聊在 wow 这一类超大地图里,如何在多人团队内协同编辑的问题。----------------------------对于美术(这里专指负责场景的设计师)来说,常见的最简单做法是每人一块(或多块)区域地图,团队内维护一个公共的物件和贴图库。(物件和贴图可以由专门同事制作,需要时也可外包)在这种情况下,美术的并行化程度很大程度上取决于团队自身能力,对场景编辑器没有特殊的技术上的需求。超大地图的场景编辑器在加载周边邻接的区域地图时,需要显式地标示出其版本和上次修改日期,这样可以把邻接区域的修正工作量降到最低。最好的做法是能够通过版本管理软件,在有同事修改了邻接区域以后自动更新并重新加载(当然可以稍有延时,不用那么即时),这样的并行工作效率可以达到最高。真正的难题通常发生在策划那边,当需要编辑跨区任务或事件时,如果对 Ownership (也就是场景实体的所有权问题)管理不善。跨区系统可能会产生各种层出不穷的 bug。比如同一个 npc 承担了多个跨区职责时,其中的状态就可能会互相干扰,在杀掉某个 npc 这一类任务中更易出现,造成难以重现的 bug。这就需要提供明确的所有权管理机制,明确跨区访问的一般规则,提供简单的全局状态检测工具,在设计时就能提示出绝大多数潜在的冲突。当然,这些的先决条件是所有的区域数据,要么提供中央数据库管理,要么工具做到在团队网络内实时同步。----------------------------最后我们来说一下真正有趣的实践,就是“真正的”协同编辑。也就是任意个美术和任意个策划可以工作在任意个区域里。是的,你没看错,这才是终极的开发自由度。其实如果这是一个如典型的 WOW 那样的 MMORPG 的话,这就跟“所有的玩家登录到同一个服务器一起游戏”是同一个概念了。所不同的是,这里的“玩家”实际上全部是开发团队的成员,而且他们是有能力创造和修改这个游戏世界的。只要想通了这个概念,实践上并不像想象中那么复杂。由于美术和策划对同一个地图关注的焦点不同,我们只要把他们工作有交集的部分处理好,他们就能一起愉快地玩耍了。实践上来看,两者的交集通常是 a. 整个区域的逻辑高度图和 b. 所有的相对碰撞关系。也就是说,美术和策划的工作内容里,只要不涉及到这两者,都可以随便搞,但如果影响到了这两者,编辑器需要有能力提示正在修改的人会影响到什么(或按默认行为自动处理),通常是不难做到的。举个例子,策划放好 npc 后,美术去调整高度,把 npc 站的广场弄成一个山坡,那么要么提示美术这么干可能会影响到策划的设计,要么自动把对应的 npc 都重新调整位置,吸附在新的地表高度(一般编辑器允许设置为吸附到地表)。当两个美术在修改同一区域时,就涉及到锁的问题了。锁有两种,一种是在编辑时自动触发,场景地表以区域为单位,物件以 Instance 为单位,当编辑时自动把 Owner 设为当前编辑者,提交改动到服务器时可以选择继续锁或是释放锁。一种是手动锁,就是美术框住一片区域,主动加锁,这样有些时候更方便。编辑器制作者需要考虑的一些细节有:锁住的区域在其他开发者的机器上,需要比较显眼的提示信息;保险起见总是多锁一定的范围,以方便地表平滑等工具编辑时对周边区域的影响,等等。----------------------------## 三、异次元篇:我们的征途是星辰大海上面两部分“程序技术篇”和“内容制作篇”已经把大规模开放世界讲得差不多了,下面的内容我取名叫“异次元篇”,也是随便侃侃,大家随便看看就好。### 1. 终极沙盒(EVE):当规模大到一定程度——宇宙级别的混沌理论与蝴蝶效应对于开放式世界来讲,如果没有真正与这个世界的尺度相配的开放式的交互,那么仍然是一个死气沉沉的世界。EVE,正是一个为了开放式交互而打造的超大的沙盒宇宙。在这个宇宙中,玩家拥有很高的自由度去探索,创造,建设,摧毁(针对自然环境而言),配合,领导,同盟,背叛(针对社会环境而言)。这游戏我就不展开介绍了,有兴趣的同学可以去看一下 [EVEWiki]()。有趣的是,当沙盒大到一定程度时,它会在很多方面展现出一种自平衡的性质,就像经济学中那只“看不见的手”,自然生态学中地球这个大型生态系统的自我调节和自我修复。在我看来,这也是开放式游戏的最大的魅力之一,也让系统的复杂度进一步接近真实世界。### 2. 打通两个宇宙(EVE & Dust):发现更广阔的世界——宇宙沙盒游戏和行星射击游戏联动跟上面列举的诸多成功游戏范例不同的是,我接下来要说的,是一个虽然雄心勃勃,但却没有成功的例子。EVE 的制作商 CCP,是一个来自冰岛的很有趣也很有追求的工作室。在 EVE 的大尺度宇宙成功地运行了若干年后,他们选择了一个更大的挑战——设计另外一个大型多人在线游戏,把新老两个宇宙之间联系起来,让两个游戏内的玩家可以互动,相互交谈,配合,雇佣,指派任务,火力支援或其他的互动,最终打通两个宇宙,让两个大型多人在线游戏之间达到有机的协同和交互。CCP 从一开始就没有掩饰这个雄心勃勃的计划,这是一个令骨灰级玩家们震惊和眩晕的设计,也是一个电子游戏行业从未有过先例的构想。这个构想是如此令人敬畏和富有吸引力,以至于我在拿到 offer 后毫不犹豫地投身 CCP Shanghai 的怀抱。在游戏行业,我感到很幸运,能够有机会参与到这样一个项目中来。然而由于一些大大小小的原因,这个项目最终虽在 PS3 平台上线,却没有取得预期的成功。这里既然与主题无关,我就不打算谈论更多的细节了。在 CCP 两年间,我只是一个很普通的工程师,这里的工作经历极大地拓宽了我的眼界,让我知道了什么是真正的 fearless,对先行者们,我始终满怀敬意,对于自己有机会能参与这样的一个项目,我也始终心怀感激。----------------------------谢谢你们,让我能在晚上凝视夜空的时候,脑海中浮现出更广阔的世界。----------------------------(全文完)Gu Lu[]----------------------------[] 补记:一开始看这个话题有趣,想着说两句。没想到一动笔就停不下来,一口气写了七八个小时我也是蛮拼的。其间或有错漏疏敝之处,让行家笑话了。如发现错误,请不吝指正,在此先行谢过。如引发了有趣的想法,也欢迎在评论中一起讨论。[] 补记:今天中午有半个多小时 Blog 无法访问,后来联系 FarBox 才晓得是流量已经超上限,因为我用的是基础版,每个月100MB流量,可以用5年。结果今天一天的流量就把5年的配额全用完了……刚回到家以后亡羊补牢了一下,把 png 都换成了 jpg,省一点是一点吧 :) FarBox 反应很迅速,赞一下 :)另:文章无版权,可随意转载;是否注明出处,亦无要求。本文同时发在我的 Blog,在那里或可获得更好的阅读体验:
&ol&&li&细节层次(level of detail, LOD):模型需要支持细节层次,以减少几何渲染量,以及纹理数据的内存量及内存频宽。LOD有分离散及连续方式。详情可参与《&a href=&///?target=http%3A///subject/2696310/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Level of Detail for 3d Graphpics (豆瓣)&i class=&icon-external&&&/i&&/a&》。&br&&/li&&li&串流(streaming)及缓存(caching):把数据块在运行时异步载入,并按某些条件御载(如least recently used/LRU)。&br&&/li&&li&可见性检测(visibility determination):除基本的视锥剔除(view frustum culling),还需要离线或线上进行遮挡剔除(occlusion culling)。&br&&/li&&/ol&除了渲染方面,也要考虑游戏模拟方面的部分。例如物理碰撞数据的载入,以及是否进行游戏逻辑的LOD等。&br&&br&----&br&更新:浮点数精度问题&br&&br&由于浮点数的精度有限,单精度浮点数只有不足7个十进制数位,如果距离用米作为单位,离原点1公里的坐标,其精度只有大约1毫米。这对于渲染及模拟都有影响。&br&&br&解决的方法之一,是把世界划分成不同的区域,在区域内的计算使用其局部坐标系统。当对象从一个区域移动至另一区域,要进行坐标转换。但最麻烦的情况是两个区域的游戏对象互相交互,在交互时要把其中一个游戏对象的坐标转换至另一对象的坐标系。
细节层次(level of detail, LOD):模型需要支持细节层次,以减少几何渲染量,以及纹理数据的内存量及内存频宽。LOD有分离散及连续方式。详情可参与《》。 串流(streaming)及缓存(caching):把数据块在运行时…
开放地图大世界的一个关键就是Streaming技术&br&超大地图不光要解决渲染地形这个问题,其他连带的还有各种数据,比如寻路数据,模型数据等,这里统称为map data。&br&Streaming 说白了就是把map data分块保存,比如128m*128m为一个Chunk,每次streaming根据人当前的位置load周围3*3块数据。&br&一般而言和游戏逻辑相关的数据这样就OK了,但是很多情况下,和视觉相关的数据还不能这么简单的处理,比如远处的风景和远处的地形(总不可能只让玩家看到128m*1.5的范围的东西吧,除非你是一个topdown视角的游戏),所以还要考虑lod;地形lod个人觉得CDLOD技术还是很不错的,过渡非常平滑,唯一的问题是必须支持VTF(除了某些手持设备这个好像标配,所以这个不是问题)。有时候为了处理地图边缘这种地方还会用到Terrain Skirt。&br&关于精度问题,就得把所有位置信息都以角色位置为中心做一次转换了。&br&NPC在视野外的问题,个人没做过console(网游这些都是在服务器计算的),基本上只更新逻辑了,根据重要程度来设置逻辑的更新频率。&br&还有一个比较常用的思路就是Hierarchical,也就是分层去处理超大地形上的逻辑,比如寻路之类
开放地图大世界的一个关键就是Streaming技术 超大地图不光要解决渲染地形这个问题,其他连带的还有各种数据,比如寻路数据,模型数据等,这里统称为map data。 Streaming 说白了就是把map data分块保存,比如128m*128m为一个Chunk,每次streaming根据人当前的位置…
已有帐号?
无法登录?
社交帐号登录
程序猿一枚 : )

我要回帖

更多关于 mh4g 简单代码生成器 的文章

 

随机推荐