查看原文
其他

如何程序化生成一个3D大世界?一文详解流程、技术与工具|元来是你001

元来是你 元象XVERSE 2023-12-09

「元来是你」技术交流平台


3D未来,将是技术革新的未来。「元来是你」平台将聚焦 3D 内容生产与消费的相关课题,邀请技术、美术、产品到投资领域专家,交流和探讨前沿技术革新与市场变化,共探 3D 未来。


元象自研的「端云协同」3D互动技术,能提供庞大、逼真、多人、轻量的次世代交互体验,「庞大世界」正是我们持续关注的课题之一。本文聚焦「如何用程序化生成一个庞大世界」,以巨型室外场景为例,全面介绍了背后的技术挑战,AI 驱动的解题思路、技术方法与工具。


这些方案适用于室外、室内和特殊风格场景和关卡设计,目前也在不断打磨迭代,之后将逐步开放给创作者使用,带来极高的自由度和便利性。


 本文将介绍:
  1. 3D美术设计的工作流程对比:传统 vs 程序化方法。
  2. 如何设计场景proxy:手动、自动(GIS)到半自动(智能辅助)的三种方法。
  3. 如何将proxy转化为高品质资产:建筑、道路到地形等重点资产的转化工具。
  4. 如何添加装饰细节:从城市、生态到通用放置的三种工具。


 一、3D美术设计工作流的对比 
1.1 传统方法
近十年来,计算机技术的发展与人类知识表达方式的演进,让游戏与电影中的世界变得日益庞大和复杂。这让内容产业在丰富用户体验时,也面临着成本不断上升的挑战。

以游戏行业为例,制作模型、地图、关卡等3D内容,占了制作成本很大一部分,业界开始逐步尝试用程序化方式加速3D内容制作,降本提效。

游戏目前的3D场景制作步骤为:
概念设计确立游戏美术风格和玩法,完成原画设计
制作资产以原画为指导,美术团队设计制作各类美术资产
场景设计根据玩法设计场景和关卡,输出场景设计图或预览图
场景摆放根据场景设计图,摆放各类数字资产,搭建整个世界

其中,概念设计阶段是体现创作者创造力的核心阶段,也是每个项目的灵魂,而后三步则是将想法逐步变成现实的阶段。但在实际开发中,在有限的时间和人力资源条件下,后三步耗费精力远多于第一步,这限制了创作者的自由度,影响其进一步释放潜能。
加快这一进程,程序化生成应运而生,让创作者能把更多精力集中在需要创造力的地方,而不被枯燥、重复的机械化操作消磨。而不同类型的创作者也有不同需求,主要可分为:
对个人或小团队:在制作美术资产方面,他们希望能够有足够多的现成资产可以直接使用。在场景设计方面:对主要场景,创作者希望设计大体走向,使用辅助设计工具填充细节。对次要场景直接全自动生成场景设计图。 在场景摆放方面,这一步就是按照设计图摆放各类已有数字资产,创作者更希望能够完全自动化。
对专业团队(如游戏工作室):在制作美术资产方面:会根据项目需求定制基础美术资源模块,然后进一步通过程序化生成的方式组合出更多样的资产。在场景设计方面:对主要场景手动设计,对于更多次要场景,创作者把控大体走向,程序化生成填充关卡细节。在场景摆放方面:尽量少手动操作,越自动越好。
1.2 程序化生成方法

帮助创作者解决生产3D内容上的痛点,元象探索了一套完整的程序化工作流,积累大量高效工具,能帮助到不同需求的创作者。

个人或小团队开发者,元象提供了海量的现成美术资产,开放现成关卡设计工具帮助生成场景设计图,并且一键完成场景摆放。

对专业团队,元象通过定制工具制作数字资产,用AI学习主要场景的pattern,辅助生成次要场景设计图,同时通过设计图自动化完成摆放。

与业界已有方案相比,元象方案的差异化在于提供了:一、更多现成资产;二、更智能AI辅助设计;三、更低门槛的生产工具。

以下就将以一个我们设计的室外大世界场景为例,分享程序化生成的工作流


制作资产直接使用元象资产库
场景设计场景用代理几何体(proxy)占位。元象可提供多种辅助设计工具,实现自动/手动/半自动(智能辅助)生成场景设计图,并转换成proxy占位
转换资产使用元象的单品工具,将proxy转换成高质量资产
自动化细节自动在场景中添加更多装饰,用道具增添细节

 二、如何设计场景proxy 

