大话3一点开进出游戏怎么出来个大话脚本错误误...

大话3游戏损坏了。一点进入游戏就处俩对话框:一个是无法找到脚本错误处理参数:一个是脚本错误(null)_百度知道
大话3游戏损坏了。一点进入游戏就处俩对话框:一个是无法找到脚本错误处理参数:一个是脚本错误(null)
能解决好的+分。。。
我有更好的答案
重新装吧、估计是不小心删除文件了吧
采纳率:33%
为您推荐:
其他类似问题
您可能关注的内容
脚本错误的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。举报该问题:
含有法律法规禁止的内容
含有违反《玩家守则》的内容
含有违反《推广员守则》的内容
含有无意义的内容
含有广告相关的内容
含有抄袭或作弊行为的内容
含有不文明言论的内容
含有信息安全问题的内容
含有游戏意见或建议反馈的内容
含有与“知道”定位不符的内容
楼主指定最佳答案
右键点击大话图标,打开属性-查找目标-点击游戏下载工具,打开,修复。一直到他自动提示完成。就OK了。建议使用杀毒时候,看下自动清理垃圾时,有木有把大话补丁,给清理了每周维护后特别容易出现这样的问题。希望帮到楼主。
擅长:任务玩法
官阶:九品儒林郎
其它高悬赏问题
网易通行证大话西游3QQ表情包 159+ 免费版
软件大小:991KB
软件语言:简体中文
软件类型:
软件授权:免费软件
更新时间:
软件类别:QQ表情
软件官网:
网友评分:
应用平台:
902KB | 简体中文
2.21MB | 简体中文
979KB | 简体中文
3.56MB | 简体中文
9.53MB | 简体中文
21KB | 简体中文
2.17MB | 简体中文
804KB | 简体中文
3.49MB | 简体中文
下载错误?
大话西游3QQ表情包 159+ 免费版请先简单游,再打开脚本。
正在读取用户信息!
你现在的位置:&&
新大话2多开新手、阿三钟馗、李靖任务天使v1.6
下载简单游
所有脚本都要在简单游平台上使用哦,下载安装简单游是一切的开始哦!
查看脚本详情,选择功能最适合您的脚本。
您可以多试用几个对比一下哦!
对于有免费试用时间的脚本,您可以在脚本详细页点击【启动脚本】按钮直接试用。
提示:试用前要先下载简单游哦!
充值简单币
在您试用满意后,如果您想订购该脚本,请先充值简单币。
充值好简单币后就可以订购您满意的脚本了。
在脚本详细页面点击【立即订购】按钮进入订购页面,一步步按照提示操作直到订购成功。
订购成功后,您就可以在订购期内无限制使用该脚本了。
作者名称:
炎天使之泪
专区等级:
作者暂无成就
新大话2多开新手、阿三钟馗、李靖任务天使v1.6
试用时间:
更新时间:
脚本人气:
安全认证:
保障服务:
该脚本支持免费试用,您可以试用满意后再订购。
关于脚本使用问题,我们提供每日9小时免费客户服务,时间为9:00至18:00。
简单游平台的脚本均经过专门人员严格检测,保证无毒无木马。
脚本价格:
多开新手任务√多开渔村阿三任务√多开地府钟馗任务√多开天宫李靖任务
不支持系统
(其他系统未知)
系统分辨率
游戏分辨率
等于800X600
前台:游戏窗口必须保持在最前
系统字体要求:宋体
脚本使用说明
重要说明:如果您在启动脚本或使用时发现脚本有这样的问题,请根据以下参考意见解决:1、如果是战斗中,有时候杀完了脚本还在不断切换窗口,不飞回去,这种情况,很可能您把自动战斗图标拉得太偏了脚本识别不到,解决办法就是把所有自动战斗图标拉回脚本中间位置随意,脚本会自动识别和处理的2、脚本不支持win8系统关于任务:1.组队新手任务、渔村阿三、地府钟馗任务----一.序列号:不使用时可不指定文本文件(txt)路径,如果需要使用,请在推广员网站把序列号直接复制到设定的文本文件(txt)中即可,格式是每个序列号一行!使用序列号时,账号设置的数量最好不要超过100个,不然初始检测是否有足够序列号时可能会慢点!二.游戏路径:游戏路径其实就是大话的启动文件(xy2.exe)的路径,脚本中默认的游戏路径“F:\游戏\OnLineGames\Xy2\xy2.exe”只是我这里的情况,每个人电脑中大话客户端存放的位置可能都不相同的,具体的设置方法就是右键大话的快捷方式,选属性,然后把里面“目标”那项内容复制填入脚本相应位置,替换掉“F:\游戏\OnLineGames\Xy2\xy2.exe”即可!脚本自动功能:领双,吃香、换队长带队,穿任务装备,出售任务装备需要手动设置功能:开锦囊,加点,物品处理,账号设定账号设定:请参考界面中的例子的格式,共可设置25组,每一组设定完需要按“保存当前账号设置”按钮来保存该账号的设定丢垃圾物品:可以设置脚本处理一些任务给的常见物品请注意,该功能经过作者测试,确认正常,但我们无法保证在各种不同系统以及硬件、网络环境都能正常使用;可能出现的情况有:(网络卡造成误删除);友情提示:您如果需要使用该功能,请务必先试用确认正常,再将角色装备以及背包内的贵重物品移交到仓库或者其他角色帐号上,以免您在使用该功能时遇到不可知的错误,造成损失;如果您试用出现问题,或者担心脚本功能不正常,请勿使用该功能。2.组队天宫李靖任务----使用符文:支持初级法力符、中级法力符、白玉回源符三种符文,想角色使用哪种符文,只需要在第一物品栏内放置该种符即可,不想使用的话就不要放符到物品栏内1.如果队长号的角色设置了物理攻击的话,那队长号不会使用自动来进行随机攻击,而是会一直点主怪攻击2.更新使用以下几种符文(初级法力符|中级法力符|白玉回源符|护甲符|五行克符|忽视震慑符),要使用哪一种,那个号上只需要放该符即可3.如果有队队伍中有队员死亡,则自行返回队伍地点重新组队继续杀怪,注意所有队员身上都需要带摄妖香
您可能还喜欢以下脚本:
免责声明:简单游所展示的脚本信息由脚本作者自行提供,其真实性、合法性由信息发布人负责。简单游不提供任何保证,并不承担任何法律责任。简单游友情提醒:为了保障您的权益,请试用脚本满意后再订购。----------------------------&br&&br&本文同时发在我的 Blog,在那里或可获得更好的阅读体验:&br&&a href=&//link.zhihu.com/?target=http%3A//gulu-dev.com/post/-open-world& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[知乎] 开放世界游戏中的大地图背后有哪些实现技术?&/a&&br&&br&----------------------------&br&&br&首先肯定一下,这是一个非常有趣的问题。在这个答案里,我将尝试先回答主干问题,再对补充说明里的几个问题简单说一下。&br&&br&下面是本文将涉及到的一些相关技术的列表,(需要说明的是,这些技术单独来看并不复杂,实际动手实现并理解各种取舍以后,在项目当中针对具体的需求去设计和搭配才是关窍之所在)&br&&br&----------------------------&br&&br&&b&一、程序技术篇:算法和架构(Programming Algorithms & Architecture)&/b&&br&1. 无限循环的平铺地图(Infinite Tiling)&br&2. 可预测随机数和无限宇宙(Predictable Random)&br&3. 精度问题解决方案(Precision Problem Solving)&br&4. 超大地形的处理 (Terrain Visualization)&br&
4.1 古典算法(从 GeoMipMapping,Progressive Mesh 到 ROAM) &br&
4.2 层次的艺术(Quadtree 和 Chunked LOD)&br&
4.3 以GPU为主的技术(Paging,Clipmap 到 GPU Terrain)&br&5. id tech 5 的 megatexture (超大地表上的非重复性海量贴图)&br&6. 过程式内容生成 (Procedural Content Generation)&br&
6.1 过程式纹理(Procedural Texturing)&br&
6.2 过程式建模(Procedural Modeling)&br&&br&&b&二、内容制作篇:设计和创造(Content Design & Creation)&/b&&br&1. 随机地图类游戏 (Diablo II) 中地图的拼接&br&2. 无缝大世界 (World of Warcraft) 中区域地图的拼接&br&3. 卫星地质数据的导入,规整化和再加工(一些飞行模拟类游戏)&br&4. 超大地图的协同编辑:并行操作,数据同步,手动和自动锁的运用&br&&br&&b&三、异次元篇:我们的征途是星辰大海&/b&&br&1. 终极沙盒(EVE):当规模大到一定程度——宇宙级别的混沌理论与蝴蝶效应&br&2. 打通两个宇宙(EVE & Dust):发现更广阔的世界——宇宙沙盒游戏和行星射击游戏联动&br&&br&----------------------------&br&&br&## 一、程序技术篇:算法和架构(Programming Algorithms & Architecture)&br&&br&### 1. 无限循环的平铺地图(Infinite Tiling)&br&&br&我们就从最平淡无奇的无限循环平铺地图说起吧。这应该是最原始,也是最没有技术含量的开放世界构筑方式了。&br&&br&技术上由于过于朴素,也没什么好说的,就是在同一个坐标系内像铺地砖那样展开,坐标对齐即可,就是接头处需要注意一下,不要穿帮就行。但是千万别因为简单就小看这个技术哟,上面列表里面的不少技术都是在循环平铺的基础上发展起来的,下面我们就来瞧一瞧吧。&br&&br&按照维度的不同,循环平铺有下面三大类:&br&&br&a. 在一维方向上扩展的横版卷轴游戏(以动作类游戏为主)和纵版卷轴游戏(以射击类游戏为主)。这些类型的游戏里,为了避免循环平铺给玩家带来的重复的疲劳,卷轴游戏会添加一些随机或动态的元素,比如超级玛丽里的背景上云朵的位置,分出多个层次以不同速率卷动的背景层,等等。&br&&br&&figure&&img src=&https://pic2.zhimg.com/ba1ab15421cdadd00a30dd3c736e997d_b.jpg& data-rawwidth=&392& data-rawheight=&220& class=&content_image& width=&392&&&/figure&&br&&br&&br&b. 在二维方向上循环平铺的固定视角2D游戏。这一类游戏里,比较典型的就是 Diablo。暗黑中的随机地图生成,在本质上,就是叠加了一定的随机性,约束和边界条件的循环平铺效果。&br&&br&&figure&&img src=&https://pic3.zhimg.com/47a0c8c78f1adf3afcee_b.jpg& data-rawwidth=&550& data-rawheight=&413& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic3.zhimg.com/47a0c8c78f1adf3afcee_r.jpg&&&/figure&&br&&br&&br&c. 在 3D 游戏里循环平铺高度图,形成连绵不断的地形效果。这在早期的模拟飞行射击类游戏里比较常见,现在已经很难搜到图了,我在上大学的时候写的第一个地形渲染 demo 就是平铺的,可惜刚刚翻硬盘已经找不到了555。这一类游戏,在平铺时适当地辅以一些贴图的变化,可以在很省内存的条件下,做出非常不错的效果。&br&&br&找不到游戏内的图,拿下面这个高度图来凑数吧。请大家脑补一下,把下面这个灰度图立体化之后,一块一块像地砖一样循环平铺以后,3D渲染出来的连绵起伏的直抵地平线(好吧,直抵远裁剪面)的山脉的壮观效果吧。&br&&br&&figure&&img src=&https://pic2.zhimg.com/b9c4ebfd28bccc8475ac1d_b.jpg& data-rawwidth=&512& data-rawheight=&512& class=&origin_image zh-lightbox-thumb& width=&512& data-original=&https://pic2.zhimg.com/b9c4ebfd28bccc8475ac1d_r.jpg&&&/figure&&br&&br&----------------------------&br&&br&### 2. 可预测随机数和无限宇宙(Predictable Random)&br&&br&(本节内的描述和算法,部分参考了《Game Programming Gems I》 [“2.0 Predictable Random Numbers”](&a href=&//link.zhihu.com/?target=http%3A//www.gameenginegems.net/gemsdb/article.php%3Fid%3D75& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Graphics and Game Gems Database&/a&) 一文,请感兴趣的同学自行查找原文通读)&br&&br&有个传说中的游戏叫 Elite ,不知道有没有同学玩到过。据说这游戏运行在32K内存的机器上,其中16K还是只读的ROM。这游戏据说拥有难以匹敌的游戏深度:近乎无限个行星,每一个都有各自的名字和特征。&br&&br&可预测随机数本身是游戏内运用非常广泛的一个技术,这里我们着重谈一下它在为游戏提供(微观上)更丰富的细节和(宏观上)更广阔的世界的作用。这一技术的最重要原则是,为了在一个游戏世界中给出无限空间的幻觉,我们需要满足两个分解条件,可以把它们成为宏无限(macro-infinite)和微无限(micro-infinite)”。前者涉及到问题的空间规模,后者则任意一个对象所支持的最小细节层次级别。&br&&br&----------------------------&br&&br&从实现上来说,如何设定随机种子是这个技术的核心。由于给定一个随机种子,生成的随机序列是完全可预测的,那么根据游戏内的一些时空的设定,通过对随机种子进行一些定制,得到在游戏内任意某个时刻和某个空间点上完全可预测的行为就是可行的了。&br&&br&最简单的是使用以下几个元素与随机种子配合计算:&br&1. 世界坐标(即 X Y Z 值,既可以表示空间中的某个点,也可以表示某个区域)&br&2. 系统时间(可以用真实时间,也可以用游戏内设计者定义的时间,如果是前者的话需要考虑离线时的处理)&br&3. 正态分布(在游戏里建一个查找表即可,这是最廉价的方案)&br&&br&这些因素加上对应的随机序列,已经可以营造出宏观上比较有深度的一个宇宙空间了。理论上,如果所有的随机性都是由给定的随机种子产生,而这些随机种子要么是游戏定义的常量,要么是查表得到,要么是均匀流逝,要么是由更高层次的随机种子生成,那么这样一层一层上溯到尽头的话,任何一个游戏内的宇宙,都可以归因到一个初始的种子,这个种子,就是决定论中经典物理学的所谓的&b&第一推动&/b&吧。其实如果真做到了这一点,我们大可以把这个种子交给玩家,在首次进入游戏的时候掷一个 2^64 骰子。这是真正的上帝创世的感觉,想象一下,上帝说,要有光,于是掷出了骰子,第一推动怦然落地,整个时空的巨大齿轮开始运转,在不同的时间点和空间点上,更多的随机序列被生成出来...&br&&br&&figure&&img src=&https://pic1.zhimg.com/50bde2249146cce4ea9c_b.jpg& data-rawwidth=&640& data-rawheight=&517& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/50bde2249146cce4ea9c_r.jpg&&&/figure&&br&&br&&br&这幅图来自于游戏 Frontier:Elite II(出自[这篇文章](&a href=&//link.zhihu.com/?target=http%3A//rakanalysis.wordpress.com//from-the-archive-frontier-elite-ii-a-retrospective-review/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&rakanalysis.wordpress.com&/span&&span class=&invisible&&//from-the-archive-frontier-elite-ii-a-retrospective-review/&/span&&span class=&ellipsis&&&/span&&/a&)),下面配的字样是:&b&“This picture doesn't even begin to show the scale of the universe.”&/b& 大家感受一下。&br&&br&----------------------------&br&&br&微观上本质上也是一样的,只是把发散的过程倒过来,变成了逐级收敛的过程。为了在某一个点上放大时,能得到尽可能细致,准确和一致的表现,我们需要对较低层次的世界定义更丰富的规则和约束,比如黑洞对周围的影响情况,双星体系的轨道,恒星的种类与行星个数之间的对应关系,不同恒星系结构下行星表面的大气构成,等等。这样才能较好地平衡多样性和独特性,带来更真实的模拟效果和更令人信服的游戏体验。&br&&br&----------------------------&br&&br&### 3. 精度问题解决方案&br&&br&当足够大尺度的世界被创建出来时,就会自然而然地遇到精度的问题。同时这也是补充说明中提到的一个问题,这里我们简单介绍一下几种实践中的解决方案。&br&&br&先描述一下问题吧,我们知道,IEEE754 中规定的32位浮点数中,有23位是用来表示尾数的。也就是说,对于接近1的浮点数,可能会带来 2E-24 左右的误差(大约是 0.)以现实单位计算的话,如果游戏世界是边长为100km的正方形,那么在这个正方形的最远角落里,我们的最小空间单位是约 7.8 毫米;而如果是中国这么大的面积的话,空间误差将达**半米**左右。那么可以想象一下,如果是宇宙级别的游戏,采用32位浮点数作为全地图精度,那么实际误差可能会有多么大。&br&&br&在实践中,这种误差可能会带来以下这些影响:&br&&br&1. &b&无法将相邻的对象对齐&/b&。这种情况,场景美术(关卡设计师)应该会比较头疼,这对于游戏的编辑器来说是大问题了。物件没法在引擎编辑器里对齐;在不同的平台上,对齐也不一样;甚至不同的编译器,同一个编译器的不同版本编出来的引擎;对齐都不一样 ... 所以说处女座不要做 LD :P。&br&2. &b&模型间的穿插和裂缝&/b& 本来封闭的墙角可能漏个洞,本来放在地上的石头变成了悬浮在空中。这实际上是上一种的变种。&br&3. &b&骨骼动画的抖动&/b& 由于世界矩阵往往参与骨骼动画的运算,误差可能会被逐级放大,在那些最远离根骨骼的骨头上(也是玩家最容易注意到的地方),抖动可能会发生得非常剧烈。&br&4. &b&物理模拟失真&/b& 一些柔体的模拟可能会直接失败,而刚体也可能会产生怪异的运动。碰撞系统也可能无法正常工作。&br&&br&所有这些一旦发生,都是很容易觉察的。一旦你发现在一个很大的坐标上有这些问题,而接近原点处问题却消失了,那么很有可能就是精度在作怪。而需要注意的是,出现这种问题,只和游戏中出现的数字的规模和跨度有关,和游戏选择了什么样的长度单位(如用毫米还是公里做单位)无关。&br&&br&----------------------------&br&&br&那么怎样使用有限的坐标精度来描述较大尺度的世界呢?&br&&br&最直接的方案是 &b&使用双精度浮点数 &/b&(64 位),如果这是可接受的选择,那么就不必费心引入后面讨论的复杂度了。&br&&br&其次是 &b&区域划分法&/b& 。我看到 &a data-hash=&1e2cccc3ce33& href=&//www.zhihu.com/people/1e2cccc3ce33& class=&member_mention& data-editable=&true& data-title=&@Milo Yip& data-hovercard=&p$b$1e2cccc3ce33&&@Milo Yip&/a&
同学已提到,不过这里出于完整性的考虑,再简单说一下。正如 Milo 同学所说,“把世界划分成不同的区域,在区域内的计算使用其局部坐标系统。”相对应的跨区访问,需要对应的“本地A -& 世界 -& 本地B”的坐标转换。&br&&br&还有一个方案是 &b&节点中转法&/b&。正如移动电话的基站用来承载和协调整个通信网络那样,我们在游戏的给定活动区域使用静态信标,所有的逻辑上与之相关的单位,都以该信标的坐标作为参考单位,这样也可以做到把数据访问局部化。相距足够远的两个物体(相当于上面的跨区访问)交互总是通过静态信标来完成(正如移动电话网络中发生的那样),这样的好处是相关的复杂度可以隔绝在这个中转系统的内部。&br&&br&此外
&a data-hash=&9a5b0b946e064a3a170f04c2d3563a78& href=&//www.zhihu.com/people/9a5b0b946e064a3a170f04c2d3563a78& class=&member_mention& data-editable=&true& data-title=&@凯丁& data-hovercard=&p$b$9a5b0b946e064a3a170f04c2d3563a78&&@凯丁&/a&
同学提到了一个&b&坐标转换法&/b&,“所有位置信息都以角色位置为中心做一次转换”。这正是 《Game Programming Gems IV》 [“4.0 Solving Accuracy Problems in Large World Coordinates”](&a href=&//link.zhihu.com/?target=http%3A//www.gameenginegems.net/gemsdb/article.php%3Fid%3D280& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Graphics and Game Gems Database&/a&) 文中的方案。这个方案可以解决部分问题(主要是渲染相关的问题),但是仍有一些问题需要考虑,比如:1. (上面提到的)编辑器内操作的物体,在序列化到文件中时,精度丢失的问题。2. 大部分物理模拟通常需要一个角色无关,摄像机无关的全局坐标系。等等。&br&&br&----------------------------&br&&br&### 4. 超大地形的处理 (Terrain Visualization)&br&&br&终于说到对超大地形的处理了。可以说从上世纪九十年代起,超大地形的可视化,一直是3D游戏领域热门的话题。今天我们就借着这个机会,把相关的算法和实现理一理吧。&br&&br&考虑到篇幅太长的话,俺的手指头招架不住,再一个不少对这个话题感兴趣的同学可能压根就不是程序员,一些实现细节可能我就只是简单提一下,贴代码什么的还是算了,尽量保证整篇文章的信息浓度适中吧。&br&&br&----------------------------&br&&br&总的来说,这十多年来,地形渲染技术的发展史就是一部生动的对现代GPU的开发,利用和改进史。整个过程大致可以分成三个阶段:一开始,GPU处理顶点能力很弱,这个时期的各种精巧算法(如一些VDPM和后期的ROAM),**尽力在用CPU来降低顶点的总量**,避免一不留神压垮图形系统;后来,图形系统的能力上去了,人们开始更多地考虑到**把地形系统融入到通用的场景管理**中去,如四叉树八叉树什么的就是在这个阶段被广泛应用的;再往后,GPU已经很强大了,CPU由于要承担更复杂的游戏逻辑,越来越成了整个系统的瓶颈,这个阶段,人们琢磨的更多的是,怎么**利用GPU给CPU减负**了,一直到如今,由 GPGPU 带动起来的异构计算,也都是这个路数。&br&&br&----------------------------&br&&br&由于内容比较杂,超大地形这个段落,按上面的描述,咱们分为三个小段分开来讲吧。让俺先沏上一杯碧螺春,为客官一一道来。&br&&br&#### 4.1 古典算法(从 GeoMipMapping,Progressive Mesh 到 ROAM) &br&&br&&b&GeoMipMapping&/b& 是从纹理的 MipMapping 技术演化来的一个地表处理技术,原理上是根据任何一小块地形在屏幕上显示的实际尺寸(主要跟与摄像机的距离和起伏程度有关)来选择对应密度的网格,然后把不同分辨率的网格之间以某种方式拼接起来(没有这一步的话就会有裂缝),本质上是一种比较粗糙的区域 LOD 算法。顺便说一下,由于那时候针对顶点级的处理很多,导致这种T型裂缝很常见,以至于有个专门的名字叫“T-Junction”,针对这个的处理在当时也有很多方案。&br&&br&&figure&&img src=&https://pic2.zhimg.com/a009ae667fd9_b.jpg& data-rawwidth=&551& data-rawheight=&398& class=&origin_image zh-lightbox-thumb& width=&551& data-original=&https://pic2.zhimg.com/a009ae667fd9_r.jpg&&&/figure&&br&&br&这是俺刚刚到老硬盘里刨出来的大三时写的 GeoMipMapping 代码,编了一下居然还能跑起来。有点土,别介意:P 可以看到不同的 MipMap 级别是用不同的颜色渲染的,也可以看到接头处 T 型裂缝的处理。唉,这代码勾起了俺的青葱回忆啊,那就顺便再来两张 T 型裂缝的示意图和消除过程吧。&br&&br&&figure&&img src=&https://pic3.zhimg.com/14d993ba8c1bdde03a2e_b.jpg& data-rawwidth=&522& data-rawheight=&535& class=&origin_image zh-lightbox-thumb& width=&522& data-original=&https://pic3.zhimg.com/14d993ba8c1bdde03a2e_r.jpg&&&/figure&&br&&br&----------------------------&br&&br&&figure&&img src=&https://pic1.zhimg.com/cd4ebdf412bfe4538a6ddd1fb7b2a3fc_b.jpg& data-rawwidth=&612& data-rawheight=&495& class=&origin_image zh-lightbox-thumb& width=&612& data-original=&https://pic1.zhimg.com/cd4ebdf412bfe4538a6ddd1fb7b2a3fc_r.jpg&&&/figure&&br&&br&----------------------------&br&&br&&b&Progressive Mesh&/b& 是后来很流行的技术 Simplygon 的前身,原理上基本也是一致的,就是以某种方式渐变性地化简某个给定的 Mesh。&br&&br&渐进式网格有两种:视点无关的 (View-Independent Progressive Mesh,VIPM) 和视点相关的 (View-Dependent Progressive Mesh,VDPM)。两者的区别就是,前者预先离线生成好所有的渐变过程,运行时直接用就行(也是后来 Simplygon 采用的方案),而后者随着摄像机的位置和角度的变化,生成对应的简化模型。两相对比,VIPM的好处是运行时运算开销低,简化模型的效果好,缺点是费内存(因为数据都存下来了,当然后来增量的方式能省一些),而VDPM在当时是不错的选择,因为跟VIPM相比不用费额外的内存,而且对于视点(就是摄像机)变化不剧烈的应用,不需要每帧处理和更新对应的简化模型(普通的MMO类的一般一秒一次就够了),此外由于一些简单的遮挡剔除和背面剔除,能够比VIPM裁掉多得多的顶点(一般能多裁1/3到一半吧,在当时这可是头等大事)。&br&&br&总的来说,至少在当时,两者的应用都比较广泛,而到了后来,显存越来越大,总线却越来越紧张,VDPM这种典型的刷顶点的算法(比较费总线带宽)就逐渐失去了市场,这是后话了。&br&&br&大家可以在[这里](&a href=&//link.zhihu.com/?target=http%3A//www.cbloom.com/3d/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3d Page (www.cbloom.com/3d)&/a&)看到一些 PM 在地形渲染上的应用。图咱就不上了,大家可以到 Simplygon 的网站上去看。&br&&br&----------------------------&br&&br&&b&ROAM&/b& 可算作是上面提到的 VDPM 更进一步了。这个算法实际上借鉴了当时主流引擎的标配BSP的思路,想利用二叉树这个最简洁的空间描述数据结构,把(CPU端的)顶点消减发挥到极致。整个地表被组织成一个巨大的二叉树,有两个队列,一个是分割队列,一个是合并队列,分别用于处理摄像机移动时,增加进入视野的区域细节和消减退出视野的区域细节。精心设计的 ROAM 效果非常华丽(尤其是在线框模式下),你会看到在各种因素的影响(包括局部坡度,与摄像机的夹角,遮挡情况等等)下,各种三角形像魔术般的不断地变幻,生成和擦除超多的细节,效果非常魔幻。我印象很深的是当时连续打Quake3两个小时完全无感的我,调试这玩意的时候,每每不到十分钟眼就花了。&br&&br&网上找了两张比较典型的 ROAM 大家感受一下吧。&br&&br&&figure&&img src=&https://pic2.zhimg.com/07be8d1e331b9b1b7ebae1_b.jpg& data-rawwidth=&1003& data-rawheight=&749& class=&origin_image zh-lightbox-thumb& width=&1003& data-original=&https://pic2.zhimg.com/07be8d1e331b9b1b7ebae1_r.jpg&&&/figure&&br&&br&----------------------------&br&&br&&figure&&img src=&https://pic3.zhimg.com/d276affe4ed461cb33408e_b.jpg& data-rawwidth=&636& data-rawheight=&398& class=&origin_image zh-lightbox-thumb& width=&636& data-original=&https://pic3.zhimg.com/d276affe4ed461cb33408e_r.jpg&&&/figure&&br&&br&----------------------------&br&&br&&br&#### 4.2 层次的艺术(Quadtree 和 Chunked LOD)&br&&br&其实用于空间管理的树状结构有四叉树和八叉树(还有上面的二叉树),但地表通常以前者居多。是因为,从小范围来看,变化剧烈的地形是3D的,适合八叉树在xyz三个方向上扩展;但当尺度大到一定规模之后,地形通常退化为相对扁平的2D空间,就像摊平了的地球表面那样,在竖直的Z方向上变化相对不大,而XY平面则是可能无限延伸的。&br&&br&&b&Quadtree&/b& 四叉树很直白,具体的细节我就不讲了。值得一提的是四叉树往往也同时用于场景管理的快速剔除和查找,从理论上来讲,四叉树是一个平面上最迅速的用于剔除空间,定位一个物体,内存开销也是相对较低的数据结构。当用于地形渲染时,顶点剔除的效率也很高,我印象中仅次于高度优化的 ROAM。内存开销低主要是因为四叉树是可以完美展开到一个位数组里的,这样的话意味着整个树的利用率达到了百分之百——所有的空间都用来存储数据而不是维持结构。&br&&br&不过四叉树也不是啥都好,T型裂缝就比 GeoMipMapping 难处理,因为存在跨级的多段 T 缝,如下图:&br&&br&&figure&&img src=&https://pic2.zhimg.com/1b93ffaf7dfefee85af1_b.jpg& data-rawwidth=&326& data-rawheight=&311& class=&content_image& width=&326&&&/figure&&br&&br&&br&除此之外还有一些细节问题,这里就不一一说明了,地形的四叉树渲染还是有很多细节需要细心处理的,此处暂且放下不表。&br&&br&----------------------------&br&&br&&b&Chunked LOD&/b& 是一种杂合改良的 LOD,其实糅合了上面说的不少细节,本质上是一种分区块地消减细节的技术。所谓 Chunk 是批量处理的一种方式,只是一种粒度划分的单位而已,跟现在 Java 的 GC 里分区回收概念上差不多。&br&&br&下面是典型的 Chunked LOD 后的效果:&br&&br&&figure&&img src=&https://pic3.zhimg.com/f061aa7fd657ea01a4fbb4b5b7579c7a_b.jpg& data-rawwidth=&1015& data-rawheight=&378& class=&origin_image zh-lightbox-thumb& width=&1015& data-original=&https://pic3.zhimg.com/f061aa7fd657ea01a4fbb4b5b7579c7a_r.jpg&&&/figure&&br&&br&顶点多次过滤优化后的效果:&br&&br&&figure&&img src=&https://pic2.zhimg.com/fcaffd00ee8d67b93aa2701_b.jpg& data-rawwidth=&901& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&901& data-original=&https://pic2.zhimg.com/fcaffd00ee8d67b93aa2701_r.jpg&&&/figure&&br&&br&&br&效果在当时还是很惊艳的。通常不到50k的渲染数据量已经能有非常逼真的效果了。&br&&br&----------------------------&br&&br&#### 4.3 以GPU为主的技术(从 Paging,Clipmap 到 GPU Terrain)&br&&br&上面的基本上都是传统方案,这一节我们将逐渐过渡并挨个介绍一下以 GPU 为运算主体的算法。&br&&br&----------------------------&br&&br&所谓&b&分页&/b&(Paging)实际上是仿效虚拟内存的运行机制的一种方法。由于地表的顶点数据都是静态数据,适合常驻显存。当世界尺度较大时,显存没法一次放入所有数据,那么系统就像虚拟内存那样,把那些暂时没有用到的数据交换出去。随着游戏的进行,Paging In/Out 也在不断进行,辅以一定的异步机制,加载到显存的延迟可以被很好地掩盖。玩家的直观感受就是:哇,海量的细节。&br&&br&&figure&&img src=&https://pic1.zhimg.com/ea740fdbaed05c5102354_b.jpg& data-rawwidth=&996& data-rawheight=&798& class=&origin_image zh-lightbox-thumb& width=&996& data-original=&https://pic1.zhimg.com/ea740fdbaed05c5102354_r.jpg&&&/figure&&br&&br&----------------------------&br&&br&而 &b&Clipmap &/b&则比 Paging 更进一步,以金字塔的形式逐级把数据排列好,直接整体更新和渲染。从这里也可以看出 GPU 时代人们的思维方式的逐步变迁。从以前顶点级别(Vertex Level)的“锱铢必较”,到后来的一次多塞一点也无所谓,只要批次(Batch)少就 OK。下图可以看出 Clipmap 的基本思路。&br&&br&&figure&&img src=&https://pic2.zhimg.com/811bdc0e3fb8be4ab928d5_b.jpg& data-rawwidth=&1071& data-rawheight=&467& class=&origin_image zh-lightbox-thumb& width=&1071& data-original=&https://pic2.zhimg.com/811bdc0e3fb8be4ab928d5_r.jpg&&&/figure&&br&&br&----------------------------&br&&br&所谓的 &b&GPU Terrain Rendering&/b& 就是把高度图从内存里经由 2D Vertex Texture 搬到 VS 里去生成三角面,这样的好处是 CPU 和内存就被彻底解放出来了。只是访问上有一些限制,不像直接处理内存那样方便。具体的细节可以看这里:[GPU Gems 2: Terrain Rendering Using GPU-Based Geometry Clipmaps](&a href=&//link.zhihu.com/?target=http%3A//http.developer.nvidia.com/GPUGems2/gpugems2_chapter02.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GPU Gems - Chapter 2. Terrain Rendering Using GPU-Based Geometry Clipmaps&/a&)&br&&br&在 GPU 上做还有个巨大的好处是可以借助 Gaussian Noise 即时生成更多的细节了。直接拿一小块预生成的高斯噪点图在需要的时候叠加一下,就能在没太大额外开销的情况下,增加各种细节。如下图所示:&br&&br&&figure&&img src=&https://pic3.zhimg.com/fba8d154a04fe4c1e3a8c24e4d8645fe_b.jpg& data-rawwidth=&418& data-rawheight=&194& class=&content_image& width=&418&&&/figure&&br&&br&----------------------------&br&&br&随着大家对 GPU 理解的深入,地形的处理又有很多的小技巧可以做,尤其是在 PS 里面,比如法线生成,动态uv展开,光照按需叠加/衰减什么的。不过呢据我所知没有什么非常别具一格的架构上的新思路了,所以就不再深入了。&br&&br&### 5. id tech 5 的 megatexture (超大地表上的非重复性海量贴图)&br&&br&&b&megatexture &/b&在当年(2007)是一个非常值得一提的技术。在这个技术出现之前,几乎所有的地表渲染用到的贴图都是若干张 blend 到一起后,以 tiling 的形式重复平铺在地表上的(包括比较典型的魔兽世界也是如此),这样的直接后果是图片的种类用多了耗资源,用少了又很容易感到单调和重复。而 megatexture 则是一张全局的超大贴图,从根本上避免了重复这个问题,理论上(实践上也是)能够生成非常壮丽和独特的地质风貌,是传统的刷地表无法创作出的效果。可以说这个技术让&b&真正的全景地貌&/b&成为可能。&br&&br&----------------------------&br&&br&技术上的细节puzzy老师写过一个 pdf,强烈推荐感兴趣的同学搜来看一下(可以搜“ **ID Tech 5 中&Megatexture&针对地形的D3D9
基本实现原理 - 姚勇**”),珠玉在前,我就不啰嗦了。就来一张效果图吧(好吧我知道能坚持看到这儿的同学,这图基本上肯定都看过了)&br&&br&&figure&&img src=&https://pic4.zhimg.com/cbca123634bdd402a1b1f_b.jpg& data-rawwidth=&845& data-rawheight=&474& class=&origin_image zh-lightbox-thumb& width=&845& data-original=&https://pic4.zhimg.com/cbca123634bdd402a1b1f_r.jpg&&&/figure&&br&&br&&br&全局超大贴图对一个开放性世界的价值不言而喻。想象一下,跟拿乐高积木拼接出来的视觉效果(传统的 texture blending and tiling)相比,一幅万米画卷上,每个像素都可以随意描绘,是一种什么感受。 比如,你可以相对轻松地实现“整个世界的地貌瞬间被密集核弹蹂躏了一场之后”的效果。如果你想模拟整个生态环境的变迁,在不同粒度上的整体性修改更是无价之宝。&br&&br&----------------------------&br&&br&### 6. 过程式的内容 (Procedural Content Generation)&br&&br&“过程式生成”是一个不是很恰当的翻译,实际上更贴近本意的说法是“以程序的手段生成”,这里我们简洁起见,仍使用过程式生成的字样吧。&br&&br&过程式的内容生成是随机技术的在视觉效果上的一个重要衍生。这个技术虽然到最近才被广泛应用,但实际上从技术角度讲,在很久以前就已经有比较成熟的实现了。我手头的 2003 年出版的翻译版 Game Programming Gems III 中 就有 4.16 和 4.17 连续两篇文章以“程序手段生成的纹理”作为主题。这是构建超大规模的世界的一个重要的技术工具,尤其是与上面的 megatexture 技术结合起来,可以创造出非常令人震撼的视觉复杂度。&br&&br&下面是 sourceforge 上一个开源的项目 [PCity - Procedural Modeling and Rendering of Cities](&a href=&//link.zhihu.com/?target=http%3A//pcity.sourceforge.net/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&pcity.sourceforge.net/&/span&&span class=&invisible&&&/span&&/a&)&br&&br&&figure&&img src=&https://pic1.zhimg.com/cbcc074d9af37573efa264_b.jpg& data-rawwidth=&500& data-rawheight=&350& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/cbcc074d9af37573efa264_r.jpg&&&/figure&&br&&br&&br&可以看出,对于过程式生成来讲,只要有非常小的初始数据集(meta-data),可以在宏观上达到很大尺度和复杂度的视觉效果。&br&&br&过程式生成有两大分支,一个是过程式纹理,另一个是过程式建模(上面的 PCity 属于后者),下面我们分别来谈一谈。&br&&br&#### 6.1 过程式纹理(Procedural Texturing)&br&&br&人们发现,自然界中有很多视觉效果是可以用数学公式加上一些简单的随机性来模拟的,比如云彩,水流,火焰,木纹,大理石,草地,夜空,大气等等,程序生成的纹理效果大大丰富了普通纹理能表现的效果,就好像是物理引擎给游戏增加了活力一样。一个普通的噪点图,在不同的情境下,作为辅助参数来参与生成动态纹理,可以产生出近乎无穷无尽的变化。&br&&br&这是过程式生成的云,出处在[这里](&a href=&//link.zhihu.com/?target=http%3A//www.indigorenderer.com/content/cloud-render& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&indigorenderer.com/cont&/span&&span class=&invisible&&ent/cloud-render&/span&&span class=&ellipsis&&&/span&&/a&)。&br&&br&&figure&&img src=&https://pic2.zhimg.com/a2d0cb4d450d87e0f78aa5_b.jpg& data-rawwidth=&640& data-rawheight=&470& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/a2d0cb4d450d87e0f78aa5_r.jpg&&&/figure&&br&&br&&br&这是过程式生成的外观,使用了 Allegorithmic 公司的 Substance Designer,出处在[这里](&a href=&//link.zhihu.com/?target=http%3A//blog.mediarain.com/2013/03/procedural-textures-using-allegorithmic-substance-designer/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Procedural Textures Using Allegorithmic Substance Designer&/a&)&br&&br&&figure&&img src=&https://pic2.zhimg.com/d97d1b72b376c0f4a7b5_b.jpg& data-rawwidth=&600& data-rawheight=&397& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/d97d1b72b376c0f4a7b5_r.jpg&&&/figure&&br&&br&&br&这里是一些分解材质,相当于过程式纹理的图素,出处在[这里](&a href=&//link.zhihu.com/?target=http%3A//www.3dtotal.com/team/Tutorials/yann_vaugne/alientut_1.asp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3DTotal Tutorials&/a&)。&br&&br&&figure&&img src=&https://pic3.zhimg.com/3a78e82f759f3fa435cb6d748e1f8c8e_b.jpg& data-rawwidth=&660& data-rawheight=&289& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&https://pic3.zhimg.com/3a78e82f759f3fa435cb6d748e1f8c8e_r.jpg&&&/figure&&br&&br&&figure&&img src=&https://pic2.zhimg.com/476d36fcd65a624a782c1c_b.jpg& data-rawwidth=&660& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&https://pic2.zhimg.com/476d36fcd65a624a782c1c_r.jpg&&&/figure&&br&&br&&br&#### 6.2 过程式建模(Procedural Modeling)&br&&br&过程式建模特指以程序的手段动态建模。这是一个更大的话题,现在比较成熟的中间件的代表是 Speedtree,比如下面这个效果:&br&&br&&figure&&img src=&https://pic1.zhimg.com/4bcaa7624a40_b.jpg& data-rawwidth=&470& data-rawheight=&354& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic1.zhimg.com/4bcaa7624a40_r.jpg&&&/figure&&br&&br&完全不同风格的纹理,模型的任意杂合,随意生成,效果也非常真实,非常适合做恐怖游戏。在 Speedtree 的网站上还可以看到长成茶壶的树之类的奇葩。我还记得有一年的GDC,在 IDV 的 Speedtree 的展台看到的一段华丽视频,就是各种藤蔓植物在几秒钟之内长满了一个峡谷内的整个大坝,电影级的效果非常震撼,不知道现在网上是否还能找到。&br&&br&----------------------------&br&&br&过程式建模是一项非常迷人的技术,我本人也曾被深深吸引,在上面投入过一段时间的精力。2010年时,我在开发一款飞行射击类的 MMO,当时接触到了 [Gamr7](&a href=&//link.zhihu.com/?target=https%3A//www.linkedin.com/company/Ftrk%3Dprof-exp-company-name& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GAMR7 | LinkedIn&/a&) 的过程式建模技术,感觉很不错,在飞行类游戏中,地面物体的建模可以完全以程序方式生成,这个对当时的我来说吸引力太大了。那时我花了一个月把 Gamr7 的技术集成到自己的框架里,并在上海世博会期间,与 [Bernard Légaut 先生](&a href=&//link.zhihu.com/?target=https%3A//www.linkedin.com/profile/view%3Fid%3D518127& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sign Up | LinkedIn&/a&) 一起在世博会的法国企业馆展示了合作成果。摘两张当时的 PPT 吧。&br&&br&&figure&&img src=&https://pic3.zhimg.com/9a64e3a7f4cf451f65046d6_b.jpg& data-rawwidth=&697& data-rawheight=&311& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&https://pic3.zhimg.com/9a64e3a7f4cf451f65046d6_r.jpg&&&/figure&&br&&br&截图中的素材基本上都是使用了过程式自动生成的(不是美术手放上去的),树是用 speedtree 生成的。&br&&br&&figure&&img src=&https://pic2.zhimg.com/d703c36c8829bcd54394cceffee951f9_b.jpg& data-rawwidth=&688& data-rawheight=&486& class=&origin_image zh-lightbox-thumb& width=&688& data-original=&https://pic2.zhimg.com/d703c36c8829bcd54394cceffee951f9_r.jpg&&&/figure&&br&&br&总得来说,过程式建模是一项&b&潜力远远没有得到释放&/b&的技术,现有的工具还处于比较原始的阶段。在当年 PPT 的技术展望(Beyond the Tech)一节中,我写到“(过程式建模带来的)&b&更高级的抽象使我们可以控制更高的复杂度,从而带来更丰富的细节&/b& (Higher abstraction makes much more details and complexities manageable) ”时至今日,受限于技术的发展,这仍只在某个特定的主题(如 Speedtree 的植被模拟和一般的城市模拟)内有效。对于随机性的粒度,我们仍缺乏有效的手段去控制。当年展望时的两大 Expectation(一个是建立起模式和库抽象从而满足不同层次上的复用需求,另一个是如何统一过程式技术中的无序和有序,有效地控制随机性的粒度),现在据我所知仍是所缺甚多,颇为渺茫。当然了,对有志之士,这也不失为一大探索方向。&br&&br&## 二、内容制作篇:设计和创造(Content Design & Creation)&br&&br&聊完了程序方面的内容,我们来简单讲讲超大规模世界在设计和制作方面的一些情况。这方面因为我不是专家,只是做一下简单的介绍,不足之处,还请专业人士指正。&br&&br&### 1. 随机地图类游戏 (Diablo II) 中地图的拼接&br&&br&在暗黑二,暗黑三和类似的游戏“火炬之光”等游戏中,通过巧妙的拼接,理论上可以通过组合,生成近乎无限大的地图。&br&&br&这是暗黑三第二章里所有地图的可能的部件形状:&br&&br&&figure&&img src=&https://pic3.zhimg.com/60bec5a77fca5dc757902ca_b.jpg& data-rawwidth=&500& data-rawheight=&100& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/60bec5a77fca5dc757902ca_r.jpg&&&/figure&&br&&br&这是拼接之后的样子:&br&&br&&figure&&img src=&https://pic4.zhimg.com/5fb656b3e25e2e62b36d22fb_b.jpg& data-rawwidth=&500& data-rawheight=&138& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/5fb656b3e25e2e62b36d22fb_r.jpg&&&/figure&&br&&br&除了拓扑结构上可以任意排列组合以外,在每一个分片上预留足够多的通用接口也很重要。比如一扇拱门,可以是闭合不可交互的状态,也可以通向下一个直角走廊,也可以是通往一个副本的入口。&br&&br&&figure&&img src=&https://pic2.zhimg.com/11d07faf7de61e5a95efc42f2c0a9cad_b.jpg& data-rawwidth=&377& data-rawheight=&246& class=&content_image& width=&377&&&/figure&&br&&br&要注意标准化的组件如果太多也会让玩家觉得单调和重复感过强,火炬之光在这一点上就做得不错。下图是火炬之光生成好的地图样貌:&br&&br&&figure&&img src=&https://pic2.zhimg.com/bedf54acebad_b.jpg& data-rawwidth=&562& data-rawheight=&552& class=&origin_image zh-lightbox-thumb& width=&562& data-original=&https://pic2.zhimg.com/bedf54acebad_r.jpg&&&/figure&&br&&br&&br&可以看到效果还是很不错的,一眼看过去已经不太有重复感了。&br&&br&### 2. 无缝大世界 (World of Warcraft) 中区域地图的拼接&br&&br&无缝世界类游戏的区域拼接和上面的随机生成类游戏的区域拼接是很不一样的。&br&&br&&figure&&img src=&https://pic3.zhimg.com/ce2cd240a21f544ce1e575e8f3113d4e_b.jpg& data-rawwidth=&647& data-rawheight=&473& class=&origin_image zh-lightbox-thumb& width=&647& data-original=&https://pic3.zhimg.com/ce2cd240a21f544ce1e575e8f3113d4e_r.jpg&&&/figure&&br&&br&可以看出,不同的区域之间有着很长的接壤线和完全不规则的边缘。在这种情况下,为了简化制作,大部分边界区域以高山作为阻隔。你几乎不怎么会看到有建筑横跨两个不同的区域,原因也是在此。&br&&br&在沙盘制作时,通常的做法是在整个世界地图(对应的世界编辑器)中规划好每个区域的范围,也就是分区分块。每个区域由不同的设计师在场景编辑器中分开制作。在制作当前场景时,与该场景接壤的几个场景的最新版本都会加载上来,编辑器中可以提供一些方便的工具,便于在接壤处对齐。主要是高度的对齐和贴图的融合。前者通常的选择是高度上用 Smooth 工具平滑过渡到邻接场景,后者通常最简单的处理方法是真正的过渡点两边使用同一种贴图即可,实际的美术风格过渡(如果需要的话)在邻接地图的接壤线附近完成。&br&&br&一些贯穿不同地图的元素(如河流等)可能需要世界编辑器的参与来指定水平面的高度和区域范围之类的参数,但这一类元素通常不会太多,因为它们没有明显的 Gameplay 贡献,反而加剧了不同场景之间的耦合。&br&&br&如果游戏有动态的天气/环境氛围系统,那么不同场景之间需要做一些平滑的过渡,这些程序用普通的插值实现就可以了,设计师一般只用关心当前场景内的表现即可。当然有的游戏这个过渡做的不好,玩家体验非常生硬,也是有的。&br&&br&&figure&&img src=&https://pic4.zhimg.com/dd626dd98dc8a4e748f3407_b.jpg& data-rawwidth=&478& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&478& data-original=&https://pic4.zhimg.com/dd626dd98dc8a4e748f3407_r.jpg&&&/figure&&br&&br&总得来说,这一类无缝大地图的复杂度主要是在编辑器的协同方面(后面我们会再提到),实际的创作复杂度较前面的随机地图生成为低。&br&&br&----------------------------&br&&br&### 3. 卫星地质数据的导入,规整化和再加工(一些飞行模拟类游戏)&br&&br&超大规模的开放性世界地图,还有一类是直接使用卫星地质数据以加强整个世界真实性的。据我所知,育碧出品的 Tom Clancy's H.A.W.X. I & II (就是国内翻译的 鹰击长空 I & II)就是使用了 GeoEye 的商业级高分辨率卫星地图。&br&&br&既然用了真实的卫星地质数据,这一类游戏同样能生成非常震撼的效果,也就不用多说了。找两张截图大家感受一下吧:&br&&br&&figure&&img src=&https://pic4.zhimg.com/ec729b132d78e7ce40f14fe1efb1d8df_b.jpg& data-rawwidth=&844& data-rawheight=&472& class=&origin_image zh-lightbox-thumb& width=&844& data-original=&https://pic4.zhimg.com/ec729b132d78e7ce40f14fe1efb1d8df_r.jpg&&&/figure&&br&&br&这一类的缺点是不能模拟真实世界中没有的环境(当然拿去再创作的不算)。&br&&br&&figure&&img src=&https://pic2.zhimg.com/fd28ccd7e9a4aee822e79abe214ff119_b.jpg& data-rawwidth=&840& data-rawheight=&525& class=&origin_image zh-lightbox-thumb& width=&840& data-original=&https://pic2.zhimg.com/fd28ccd7e9a4aee822e79abe214ff119_r.jpg&&&/figure&&br&&br&这种真实数据的数据源就没什么好说的了,我简单说一下导入后的处理。通常导入后的贴图需要美术在色彩和明暗上二次加工一下,得到和游戏匹配的整体氛围。需要提供比较精确的工具给美术进行高度图和高分辨率纹理的拟合。此外通常这一类地质数据是没有 NormalMap 的,需要提供工具生成一下。&br&&br&还有就是,河流和湖泊这一类水体的处理,3D游戏通常在渲染效果方面对水面特效照顾得比较多。如何生成跟真实环境相匹配的河流和湖泊是一大难点。因为一般游戏里是有一个绝对水平的特效面片的,而如果给真实环境中得来的高度数据上配一个这种特效面片,通常无法跟真实的贴图相吻合(尤其是在山脉和峡谷等地形中的水体)如何提取真实的高分辨率贴图中的水面信息,自动生成对应的3D水面,也是一大话题。当然,如果不怕费事,也可以由美术直接做出来了事。&br&&br&----------------------------&br&&br&### 4. 超大地图的协同编辑:并行操作,数据同步,手动和自动锁的运用&br&&br&现在咱们回过头来聊一聊在 wow 这一类超大地图里,如何在多人团队内协同编辑的问题。&br&&br&----------------------------&br&&br&对于美术(这里专指负责场景的设计师)来说,常见的最简单做法是每人一块(或多块)区域地图,团队内维护一个公共的物件和贴图库。(物件和贴图可以由专门同事制作,需要时也可外包)在这种情况下,美术的并行化程度很大程度上取决于团队自身能力,对场景编辑器没有特殊的技术上的需求。&br&&br&超大地图的场景编辑器在加载周边邻接的区域地图时,需要显式地标示出其版本和上次修改日期,这样可以把邻接区域的修正工作量降到最低。最好的做法是能够通过版本管理软件,在有同事修改了邻接区域以后自动更新并重新加载(当然可以稍有延时,不用那么即时),这样的并行工作效率可以达到最高。&br&&br&真正的难题通常发生在策划那边,当需要编辑跨区任务或事件时,如果对 Ownership (也就是场景实体的所有权问题)管理不善。跨区系统可能会产生各种层出不穷的 bug。比如同一个 npc 承担了多个跨区职责时,其中的状态就可能会互相干扰,在杀掉某个 npc 这一类任务中更易出现,造成难以重现的 bug。这就需要提供明确的所有权管理机制,明确跨区访问的一般规则,提供简单的全局状态检测工具,在设计时就能提示出绝大多数潜在的冲突。当然,这些的先决条件是所有的区域数据,要么提供中央数据库管理,要么工具做到在团队网络内实时同步。&br&&br&----------------------------&br&&br&最后我们来说一下真正有趣的实践,就是&b&“真正的”协同编辑&/b&。也就是任意个美术和任意个策划可以工作在任意个区域里。是的,你没看错,这才是终极的开发自由度。其实如果这是一个如典型的 WOW 那样的 MMORPG 的话,这就跟“所有的玩家登录到同一个服务器一起游戏”是同一个概念了。所不同的是,这里的“玩家”实际上全部是开发团队的成员,而且他们是有能力创造和修改这个游戏世界的。&br&&br&只要想通了这个概念,实践上并不像想象中那么复杂。由于美术和策划对同一个地图关注的焦点不同,我们只要把他们工作有交集的部分处理好,他们就能一起愉快地玩耍了。实践上来看,两者的交集通常是 a. 整个区域的逻辑高度图和 b. 所有的相对碰撞关系。也就是说,美术和策划的工作内容里,只要不涉及到这两者,都可以随便搞,但如果影响到了这两者,编辑器需要有能力提示正在修改的人会影响到什么(或按默认行为自动处理),通常是不难做到的。举个例子,策划放好 npc 后,美术去调整高度,把 npc 站的广场弄成一个山坡,那么要么提示美术这么干可能会影响到策划的设计,要么自动把对应的 npc 都重新调整位置,吸附在新的地表高度(一般编辑器允许设置为吸附到地表)。&br&&br&当两个美术在修改同一区域时,就涉及到锁的问题了。锁有两种,一种是在编辑时自动触发,场景地表以区域为单位,物件以 Instance 为单位,当编辑时自动把 Owner 设为当前编辑者,提交改动到服务器时可以选择继续锁或是释放锁。一种是手动锁,就是美术框住一片区域,主动加锁,这样有些时候更方便。编辑器制作者需要考虑的一些细节有:锁住的区域在其他开发者的机器上,需要比较显眼的提示信息;保险起见总是多锁一定的范围,以方便地表平滑等工具编辑时对周边区域的影响,等等。&br&&br&----------------------------&br&&br&## 三、异次元篇:我们的征途是星辰大海&br&&br&上面两部分“程序技术篇”和“内容制作篇”已经把大规模开放世界讲得差不多了,下面的内容我取名叫“异次元篇”,也是随便侃侃,大家随便看看就好。&br&&br&### 1. 终极沙盒(EVE):当规模大到一定程度——宇宙级别的混沌理论与蝴蝶效应&br&&br&对于开放式世界来讲,如果没有真正与这个世界的尺度相配的开放式的交互,那么仍然是一个死气沉沉的世界。EVE,正是一个为了开放式交互而打造的超大的沙盒宇宙。&br&&br&&figure&&img src=&https://pic3.zhimg.com/388eefd9e72efe_b.jpg& data-rawwidth=&550& data-rawheight=&322& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic3.zhimg.com/388eefd9e72efe_r.jpg&&&/figure&&br&&br&在这个宇宙中,玩家拥有很高的自由度去探索,创造,建设,摧毁(针对自然环境而言),配合,领导,同盟,背叛(针对社会环境而言)。这游戏我就不展开介绍了,有兴趣的同学可以去看一下 [EVEWiki](&a href=&//link.zhihu.com/?target=http%3A//evewiki.tiancity.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EVEWiki&/a&)。有趣的是,当沙盒大到一定程度时,它会在很多方面展现出一种自平衡的性质,就像经济学中那只“看不见的手”,自然生态学中地球这个大型生态系统的自我调节和自我修复。在我看来,这也是开放式游戏的最大的魅力之一,也让系统的复杂度进一步接近真实世界。&br&&br&&br&### 2. 打通两个宇宙(EVE & Dust):发现更广阔的世界——宇宙沙盒游戏和行星射击游戏联动&br&&br&跟上面列举的诸多成功游戏范例不同的是,我接下来要说的,是一个虽然雄心勃勃,但却没有成功的例子。&br&&br&EVE 的制作商 CCP,是一个来自冰岛的很有趣也很有追求的工作室。在 EVE 的大尺度宇宙成功地运行了若干年后,他们选择了一个更大的挑战——设计另外一个大型多人在线游戏,把新老两个宇宙之间联系起来,让两个游戏内的玩家可以互动,相互交谈,配合,雇佣,指派任务,火力支援或其他的互动,最终打通两个宇宙,让两个大型多人在线游戏之间达到有机的协同和交互。&br&&br&&figure&&img src=&https://pic2.zhimg.com/1bea998ba34d78b5a3fb1_b.jpg& data-rawwidth=&640& data-rawheight=&360& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/1bea998ba34d78b5a3fb1_r.jpg&&&/figure&&br&&br&CCP 从一开始就没有掩饰这个雄心勃勃的计划,这是一个令骨灰级玩家们震惊和眩晕的设计,也是一个电子游戏行业从未有过先例的构想。&br&&br&这个构想是如此令人敬畏和富有吸引力,以至于我在拿到 offer 后毫不犹豫地投身 CCP Shanghai 的怀抱。在游戏行业,我感到很幸运,能够有机会参与到这样一个项目中来。然而由于一些大大小小的原因,这个项目最终虽在 PS3 平台上线,却没有取得预期的成功。这里既然与主题无关,我就不打算谈论更多的细节了。&br&&br&在 CCP 两年间,我只是一个很普通的工程师,这里的工作经历极大地拓宽了我的眼界,让我知道了什么是真正的 fearless,对先行者们,我始终满怀敬意,对于自己有机会能参与这样的一个项目,我也始终心怀感激。&br&&br&----------------------------&br&&br&谢谢你们,让我能在晚上凝视夜空的时候,脑海中浮现出更广阔的世界。&br&&br&----------------------------&br&&br&(全文完)&br&Gu Lu&br&[]&br&&br&----------------------------&br&&br&[] 补记:一开始看这个话题有趣,想着说两句。没想到一动笔就停不下来,一口气写了七八个小时我也是蛮拼的。其间或有错漏疏敝之处,让行家笑话了。如发现错误,请不吝指正,在此先行谢过。如引发了有趣的想法,也欢迎在评论中一起讨论。&br&&br&[] 补记:今天中午有半个多小时 Blog 无法访问,后来联系 FarBox 才晓得是流量已经超上限,因为我用的是基础版,每个月100MB流量,可以用5年。结果今天一天的流量就把5年的配额全用完了……刚回到家以后亡羊补牢了一下,把 png 都换成了 jpg,省一点是一点吧 :) FarBox 反应很迅速,赞一下 :)&br&&br&另:文章无版权,可随意转载;是否注明出处,亦无要求。&br&&br&本文同时发在我的 Blog,在那里或可获得更好的阅读体验:&br&&a href=&//link.zhihu.com/?target=http%3A//gulu-dev.com/post/-open-world& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[知乎] 开放世界游戏中的大地图背后有哪些实现技术?&/a&
---------------------------- 本文同时发在我的 Blog,在那里或可获得更好的阅读体验:
---------------------------- 首先肯定一下,这是一个非常有趣的问题。在这个答案里,我将尝试先回答主干问题,…
&figure&&img src=&https://pic1.zhimg.com/v2-ea72b4cf63bcf_b.jpg& data-rawwidth=&1010& data-rawheight=&677& class=&origin_image zh-lightbox-thumb& width=&1010& data-original=&https://pic1.zhimg.com/v2-ea72b4cf63bcf_r.jpg&&&/figure&3D角色头顶会显示文字、图标、血条等,它会跟随角色移动,始终朝向相机,可能还有定制的缩放,一般情况下会考虑用UGUI来做,但完成后发现这样做的效率很低,而且遮挡正确性也保证不了。&p&效率低因为:&/p&&p&1,渲染上每块文字、图片都要用一次drawcall,图片文字又可能是交替出现的没法利用dynamic batching,UGUI的渲染顺序是hierachy从上到下,基本上必然交替出现。一个角色头顶UI就可能要1至5+个drawcall,比角色自身的还多。&/p&&p&2,UGUI的元素都要放到canvas节点下,同步位置、朝向、缩放是很大的消耗,同时会触发canvas重新刷新UI的vertex buffer,虽然是在其他线程上刷新的,但仍然很慢。如果每个头顶UI都配一个canvas挂载角色节点下,实测发现性能更差。下图是100个角色头顶有图标和名字的profiling,可以看到同步pose比整个游戏的渲染还高&/p&&figure&&img src=&https://pic4.zhimg.com/v2-74c22d74a20cfa96c6c528_b.jpg& data-rawwidth=&792& data-rawheight=&327& class=&origin_image zh-lightbox-thumb& width=&792& data-original=&https://pic4.zhimg.com/v2-74c22d74a20cfa96c6c528_r.jpg&&&/figure&&p&遮挡不正确因为:头顶UI属于透明物体,需要从远到近渲染,但是UGUI是根据Hierachy从上到下的,没法根据远近排序,这就会造成远处角色的头顶UI挡住自己角色的,看着别扭,尤其在自由视角的游戏中。&br&&/p&&p&想要效率高必须得在一个drawcall里渲染图文,且能用到dynamic batching,dynamic batching是在渲染线程上进行的还能省主线程时间。不用UI而是当作一般3D物体渲染就能用到引擎的透明排序正确遮挡。&/p&&p&Unity自带的TextMesh可以做到遮挡正确,但是没法同时渲染图文,也没代码可改,所以pass。&/p&&p&Asset Store上找下插件&/p&&p&TextMeshPro是很强大的插件,用SDF(signed distance field有向距离场)的方式使放大的文字锐利很多,但是不支持动态字体,只能是预先生成的bitmap里固定的字,无法满足常用汉字之外的显示,又pass。以后可以说下SDF渲染文字的原理。&/p&&p&SuperTextMesh:能渲染动态文字,富文本支持图文混排,缺点是支持atlas但很弱,资源管理、解析效率内存占用都算不上优秀。好在有源码可以改,就选这个了。&/p&&br&&br&&p&&b&一个drawcall同时渲染图文的方式就是用混合,一个材质带文字和atlas两张贴图,用3套uv进行混合,uv1是文字的,uv2是图片的,uv3表示混合权重,显示文字的quad文字权重为1图片为0,显示图片的quad文字权重为0图片权重为1,sample两张图混合一下就行了。&/b&&/p&&p&性能比之前好很多,下面是2001个带图文的SuperTextMesh,2000个在时刻改变位置。合批到了4个drawcall,更新pose的脚本消耗有数量级的降低。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f780b0ae7b9bb2b8734820_b.jpg& data-rawwidth=&788& data-rawheight=&821& class=&origin_image zh-lightbox-thumb& width=&788& data-original=&https://pic1.zhimg.com/v2-f780b0ae7b9bb2b8734820_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-ad8d8c3b6a36f82d4aa5577_b.jpg& data-rawwidth=&824& data-rawheight=&168& class=&origin_image zh-lightbox-thumb& width=&824& data-original=&https://pic2.zhimg.com/v2-ad8d8c3b6a36f82d4aa5577_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-fc74f00420fdde8f54707e_b.jpg& data-rawwidth=&775& data-rawheight=&249& class=&origin_image zh-lightbox-thumb& width=&775& data-original=&https://pic2.zhimg.com/v2-fc74f00420fdde8f54707e_r.jpg&&&/figure&&p&&figure&&img src=&https://pic7.zhimg.com/v2-cb9bc96ebbb859f1f94521d_b.jpg& data-rawwidth=&697& data-rawheight=&255& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&https://pic7.zhimg.com/v2-cb9bc96ebbb859f1f94521d_r.jpg&&&/figure&&br&策划想要的图文基本都能搞定。国内挺多游戏在优化的时候都会发现是UI的瓶颈,UWA的专家们也说见怪不怪了:D&/p&&p&--------------------------------------------------------------&/p&&p&最后附带招聘贴&/p&&p&北京上市游戏公司招聘客户端程序员,手机MMO项目,负责功能逻辑、战斗逻辑,渲染、工具、底层框架其中的一至多项。&/p&&p&要求编程、数据结构、操作系统方面有扎实的基础,聪明好学仔细认真,擅长团队协作,沟通顺畅对事不对人,有相关项目经验或图形学、编辑器开发等特长尤佳。&/p&&p&公司待遇福利不错,项目组有很多高手,公司也有技术积累,有意者站内信联系。&/p&&p&本人邮箱: yesbaba艾特qq点坑&/p&
3D角色头顶会显示文字、图标、血条等,它会跟随角色移动,始终朝向相机,可能还有定制的缩放,一般情况下会考虑用UGUI来做,但完成后发现这样做的效率很低,而且遮挡正确性也保证不了。效率低因为:1,渲染上每块文字、图片都要用一次drawcall,图片文字又…
&figure&&img src=&https://pic1.zhimg.com/v2-3ce794c8fbe0b12c01c3_b.jpg& data-rawwidth=&1200& data-rawheight=&538& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic1.zhimg.com/v2-3ce794c8fbe0b12c01c3_r.jpg&&&/figure&&p&作为独立开发者或者小型开发团队,由于直接沟通成本较低,过多的项目管理流程反而使得开发过程变得繁琐,除此之外也因资源有限,小型开发团队很少设有专职的项目经理控制项目进度,以至于规范的项目管理方法常常在小团队开发中被忽视。也正因如此,如若没有外部压力(例如发行商的督促)独立开发团队也较容易因缺乏有效预估和进度控制等原因导致项目拖延。&/p&&p&因而本文整理了一些个人认为对于独立团队来说相对实用的项目管理方法,希望对各位有所启发。称之为“指南”其实并不很贴切,本文中所提及的方法主要来源于在NYU
Game Center的一门项目管理课程Production
Practicum中所学,结合个人的实际经验进行的简易总结,并不能被当作严谨全面的“指南”,希望借此抛砖引玉,欢迎各位也来分享自己认为实用的项目管理方法。&/p&&p&项目管理的核心可以概括为随时明确谁应该在什么时候做当下最该做的事情以及为什么要做,并且最大化的减少未知的模糊性。而项目开发分为三个阶段&b&Pre-Production(开发前)&/b&,&b&Production(开发中)&/b&,&b&Post-Production(开发后)&/b&。 那么各阶段中又都有哪些重要的项目管理方法呢?(超长预警)&/p&&br&&ul&&li&&b&&u&Pre-Production&/u&&/b&&br&&/li&&ul&&li&&b&Waterful vs Scrum瀑布式开发及敏捷开发&/b&&/li&&li&&b&Pitch Doc / Project Summary 直观概括的项目文档&/b&&/li&&ul&&li&Design Wiki&/li&&li&1-Page Design Doc&br&&/li&&/ul&&li&&b&Project Plan 项目计划&/b&&br&&/li&&ul&&li&MileStone 里程碑&/li&&li&Product Backlog/Feature List 待完成任务&br&&/li&&li&Sprint 快速迭代 &br&&/li&&li&User stories&br&&/li&&li&Size: Story Points 关于工作量预估&br&&/li&&ul&&li&Planning Poker计划扑克&br&&/li&&/ul&&li&Burn Down Chart & Velocity Chart&br&&/li&&/ul&&li&&b&Daily/Weekly Check-in每日站会&br&&/b&&/li&&li&&b&Version Control版本控制&br&&/b&&/li&&li&&b&Pipeline 工作流程&br&&/b&&/li&&li&&b&Build Note 更新笔记 + Bug Report 问题报告 + Playtest 测试&br&&/b&&/li&&/ul&&li&&b&&u&Post-Production&/u&&/b&&/li&&ul&&li&&b&Retrospective 及时回顾总结&/b&&/li&&/ul&&/ul&&br&&br&&br&&br&&h2&&b&Pre-Production &
Production&/b&&/h2&&p&&b&&u&Waterful VS Scrum&/u&&u&瀑布式开发及敏捷开发&/u&&/b&&/p&&br&&figure&&img src=&https://pic2.zhimg.com/v2-afdd7c527578ed_b.jpg& data-rawwidth=&406& data-rawheight=&246& class=&content_image& width=&406&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-bcd2e56d7_b.png& data-rawwidth=&902& data-rawheight=&570& class=&origin_image zh-lightbox-thumb& width=&902& data-original=&https://pic4.zhimg.com/v2-bcd2e56d7_r.jpg&&&/figure&&p&在项目立项之初,首先需要确定的是团队要采用的开发方法,是&b&瀑布式开发&/b&还是&b&敏捷开发&/b&。 传统的&b&瀑布式开发&/b&强调把每一个阶段都做到完美才进入下一个阶段。从需求分析到设计,从设计到开发(程序,美术等)再到测试。瀑布模型强调文档,前期没有迭代与反馈,因而对于需求不明确易变更的项目很不灵活。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-8121628fac55e55d693eddc8bbbe6e13_b.jpg& data-rawwidth=&640& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-8121628fac55e55d693eddc8bbbe6e13_r.jpg&&&/figure&&p&而在游戏开发中,个人认为好游戏不是想出来的而是改出来的,一切以玩家为中心才是好游戏的根本,非商业向的游戏需求变更更是家常便饭。因而强调小版本及频繁迭代与测试的&b&敏捷开发&/b&(例如Scrum模型)或许更加适合游戏,不仅是小团队,目前也已基本被业界普遍推广采用。敏捷开发灵活性高,强调面对面的及时交流(例如Daily
Check-in日常站会等),快速迭代(以Sprint为指导的短周期开发),经常性的打包可运行版本及时测试等等。后文中将讨论的方法基本是&b&敏捷开发&/b&中常用到的一些方法。&/p&&br&&br&&p&-----------------------------------------&/p&&br&&p&&b&&u&Pitch Doc / Project Summary &/u&&u&直观概括的项目文档&/u&&/b&&/p&&br&&p&在独立开发团队中常常被忽视的重要一环便是项目预估,而有效的项目预估可以帮助我们更好地把控全局,正确评估任务优先级,明确进度,最大化地减小未知模糊性等。而在项目立项之初,预估的第一项便是Pitch
Document了,大概可以称之为创意文档,以最少的篇幅简要地描述游戏的核心内容。设计者在将创意写下来的过程中不仅可以帮助其明确创意雏形,也是立项后项目开发方向的核心指导。Pitch
Doc需要随着项目变化保持更新,是在向他人介绍游戏时的重要参考文件。这类文档约在2-5页左右,主要解决以下几个问题:&/p&&ul&&li&&i&&b&你想要做什么?&/b&&br&&/i&&/li&&ul&&li&&i&Overview: 一句话概述游戏&/i&&/li&&li&&i&Platform & Genre: 目标平台及游戏类型&/i&&/li&&li&&i&Gameplay: 核心玩法概述(可以配合图示解说,参考下文1-Page Design Doc)&/i&&/li&&li&&i&Feature: 为什么要做这个游戏?/为什么是一个值得做的项目?/有什么与众不同的特点?…(若是商业项目,可能需要简单的竞品分析)&/i&&/li&&li&&i&同类产品: 为了更方便迅速的理解游戏,可以简要提及相似的同类型作品&/i&&/li&&/ul&&li&&i&&b&它看起来是什么样的?&/b&&br&&/i&&/li&&ul&&li&&i&美术方向:展示概念设计或参考图等&/i&&/li&&/ul&&li&&i&&b&你打算怎么做?&/b&&br&&/i&&/li&&ul&&li&&i&Team: 简要描述团队成员分工及强项(为何可以很好的完成这个项目)&/i&&/li&&li&&i&Scope, Budget, Timeline: 简要描述项目规模,预算及时间规划&/i&&/li&&/ul&&/ul&&br&&br&&p&&b&Design Wiki & 1-Page Design Doc&/b&&br&&/p&&p&除了Pitch
Doc外,在之后的开发中也还会配合增加一些必须的项目文档。但在敏捷开发中,繁冗传统的设计文档由于沟通成本过高并且没人想要读一本几十页的说明书,已经很少再作为沟通的媒介使用。以下两项是目前在行业内需要使用必要的设计说明文件时较常使用的方法:&/p&&p&&b&Design Wiki &/b&(比如可以参考看看Stardew Valley的 Wiki &a href=&http://link.zhihu.com/?target=http%3A//stardewvalleywiki.com/Stardew_Valley_Wiki& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Official Stardew Valley Wiki&/a&)&/p&&p&简单来说是将传统文档变成在线文档,易检索与更新,方便共同编辑。通常作为查询归档使用,并不太作为开发指导文件。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b150a25edcdcf_b.jpg& data-rawwidth=&604& data-rawheight=&427& class=&origin_image zh-lightbox-thumb& width=&604& data-original=&https://pic4.zhimg.com/v2-b150a25edcdcf_r.jpg&&&/figure&&br&&p&&b&1-Page Design Doc &/b&(详参GDC讲座地址&a href=&http://link.zhihu.com/?target=http%3A//www.gdcvault.com/play/1012356/One-Page& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&One-Page Designs&/a&)&/p&&p&1-Page Design Doc是提高文档使用率及沟通效率的新形式。最初灵感源之一是建筑工程图纸,强调以最少的篇幅(仅一页!)及直观的图示诠释设计。一页的篇幅极大地减轻了开发人员阅读繁冗文字的痛苦,并且使得及时交流与更新变得更为便捷,图示相较于文字也更容易展示系统间的关系及动态变化。1-Page
Design Doc我们较常见的类型可能是UX设计中常用的Flow
Chart界面流程图,但其实也可用于其他设计中,常见的比如还有关卡设计,核心玩法解析等。&/p&&p&(在网上无意发现了一个设计师的个人网站中有不少使用了1-Page
Design Doc的例子,可以看看&a href=&http://link.zhihu.com/?target=http%3A//bobbyross.com/tutorials/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TUTORIALS&/a&)&/p&&figure&&img src=&https://pic3.zhimg.com/v2-b0c24d191bb86_b.jpg& data-rawwidth=&564& data-rawheight=&795& class=&origin_image zh-lightbox-thumb& width=&564& data-original=&https://pic3.zhimg.com/v2-b0c24d191bb86_r.jpg&&&/figure&&br&&br&-----------------------------------------&p&&u&&b&Project Plan &/b&&/u&&u&&b&项目计划&/b&&/u&&/p&&p&&b&项目计划表&/b&可以算是项目管理中的核心文件了,小团队由于人力不足没有精力维护大量文件,因此在我自己的项目中,我把时间表,里程碑,以及Backlog,Sprint的任务安排都集合在了这个表里。这样我日常维护的文件基本就只有Project
Plan及后文将提到的Build
Note了。&/p&&p&下图便是我目前项目在用的计划表,可以看到[顶部横轴]是时间节点划分以及里程碑相关内容。时间点跟工作密度相关,我的表内大概是半周一格,如果工作密度高可以分得更细。&/p&&p&[左侧竖轴]第一列是大类类别(设计/美术/程序/音乐等),第二列再将每类分为不同的Sprint主题以及Backlog,三四列便是写成User
Stories形式的具体任务或者也可以说是Feature
List了,每个任务旁对应的是使用Story
Points预估的工作量。&/p&&p&中间可以用色块定义对应任务安排的时间段,不同的颜色代表由不同的人负责。定期完成的就变成深色,没有对应计划时间完成的,计划就变为灰色。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-6a3a0b13a023b4b4da93d5e_b.jpg& data-rawwidth=&2880& data-rawheight=&1259& class=&origin_image zh-lightbox-thumb& width=&2880& data-original=&https://pic3.zhimg.com/v2-6a3a0b13a023b4b4da93d5e_r.jpg&&&/figure&&br&&p&&b&MileStone 里程碑&/b&&/p&&p&里程碑应该不用过多的解释,主要是根据自己项目的情况定义一些重要的时间节点,再根据工作量及优先级安排这个时间段内的工作。里程碑应当包括时间点及定义为“完成”的具体内容或标准。&/p&&br&&br&&p&&b&Product Backlog/Feature List 待完成任务&/b&&/p&&br&&p&我们在文初已经简要的提及了敏捷开发的工作模式,敏捷开发将一个长期的大项目切分成数个短周期,每个周期历时约为1-4周不等,称为一个&b&Sprint&/b&(冲刺)。在立项之初,根据定下的&b&Pitch
Doc&/b&,团队成员要将目标转化为一系列待开发的&b&Feature
List&/b&(待实现的功能/特点),进而形成最初的&b&Backlog&/b&(待完成的任务)。&/p&&p&在项目开发早期,比如仍在快速Prototype阶段时,可能由于项目需求尚不明确,提出的Backlog会比较大和模糊。不过没关系,这个时候不要认为这项工作是无用的,Backlog及Feature
List会在项目不断清晰的过程中不断迭代更新,你的预估也会越来越准确。&/p&&p&例如下图中所示,Product
Backlog通常包含标题名,状态,描述(写成User
Stories的形式),以及Size工作量预估等。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-eaea52c90cc2cdfb61f3d_b.png& data-rawwidth=&1634& data-rawheight=&693& class=&origin_image zh-lightbox-thumb& width=&1634& data-original=&https://pic2.zhimg.com/v2-eaea52c90cc2cdfb61f3d_r.jpg&&&/figure&&br&&p&&b&Sprint 快速迭代 &/b&&br&&/p&&p&那么定义完最初的Backlog之后,我们就可以开始进入以Sprint为基础的开发阶段了。首先根据预估中对项目全局的把控及优先级的判断,确立当前Sprint的主题及定义为“完成”的标准及内容,然后从总Backlog中拿出符合这个Sprint的部分,将他们分解为易评估的具体任务并补充未考虑到的任务,根据优先级排序形成我们这个Sprint的“&b&To Do
List(待办)&/b&”。每天的日常站会(详见后文)后更新任务版,将今天要完成的任务从“To
Do(要做)”移至“In
Progress(进行中)”,将已完成的任务移至待测试/确认一栏。&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-3ce794c8fbe0b12c01c3_b.jpg& data-rawwidth=&1200& data-rawheight=&538& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic4.zhimg.com/v2-3ce794c8fbe0b12c01c3_r.jpg&&&/figure&&b&任务管理看板&/b&作为日常进度控制的主要管理方法,可以使用实体的,也可以使用例如Trello等软件完成。但因为这样的看板不太利于归档记录,因此上面所说的Project
Plan便可以承担总控制归档的角色,从Project
Plan中取出相应的Backlog,Sprint完成后再归档更新至Project
Plan即可。我因为团队很小且情况特殊,项目看板只有我一人使用,因而为了方便我没有重复使用额外的看板,而是直接使用了Project
Plan进行进度追踪。&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-f34fc94f6d7bb287ccd3_b.png& data-rawwidth=&987& data-rawheight=&494& class=&origin_image zh-lightbox-thumb& width=&987& data-original=&https://pic4.zhimg.com/v2-f34fc94f6d7bb287ccd3_r.jpg&&&/figure&在每个Sprint结束后都要完成一个可以交付试玩的版本,并立即进行测试,根据反馈评估这次的工作并调整接下来的计划。不要因为担心游戏不完美就憋着不测试,尽早的接触游戏的核心服务主体“玩家”才能尽快的发现问题及时调整开发方向。敏捷开发极其强调可玩性,要求优先维护玩家体验。对可交付版本的高要求及高频率自然而然地会帮助我们明确哪些是可以提高可玩性及用户体验的任务,并优先完成他们,这也是我认为在游戏开发中应首要考虑的部分。&/p&&br&&br&&p&&b&User stories&/b&&/p&&br&&p&Backlog的需求描述通常需要写成User
Stories的形式,用最清晰的表述方法让这个需求的目的明确且易评估。标准写法格式如下:&/p&&p&As a…, I want to…, so that…&/p&&p&作为&角色&,我想要&行为&,以便于&目的&。&/p&&p&其中需要注意的是这个“角色”指的是这个“行为”服务的对象,在游戏中通常来说都是玩家,但也有其他情况比如为了方便开发进行的额外编辑器开发等服务对象就不属于玩家。&/p&&p&这样写看似比较麻烦,但实际上真正用起来好处也是比较明显的。首先可以更准确的传达真正的开发需求,同时“目的”可以让开发人员明确为什么要做这个工作,并且这样写相当于设定了评估主体和行为,为后期测试提供了一个可测量的标准。&/p&&br&&br&&p&&b&Size: Story Points 关于工作量预估&/b&&/p&&p&对于工作量的预估,在敏捷开发中惯常使用的是&b&Story
Points&/b&。Story
Points是任务间的工作量比较,而无关乎实际工作效率(例如团队规模等),与我们在其他地方见到的比如X人天或Y小时等与具体情况紧密相关的时间预估不同,这种预估方式拥有更强的灵活性,不会因为具体情况的改变导致所有预估需要重新进行。 每个人的工作效率/能力也可以使用 Story Points进行评估。比如根据预估及实际调整后可以基本定义人员A的每周工作效率是30点,B是35点等,再据此评估团队效率,安排这个Sprint中可以放进多少点的任务。在实际工作中,如果有实际工作量超出或少于预估的情况,我们可以根据偏移量的统计,判断项目是否可能延期或提前完成。&br&&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-f807c7b0e0ff6b4fbb9a17_b.png& data-rawwidth=&175& data-rawheight=&130& class=&content_image& width=&175&&&/figure&在定义Story
Points时,我们可以将一个认为最小的任务定义为1,再根据其他任务相对于这个任务的量级评估其余的Story
Points。计划扑克是其中一种团队参与的预估方法,优点是可以最大程度的获得较准确的预估,缺点就是比较耗时。&/p&&br&&br&&p&&b&&i&Planning Poker计划扑克&/i&&/b&&/p&&br&&p&简单来说就是每个人手上有同样的一沓标有数字的扑克,代表Story
Points的点数。挑选出一个需要讨论的Backlog,每人私下选好一张认为相对应的工作量点数牌,同时亮出。如若差距不大,则可确定,若差距较大,差距大的几个人间互相讨论理由,再继续游戏,直至所有成员基本达成一致。这个游戏可以帮助有效确定一些不好预估的任务,也可以加强团队成员的沟通,解决对潜在的对项目理解不一致的问题。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f95add0c4ed15c7364dc1_b.png& data-rawwidth=&640& data-rawheight=&416& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-f95add0c4ed15c7364dc1_r.jpg&&&/figure&&br&&p&&b&Burn Down Chart & Velocity Chart&/b&&br&&/p&&p&除此之外,燃尽图和速度表是追踪开发效率的两种方式,坐标参数都分别是Story
Points点数及时间,只是一个是关注完成速度,一个是关注工作量还剩多少。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-64f7f6a5f9a0c090fce9_b.png& data-rawwidth=&1205& data-rawheight=&442& class=&origin_image zh-lightbox-thumb& width=&1205& data-original=&https://pic2.zhimg.com/v2-64f7f6a5f9a0c090fce9_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-5e8b597d78f9f0a6db24688db41abed8_b.png& data-rawwidth=&950& data-rawheight=&545& class=&origin_image zh-lightbox-thumb& width=&950& data-original=&https://pic1.zhimg.com/v2-5e8b597d78f9f0a6db24688db41abed8_r.jpg&&&/figure&&p&&br&-----------------------------------------&br&&/p&&br&&p&&b&&u&Daily/Weekly Check-in&/u&&u&每日站会&/u&&/b&&/p&&p&敏捷开发中的一个重要习惯便是每日站会,通常在每日/每周开始时进行,站立执行是为了保证汇报尽可能的简洁及快速。通常来说要求简短直接的向其余团队成员说明三个问题:&/p&&ul&&li&&i&&b&Did&/b&(上个站会后):“我上周/昨天做了什么”&br&&/i&&/li&&li&&i&&b&Doing&/b&(这个站会后):“我今天/这周要做什么”&br&&/i&&/li&&li&&i&&b&Blockers&/b&:“我有没有遇到什么阻碍/问题”&/i&&br&&/li&&/ul&&br&&p&这些在帮助自己明确计划的同时,也让其余成员清楚你的进度,如有工作交叉的部分可以及时沟通,同时隐形的压力会让你保持高效率,避免无故拖延。&/p&&p&&br&-----------------------------------------&/p&&br&&p&&b&&u&Version Control&/u&&u&版本控制&/u&&/b&&/p&&p&在开发中,版本控制极为重要,这也是行业内必备项目管理流程,但是作为小白独立开发者在早期可能并不会意识到这点。简单来说版本控制就是随时将最新无问题的工程文件备份至云端服务器,所有修改均先在本地进行,确认无影响工程正常运行的问题后再更}

我要回帖

更多关于 大话脚本错误 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信