网站开发接入支付宝,辽宁人社app一直更新,个人怎么做淘宝客网站,连云港做网站设计接上文#xff0c;我们接下来了解一下大世界场景制作技术有哪些#xff0c;本篇旨在给大家过一遍目前业界的做法#xff0c;能让大家有一个宏观的知识蓝图。实际上#xff0c;针对不同的游戏类型和美术风格#xff0c;制作技术在细节上有着非常大的不同#xff0c;业界目…接上文我们接下来了解一下大世界场景制作技术有哪些本篇旨在给大家过一遍目前业界的做法能让大家有一个宏观的知识蓝图。实际上针对不同的游戏类型和美术风格制作技术在细节上有着非常大的不同业界目前也很难说有一套标准且高效的流程所以一些细碎的技术点将会在其他篇章逐一讨论。
说到大世界到底多大的地图尺寸才能算的上大世界呢下面给大家列举一下目前市面上的大世界游戏地图尺寸详细的介绍可以看这个视频。
堡垒之夜5.5 k㎡~2k x 3 k漫威蜘蛛侠11 k㎡~ 2k x 5k地平线 零之曙光 22 k㎡~ 4k x 5k绝地求生64 k㎡~ 8k x 8k塞尔达 荒野之息72 k㎡~ 8k x 9k荒野大镖客275k㎡ ~8k x 9k
最后说一下我最近在玩的《刺客信条 奥德赛》全地图 256 k㎡16k x 16k其中陆地面积占40%左右也就是100 k㎡高度峰值为800~1000米个人跑图目测的估值 创建地形
对于创建如此庞大的地形显然不可能直接使用3DMAX等建模软件制作的静态模型文件一般来说引擎都会有一套地形系统Landscape来支持地形的生成和渲染。
引擎的地形系统根据高度图来构造地形对于相同的顶点密度模型数据形式的地形占用的内存是高度图的6-7倍。而且地形系统还提供强大的LOD功能远处的地形网格顶点会被优化减少分块渲染等等功能。 分块管理是大世界制作的核心前提。
世界由多个关卡组成每个关卡控制各自内部的资源加载和显示一般一个关卡包含一个landscape地形。
按照Unreal的地形系统来说就是一个landscape地形由多个component组成component是渲染的基本单位也就是说地形是按照component分布一块一块地渲染的。
合理规划好每个关卡的地形尺寸每个地形部件数量和大小部件的顶点数组成每个顶点间隔代表游戏世界多少米对游戏性能有着重要的影响。 说一下Far Cay 5 的标准
一个关卡地形大小为1024mx1024m部件大小为64mx64m也就是说地形每64平方米为一个渲染批次一个关卡内大概有400左右个地形批次。
0.5m对应高度一个像素也就是说一个关卡地形使用的高度图、Splat图的尺寸是2048x2048。
地形工作流
目前比较流行的工作流worldmachine-houdini-游戏引擎
如果非要让我一句话概括地形制作的工作流程我想会是这样的
worldmachine就是一个做地的(特点是快)到了houdini阶段就是在worldmachine的结果上继续加工自动化完成worldmachine做不到的事情(特点是自动)最后到达游戏引擎这里就是广大美工们默默耕耘一点点细化场景的地方特点是手工、细节
注意这里用一使用worldmachine一词指代地形制作软件其实还有很多优秀的地形制作软件比如world creator、Terragen 3.
分层概念制作游戏是一个反复迭代的过程在制作初期我们会尝试游戏中的各种各样的新想法并可以快速地还原和重做。因此《幽灵行动 荒野》提出了分层的概念就是类似于PS的图层的意思。
对于这个分层的概念个人认为其实只是制作过程中形成的一种流程概念实际开发中并不会局限于这些条条框框不过了解一下还是很有好处的。
Base层WorldMachine制作的原始资源(高度图和weight map等)我们定义为base层。WorldMachine提供了一套完整专业的工具集用它来构建世界原型进行快速验证是个不错的选择。
Macro层在worldmachine解算的基础上通过笔刷等手段手工地对地形的宏观结构进行调整这一层的调整内容为macro层。如果编辑结果不令人满意则可以轻松擦除Macro图层内容以返回到高度图的原始状态。软件方面使用World Creator是个不错的选择。
macro翻译为“宏观”的意思。
DCC层然后进入houdini环节通过各种程序化的工具细化我们的地形例如生成道路网、河道、村落分布这些输出内容我们定义为DCC层。在此阶段我们还会完成其他重要的工作例如根据坡度高度粗糙度和WorldMachine的其他遮罩如flow map、smoothness来定义地形的材质分布例如根据坡度高度地表材质密度向阳面等规则来生成生物群落的分布自动化生成峭壁这些稍后讨论。
Micro层最后这三层导入到引擎中。我们完成了大规模宏观视角下的工作后自然也需要对微观细节进行手工调整这一阶段的修改定义为micro层。
micro翻译为“微观”的意思。 WorldMachine阶段
通常选择WorldMachine工作流开始创建地形。 从NASA等网站导入展示地形数据Heightmap配合分型噪点功能然后进行应用侵蚀建模细化地形。
WorldMachine除了输出HeightMap还能分层导出多种有用信息权重图SplatMap也叫Weight Map是初步纹理化的依据此外还能导出高精度全局地图Visa Map。
权重图也称为splat map或者weight map是一组一个或多个RGBA位图其通道充当归一化的权重用于控制世界上任何给定位置的纹理绘制。
Houdini阶段
WorldMachine帮助我们快速创建这个大世界的雏形结构并且拥有简单的纹理外表。
有了WorldMachine生成的高度图、splat map等资源我们就可以在Houdini中重构地形利用houdini强大的自定义程序功能我们可以制定任意的规则去程序化地完善我们的地形并模拟复杂的自然规律细化群落分布地表材质等等。 主要做的内容包括
1、进一步细化地形自动化完成路网、河流、村落、城市的分布。输出高度图和splat map、路点信息。
2、按照自然物理规则模拟生物群落分布情况。输出分布密度图、splat map、点云信息等。
3、根据地形自动化生成峭壁、河流等网格模型。输出静态模型。
Houdini导出的数据内容将直接跟引擎编辑器对接常见的数据类型为位图、点云信息、模型。
游戏引擎阶段
资源进入游戏引擎阶段场景编辑开始分工协作每个人负责各自的区块所以引擎必须要提供一套合理的多人协作方案以及需要制定诸多制作规范避免出错。
在这一阶段最重要的问题是houdini自动化的内容与人为修改的内容如何同步的问题。《幽灵行动-荒野》项目组提出的方案是让引擎修改的信息回流到houdini然后让houdini重新计算其自动化信息再同步到引擎。对于这一点个人意见是没有这种硬实力的公司或团队最好不要这样做。个人认为最好的解决方案是houdini一旦输出到引擎就已经定死了之后的所有修改都要靠人为调整除非是大规模的迭代需要重新返回houdini演算。
然而在这阶段仍然可以开发一些自动化的工具来协助提高编辑速度比如道路/河流/桥梁编辑工具、物件组合生成器、物件自动对齐地形、群落生成器等等。
渲染分析
前面讨论了地形制作的流程下面简要地分析地形渲染的相关技术还是以《刺客信条 奥德赛》的截帧画面来例子。 画面由GPA截取所得初步分析画面上看到的东西分为四类地形、人物、岩壁模型、植被
主角脚下附近的地形网格明显被曲面细分过细分区域集中在道路上可知仅有道路材质具有曲面细分功能。主角站立面积大约占地形正常网格一个单位推测地形精度为0.5m。
同屏内地形材质数量4-5个泥石、草皮、泥土、石质。水坑的实现考虑为贴花。
岩壁模型被大量运用在地形斜坡上。 地形材质
要实现如此庞大且多样的地形地貌且要满足近处高质量的细节要求Tilling材质混合是唯一的选择。通过Substance、Quixel等获得高精度的四方连续材质的pbr贴图然后通过多张权重图将不同类型的材质混合在一起从而构造出丰富的地形地貌这些权重图称为splat map。
然而手动会绘制如此庞大的地形混合权重图是不可能事情幸运的是我们在world machine/houdini制作地形的时候可以通过算法来生成这些地形材质的分布并获得各种规则生成的mask最终合成导出为我们想要的splat map。
远方地形如果依然使用tilling材质混合的方法会出现明显的重复感所以我们预先烘焙导出一份“宏观俯瞰图”global color map用作远景渲染。 地形材质方案
地形混合技术三件事情
(1)当前像素用到哪些贴图(2)应每一层贴图的权重是多少(3)混合的算法
方案一Unreal的地形材质采用经典的方案一张权重图weight map包含四个通道只能混合四种材质超出四种材质就要新建一张weight map。而一种材质包含albedo、normal、roughness/metallic三张贴图四层材质就要13个纹理samples可见shader的计算是非常昂贵的。使用此方法渲染地形必须要对地形的材质有很好的规划和控制。 我们已经很熟悉的权重贴图
方案二一些自研引擎常常会采用id map的方法在绘制地形的时候引擎会自动筛选出当前区块内权重最高的4种材质并将他们的index和权重储存到id map中。在shader在解码id map信息就知道对应的材质和权重了。
方案三runtime虚拟贴图技术简而言之就是通过预先将地形的材质混合(在computer shader中计算)并缓存到一张巨大的实时纹理上shader采样时只需要从这张大纹理中拿到属于自己的那“一块”即可拿到的结果已是最终的混合结果。原来要采样多张图然后混合现在相当于就是单层材质了shader的性能也得到极大的提升。 贴花
贴花能有效增强场景材质的多样性但存在overdraw重叠绘制的开销。
runtime虚拟纹理技术的另外一个收益就是能极大地降低贴花的性能消耗因此能突破限制被大量运用到场景中。
水摊、碎石、公路划痕等贴花类型被广泛使用并以程序化的方式放置。 《孤岛惊魂5》进一步提升了这种贴花技术让它具备曲面细分的功能。 有趣的是这种局部的曲面细分方式比起直接对摄像机近处的地形进行曲面细分性能要高效果和可调节性更好。
地形与静态网格的融合
地形与地上的物件不可避免会产生衔接问题主要是纹理、法线、几何三方面的匹配。
常见的处理办法有三平面映射、pixel depth offset、距离场混合等。但是这些方案都各有利弊而虚拟纹理技术是目前解决这个问题的最佳选择。对于这个问题会另开篇幅详细介绍。 峭壁渲染
到目前为止我们讨论到的所有地形材质效果都基于世界空间xz平面的前面提到的地形纹理都是自上而下的“投影”下来的。我们还有没考虑到地形的垂直面(斜坡)要如何处理。
这意味着当我们有陡峭的坡度时(见图1中红区区域)纹理会产生拉升变形见图2山坡区域。 图1 图2
要解决此问题一种经典的方法是采用三平面纹理映射得出的效果图3。 图3
但这种方法会产生的渲染消耗是普通地形的三倍Far Car 5为了优化此耗时使用各种trick(取巧手段)过程略微复杂不在本文讨论范围内。
如前文所说Tilling材质在远处会产生明显的纹理重复感由于峭壁是垂直面的无法使用前面预先bake出现的global color map作为远景渲染。所以可以在shader中对远距离的峭壁做减少tilling的处理。图4 图4
最后为了增加悬崖结构的立体感在Houdini中检测这些悬崖区域并生成峭壁包裹模型最后将相关布点信息输出到引擎进行程序化放置。图5、6 图5 图6
程序化/自动化 技术
前面讨论了地形制作以及渲染的相关技术及流程下一步要继续丰富我们的地面及地面之上的内容面对这么庞大的地形完全靠人工编辑是很困难的。
接下里将会详细介绍三种具有代表性的程序化场景制作技术分别围绕植被、峭壁、道路系统展开论述。 植被
首先来说基于密度图的植被放置方法。
顾名思义就是利用一张灰度图来控制植被模型的分布。一层灰度信息只能控制一种植物的分布。
一般来说按照heightmap的尺寸一个像素代表一平方米的话这个精度是不足以表达精确的位置点的所以一般会提供一个密度参数给艺术家控制每个像素应该放置多少棵植物但不会考虑植被之间的模型穿插问题。
因此这种放置技术比较适用于草丛这种大面积连续的的植被。 像森林这样复杂的生态系统其生物群落的分布要考虑各种规则种群的多样性、优势种和劣势种的结构、水资源和阳光分布因素、树木的年龄等等。
这个模拟过程是通常是基于物理分布的输出的结果要求保存大量信息。
我们在Houdni中实现这种物理模拟分布的过程最终生成一系列的点云数据每一个点储存着对象ID和矩阵数据包含位置、旋转、大小信息最后将这些信息导入引擎实例化生成对应的植被类型和并设置位置、旋转、大小。 可以看到基于点云的放置方法能够支持复杂类型的物体放置每一个物体的ID、位置、旋转等信息都会被当成一个“点云”数据储存起来。
除了植被之外贴花、岩石、道具等等所有独立的模型都可以以点云的方式来实现自动化放置。 峭壁
让我们回到峭壁的制作话题上面说到峭壁渲染的一些性能问题以及其网格模型可以由Houdini自动化生成。下面就来讨论以下如何在《far cry 5》中自动化生成峭壁包裹层以及在《刺客信条-奥德赛》中的采用的岩体堆砌的方案。
下图是far cry 5在houdini中生成峭壁包裹层的流程自动检测坡度是一个简单的操作然后就是在斜坡区域生成相应拓扑结构的模型不需要生成uv贴图采用世界空间三平面映射的方式进行采样。 《刺客信条-奥德赛》采用简单粗暴的方法可以看到斜坡区域被岩石模型恰当地填充从而减少了地形渲染处理斜坡问题上的缺陷暴露。同样的材质采用Tilling纹理三平面纹理映射方法渲染。 路网
通过以上的流程我们已经完成了大自然最基本的面貌接下来开始考虑加入人类的踪迹路。
先考虑我们的游戏需要怎样形式的路如果我们需要的仅仅是泥路、石头路那么直接在splat map上开辟出相关的材质区域即可。如下图所示泥路 但这样做无法表达出材质纹理的方向性如果我们想要做出那种高速公路那种效果就必须要使用模型或者大规模的贴花比如幽灵行动的做法 将分段路面模型重复利用拼接组合成网是一个很好的思路但是无法解决路面弯曲的拼接问题。可以预先制作多种类型的拼接组件按照一定的规则来组合但这样做限制略大可控性不高。 Spline mesh是一种网格变形技术可以用两个点控制一条样条曲线从而使静态模型沿着曲线变形。Spline Mesh配合打点数据程序化输出是程序化制作公路网的一种方法。 路网的生成
道路网络的贯穿整个游戏的玩法重要内容是指引玩家进行探索方向的第一要素。所以道路的分布应该按照设计图纸进行还原同时要兼顾地形高低做出调整。
我们需要一套基于寻路算法的Houdini道路插件根据用户输入的起始点计算出一条合理的路径再进一步生成子道路网。
Houdini输出的资源分别是
1.道路轨迹点数据配合Spline Mesh构成道路Mesh。
2.道路的高度图用来填平原有地形使得Spline Mesh与地形贴合
3.Splat Map用来控制道路两边的材质。
另外在这一操作中还可以根据道路轨迹顺便生成道路贴花的摆放信息输出为点云数据。 水域
水域不包括海域的形态也是多种多样的从制作层面可以分成两类A江河、湖泊 B溪流、运河、水塘 江河湖泊在构造地形的时候就已经被雕塑出来只要在Houdini中计算对应的水平面生成对应的模型。模型大小按照关卡大小进行分割比如1平方千米
溪流可以类似运用道路的生成方式从山顶引流到江河根据寻路算法生成对应的Mesh。
其余小规模的水域就按人工放置平面模型来做或者运用spline mesh曲线工具快速拉出一条水流。 关于大场景制作技术暂时写到这里其实自动化和程序化部分内容并不是本人专长都是从PPT上拔下来的内容。程序化做为一种新颖的技术方向虽然充满着挑战性它在未来对于游戏制作技术的意义让我们拭目以待。
在接下来的篇章中我会着重讲述渲染相关的内容每一种技术方案都会开一个独立的篇章来讲述深入细节地跟大家讨论。