具体而言,创作者既可自行制作美术资产,也可以使用元象的现成资产。同时我们也提供一些常用资产的程序化生成工具,可以参数化生成如室外的花草树木、室内的桌椅门窗等资产。
我们可以根据具体项目定制工具,加速美术资产制作。如下图展示了一个定制的小工具,作用是在生成室内场景的带吊灯的天花板,可以自由的改变天花板形状并更换吊灯模型。

场景设计结果会用代理几何体(proxy)占位,这里的每一个proxy会在后续用不同的单品工具转换成不同的数字资产。

一般我们会用一个立方体生成一栋楼房,用一条曲线生成一条道路(后文直接用proxy代指场景设计)。用这些简单形状的proxy做场景设计图,一是可以用proxy占位,方便创作者把控整体场景布局,二是proxy能用AI算法自动生成,非常高效。
我们提供了多种场景proxy的生成方案,包括:手动、自动(GIS)和半自动(智能辅助)生成,满足不同的创作者不同可控程度的需求。 
2.1 手动生成
如果创作者选择手动设计,我们提供了转换成proxy的工具。
创作者完全可以在我们的编辑器中手动摆放每一个proxy。但是为了方便版本迭代,我们更推荐创作者使用批量输入的方式来导入场景proxy。我们提供四种批量导入接口:
接口一:我们支持导入FBX/OBJ等标准美术格式,创作者可以在第三方软件(maya/3dmax等)中做好proxy导入(如图a是在blender中制作建筑物的proxy)。
接口二:对于地形,我们支持常用的图像格式,创作者可以自己在第三方软件(如world creator等)中做好地形图和对应的mask导入(图b)。
接口三:我们支持PSD文件格式的输入,创作者可以用不同的图层标记不同类别的proxy(如图c,每一个颜色是一个图层,对应不同的道路或建筑)。
接口四:我们也支持CAD格式的输入(如图d),创作者在不同的layer中存放对应的proxy信息。我们最推荐创作者使用CAD格式(矢量图,无损)。


如下图,左侧展示一张手动绘制的PSD设计图,右边是对应自动生成的建筑和道路的proxy。创作者可以通过修改PSD从而精确控制生成的Proxy。


全手动输入的优势在于创作者绝对可控,但可控的代价就是每个细节都需要手动设计,太过费时费力。

2.2 自动生成(GIS)
创作者只想生成一个分布合理的大场景,不对具体细节有明确要求的话,可以直接使用GIS数据来生成大场景的proxy。
GIS(Geographic Information System)是真实世界的数据,典型如DEM(Digital Elevation Model,记录地形高低起伏信息)和OSM(Open Street Map,记录城市的房屋和道路信息)。
我们提供了完整的接口来支持GIS输入,创作者可以通过我们的接口指定经纬度直接拿到对应区域的GIS数据,也可以使用自行下载的GIS数据。下图展示了深圳市南山区的部分区域生成的proxy,包括地形(有平地海洋和山脉部分)和建筑物(图中彩色的box)和道路(图中蓝色的曲线)。
使用GIS数据来全自动生成大世界的proxy的优势在于数据源自真实世界,所以不会出现不合理的分布。然而缺点在于完全不可控,生成的数据难以按创作者的需求调整(可以微调某个道路或建筑,但是类似调整整体道路走向这种问题就难以解决)。

为此,我们抓取大量的地形和OSM信息,训练了一个AI模型,可以参数化的生成不同风格地形数据和不同风格城市的建筑和道路数据,从而一定程度上满足创作者的多样性需求。但是依然不够可控。

2.3.1 半自动生成(智能辅助)

为了在可控程度和创作者使用的复杂程度之间取得平衡,我们提供了一套智能辅助设计场景proxy的方案。创作者只需要简单的输入,通过AI算法进行智能的补全,就可以生成复杂但是又合理的场景proxy。
创作者可以通过调节参数来增加多样性,也可以通过增多输入来减少自动补全的不确定性。
比如生成路网,创作者只需要简单几笔勾勒出道路的大体走向,我们就可以一键生成复杂的道路路网。如下图,左侧是创作者的输入,输入可以是在我们的编辑器中交互的完成,也可以提供PSD或者CAD的输入,右侧是输出的路网,生成的路网可以参数化的调整道路的密度长宽等属性。


2.3.2 智能辅助设计案例:一键生成
接下来举一个实际案例来展示智能辅助设计一个带地形的大城市场景。限于篇幅,这里只重点介绍如何生成地形、建筑和道路这三部分。
为了展示我们的智能辅助场景设计的能力,我们没有简单直接使用GIS数据作为proxy,而是以GIS作为输入,通过智能辅助的方式来生成最终场景设计。设计结果和原始GIS进行对比,可以更好体现出我们智能辅助生成方案能够在保持原有输入pattern的基础上拥有更多的可调整性。
我们截取了深圳市南山区的一小块GIS数据,如图a所示。图b展示的是不带纹理的原始地形图,可以看出噪声很大,我们会对它做自动清理。图c展示的是简单的划分,包括山脉区域(紫色)、城市平地区域(棕色)和海洋区域(蓝色)。

对于基础道路,我们从原始是OSM数据为基础输入(图左),通过AI算法生成了实际使用的路网(图右)。图中只展示生成的主干道,可以进一步调整道路密度生成次级的小路乃至更细节的道路网,创作者可以根据需要做任意级别的细化。


通过城市区域的道路进一步划分出地块。如下图,地块的大小密度和形状同样可以参数化调整。


对每一个地块(下图a)计算高度,通过挤压即可生成城市群的proxy(图b)。挤压的高度可以通过随机计算生成,也可以是由创作者刷好mask并传入。同时在生成建筑群的同时会生成与主路连接的小路(图c),加上主路从而得到一个完善的城市道路网。


建筑群里的每一个proxy都是代表一类建筑,包括但不限于居民楼、写字楼工厂等建筑,也可以是花坛雕塑等装饰用的特殊建筑,通过特定的tag来指定。Tag可以随机的生成,创作者可以调节各类建筑的比例,也可以进行手动指定。
我们最终得到完整proxy如下图a所示。和原始的gis proxy(图b)相比,智能辅助生成的proxy在保持原有输入pattern的基础上更加可控

对于道路部分,创作者可以调节道路的走向,又可以控制道路的密度。对于建筑,创作者可以控制生成的建筑的位置和密度,也可以调节建筑的大小高低与类别。

在整个场景设计的过程中,创作者只需要调节几个参数即复现上述的效果其他过程都是自动的,从而让非专业的创作者也能非常容易使用。

 三、如何将proxy转化为高品质资产 

当有了整个场景的proxy,我们就可以通过单品工具把单个proxy转换成对应的高质量数字资产。对于室外场景最重要的还是建筑,地形和道路这三部分,限于篇幅这里只介绍生成这三类资产的单品工具。这些工具后续也会逐步开放给大众使用


3.1 建筑工具
我们研发了一个通用的单品建筑物工具,输入一个简单几何形状的proxy,就可以生成一个高质量的房屋建筑资产。


生成的高质量房屋基于proxy的形状,工具支持各种复杂几何形状的proxy输入,从而生成不同楼房形状。


我们的工具也支持一键更换材质,如下图。创作者可以预设多种材质,我们可以对每一个建筑随机使用不同的材质,或者按照创作者划分的区域按片区应用不同的材质,从而得到充满多样性的大场景。


对于标准化的建筑,我们支持创作者使用自定义模块来得到新类型的建筑。如下图,我们目前使用如下六类基础模块:飞檐(左转角),飞檐(右转角),飞檐(横梁),墙(或者是门窗),墙左转角,墙右转角。每一类至少需要一个,可以有多个。

创作者只要按照我们的标准制作好对应的6类组件,就可以生成出符合自己项目美术风格的建筑物。


对于非标准化的建筑,如复杂的雕塑,喷泉,花园等等,创作者可以提供对应的美术资源,我们的工具会基于proxy作为边界自动计算出最合适的旋转平移缩放,根据proxy的建筑类别tag来放置。


对于大世界的建筑群,我们进一步提供了一个建筑群工具。建筑群工具首先提供了对建筑群proxy设置必要的属性(如建筑物类型、材质等)的能力,可以随机生成或者帮助创作者快速批量设置。然后建筑群工具内部会对每一个proxy使用单品建筑物工具。

我们会检测每个proxy对应的建筑物类型,对于特殊建筑物(雕塑喷泉等)会直接从资源库中找到对应的模型放到proxy的位置,对于标准建筑物(商业区,写字楼,居民楼等)会应用对应的基础模块生成建筑。

建筑群工具也会管理材质,对一个区域内的相同类别建筑物之间也会适当的改变材质,从而让场景更具多样性。

3.2 道路工具
我们研发了一个通用的道路工具,输入一条曲线proxy,就可以生成一段道路。如下图,输入的曲线是来自左上图,其中红色图层对应主路,蓝色图层对应辅路。
输出的结果如下图所示,其中主路和辅路用了不同的基础模型生成。可以看出,我们的道路工具能处理复杂的道路连接,也可以很好的处理转角和交叉路口


道路工具同样是基于模块化的实现。如下图,创作者通过给定道路的基础模块,道路工具即可提取其中的特征生成完整的道路网。这里的基础模块可以是非常复杂的形状,(如下图中的模块是一根有高低起伏复杂铁轨)。同样的,道路工具也支持一键更换材质。


类似城市建筑群工具,我们也开发了一个城市路网工具,通过路网工具我们会设置不同层级的路网(主路,一级道路,二级道路),对它们分别使用不同的基础模型,分别用道路工具去处理。城市路网工具还会负责管理材质,在同一级道路上会分路段随机使用不同的材质以增加多样性。

3.3 地形工具
我们研发了一个高效的地形生成工具和一个地形材质工具。
我们的地形生成工具提供了大量可以直接使用的基础地形模板。同时也支持通过各种噪声来生成基础地形,手动雕刻细节山脉,支持erosion和simulation。最终的结果可以导出地形图和对应的mask。

我们的地形材质工具可以导入地形图和对应的mask,自动的划分好地形layer并应用地形材质。这里的地形图和mask可以来自我们的地形生成工具,也可以来自第三方软件制作。

我们有大量的预设地形材质,时间上包括春夏秋冬等季节,地形上覆盖丘陵沙漠等常见地形。使用者只需要调整参数即可自动得到不同地形材质。同时我们也支持用户上传自定义材质贴图来替换预设的地形材质贴图。效果如下图所示。


对于水的区域,我们的地形工具会自动分离成mesh,同时贴上额外的水的材质。


 四、如何添加装饰细节 

主要就是在场景中添加各种装饰用道具(如野外的花草树木,城市中的路灯花坛等)。通过添加这些装饰道具可以显著的增加场景的真实程度。
接下来我们着重介绍如何自动在城市和野外放置小道具,同时也会展示我们的通用放置工具。这些放置工具也会陆续开放给大家使用。
4.1 城市放置
我们开发了一个城市里放道具的工具。它会检测建筑物周边区域,根据预先设定的规则在不同类型的建筑物边放置不同类形的道具。工具还会自动的在道路两侧放置路灯,树木等。放置道具的密度可以参数化调整。

4.2 野外放置(生态系统)
我们开发了一个生态系统工具来实现在山脉上放置花草树木。我们会预设了多种常见植物的生态学属性,包括高度范围,年龄范围,生存能力(用于不同植物间相互竞争),生存环境(用于限制植物分布,比如趋水的植物放在河边等)。生态系统工具会自动根据地形工具中划分的mask和材质来判断地形,进而填充对应的植物。

4.3 通用放置
通过城市工具和生态系统工具可以填充整个场景80%的装饰道具。但是自动放置很难非常完美,在重点区域最好还是创作者手动放置。为此我们提供了一个通用的手动放置工具。创作者可以简单的拉曲线来限制一个区域,然后在区域中放置小道具。创作者可以选择要放置的素材,每类素材的比例和放置的密度,也可以随机设置每类素材的旋转平移和缩放。放置工具会自行检测并避开已有的建筑和道路区域,也可以自动投影并贴合地形走向。

 五、进一步讨论 

通过元象的工具已经可以快速生成有山有水、内容丰富的大世界场景了。但程序化生成不是万能的,更难做到完美,想要最终效果好,离不开手动调整。常规而言,程序化生成能完成场景80%的内容,剩下20%的细节还是需要手工。
同时,文中展示的只是程序化生成能力的冰山一角。不局限于生成山水和城市等3D资产,通过引入更多的AI能力,我们也在逐步尝试去程序化生成角色(数字人),动作,声音,文本,乃至行为,从而通过这些更智能化的辅助工具来降低制作3D内容的门槛。
元象希望帮助每一个创作者创作3D内容更容易,无论是个人或专业团队,还是普通消费者,每个人都能受益于我们的程序化生成工具。
我们也会持续改进算法,积累更多素材,开发出更好的工具,不断降低3D内容制作门槛,并争取能尽快、逐步把工具开放给创作者,敬请期待。
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存