美文网首页交互媒体设计教案
Gaia for Unity完全攻略(3):深入解析

Gaia for Unity完全攻略(3):深入解析

作者: shimmery | 来源:发表于2019-12-26 21:36 被阅读0次

三、功能详解

跟着做完上一部分内容的朋友肯定有很多疑惑,什么叫Stamper?什么叫Spawner?为什么会Spawn出这么多东西来?为什么有时候又Spawn不出东西来?这一章我们就详细看一下,Gaia到底是怎么帮我们创建场景的。


Gaia Manager

首先谈一下Gaia Manager的默认设置。

  • Controller:设置玩家角色控制方式。选择“Flying Camera”将创建一个可以自由调节的飞行摄影机(类似Minecraft中自由飞翔状态);选择First Person和Third Person将直接导入Standard Assets资源包中的第一/第三人称玩家Prefab。
  • Environment:设置场景发布平台环境。环境性能越高,Gaia创建的地形就会越复杂。
  • Terrain Size:设置将要创建的Terrain大小。图示中是创建一个2km*2km的方块地形,Gaia Pro支持新的多区块地形,据说Gaia 2也将支持多区块地形的创建。
  • Terrain Defaults:设置Terrain的默认参数。Gaia是通过载入一个预设好的GD配置文件(这里默认是GD Desktop Settings)来完成参数设置工作的,我们可以创建多个GD配置文件以应对不同的需求。
  • Terrain Resources:设置Terrain资源,也就是设置当我们为Gaia地形生成(Spawn)树、草、地面贴图等Terrain内容时将会采用哪些美术资源(如贴图、模型等)。Gaia是通过载入一个预设好的GR配置文件(这里默认是GR NatureManufacture)来完成此设置工作的。实际上,在这个GR配置文件中已经将Gaia自带的来源于NatureManufacture的第三方美术资源做了相当细致的配置,比如这里就设置了使用4张不同的地面纹理贴图,4种草,1种蕨类,2种花,这样我们才能在场景中一个比较丰富的Detail构成。如果这里我们选择的不是“GR NatureManufacture”而是“GR GameTexturesDotCom”(另一个已经配置好的GR文件),Gaia就会使用完全不同的地面贴图/树/草来为我们创建地形!
  • GameObject Resources:设置GameObject资源,也就是设置当我们为Gaia地形生成(Spawn)非Terrain内容(比如房子、石堆等等)的时候将会采用哪些美术资源。Gaia是通过载入一个预设好的GR配置文件(这里默认是GR 3D Forge Exteriors),因此我们才能够在Terrain上散布诸如石堆(Rock Pile)、小农场(Small Farm)、小村落(Small Village)这样的游戏对象!而3D Forge Exteriors也是Gaia自带的来源于3DForge的第三方美术资源。

Gaia Manager除了这些设置以外,还有4个分栏:

  • Standard栏中集成了手动创建地形地貌所需要的大部分工具
  • Advanced栏中集成了Gaia的一些进阶工具,基本上可以说是将Standard栏中的功能进一步细化
  • GX栏中集成了对于第三方效果插件的支持(但并不保证都能正常使用!!!)
  • More...栏中主要是一些教程之类的链接

地形图章(Terrain Stamper)

接下来谈谈Terrain地形的创建。

Gaia是使用“Stamp”来塑造地形的。所谓“Stamp”,就是一张黑白高差图。默认安装Gaia时会送给我们不少这种图,有些据说还是来自于真实的卫星地图数据。

安装完Back Woods Gaming的8套附加Stamps之后还会有更多这种图。

我们可以利用这些Stamps来手动创建我们所需要的Terrain地形:

  • 首先在“Gaia Manager”中对场景地形进行一些设置工作:

直接在“Gaia Manager”的Standard栏中点击“1. Create Terrain & Show Stamper”,Gaia会在场景中创建一个平整的Terrain,并附带了一个Stamper游戏对象。

选择这个Stamper,从Assets中选择一张Stamp图片拖到“Stamp Preview”的图片框内,场景中就会预览出这张Stamp图片所能产生的地形地貌。

我们可以调节这个Stamper的位置、旋转、大小,设置最大起伏程度,来将这个地形地貌“放置”到我们所需要的地方。场景中的蓝色半透明平面代表“海平面”,如果未来创建了水体,水体将会处于这个海平面的位置。去掉“Ground Base”选项,我们甚至可以通过上下移动来升高/降低整个地形。

点击底下的“Stamp”按钮,便可将这个“图章”应用于我们的Terrain。

这里说明一下相关的选项和按钮:

  • Sea Level:海平面高度。默认是50米,这是在Terrain Defaults中就已经设置好了的。
  • Show Sea Level:切换是否显示海平面预览平面。
  • Show Terrain Helper:切换是否显示Terrain编辑工具,让用户可以手动对Terrain做一些常用的修改。
  • Ground:将当前Stamp置于地面0处。
  • Fit To Terrain:将当前Stamp缩放至符合Terrain大小。
  • Preview:切换是否显示Preview。
  • Stamp:应用当前Stamper。
  • Undo/Redo:撤销/重做上一次的Stamping。

不断重复上面的过程,我们就可以利用各式各样的Stamps去“塑造”出我们想要制作的地形地貌了。

这里强调几个比较重要的参数设置:

Operation Type

Operation Type决定了这次Stamping会对当前Terrain产生什么影响,可以选择Raise(拉高当前Terrain)、Lower(降低当前Terrain)、Blend(按权重比例与当前Terrain相融合)、Stencil(取代范围内当前Terrain的高度数据)、Difference(计算出于当前Terrain高度的差值)等五种类型。

Distance Mask

Distance Mask可以设置一个边缘衰减曲线,使得Stamp能更好地与已有Terrain相融合。

另外,还可以专门设置Area Mask来决定在哪些区域以何种权重来应用Stamp,这里的Area Mask就是一个Alpha贴图,可以从图片读取某个色彩通道,也可以用程序噪波(Noise)来自动生成。

下面就是我手动混合了几个不同的Stamps之后得到的效果:

更厉害的是,我们还可以把这个效果保存成一个自定义的Stamp,以供未来使用!

在Gaia Manager的Advanced栏中选择“5. Handy Utilities... > Show Scanner”,场景中会出现一个“Scanner”游戏对象:

然后将场景中的Terrain物体拖进Scanner的“Drop Here To Scan”栏内,在Feature Type中选择一个分类,调整下Base Level值(也可以不调整),点击“Save Scan”,Gaia就会将当前的Terrain高差数据保存为一张16bit的黑白Stamp图。

然后我们就可以利用这张Stamp图来重建出这一特定的地形地貌,甚至还可以将其与其他Stamp图混合使用,以得到更复杂的地形地貌!

悄悄告诉大家,使用“Handy Utilities...”中的“Show Mesh Exporter”功能,还可以将当前Terrain导出成一个obj模型给其他软件使用哦!


全分辨率obj导入Maya

生成器(Spawner)与资源配置文件(Resource Data)

这一部分呢,我们来看看各种Spawner的使用以及如何为这些Spawner配置资源。

生成器(Spawner)

在Gaia Manager的Advanced栏的第三项中,我们可以手动创建各种Spawner。

这些Spawner其实都大同小异,使用的都是Gaia的Spawner组件。

Spawner组件分为这么几块内容:

  • Spawner Settings:对Spawner的设置
    • Resources:使用哪个资源配置
    • Range:Spawner的影响范围(单位是“米”)
    • Shape:Spawner的形状(Box或Sphere)
    • Collision Layer:Spawner将根据哪个碰撞层来检测碰撞,以便正确放置生成的物体(树、GameObject等),至少应包含Terrain所在的碰撞层
    • Execution Mode:“生成”行为执行的时间,默认设置为“Design Time”意思是只在编辑的时候才会生成对象,也可以设置成“Runtime Interval(游戏运行时每隔一段时间生成一次)”或者“Runtime Triggered Interval(当具有某个Tag的游戏对象接近Spawner一定距离时才会开始每隔一段时间生成一次)”
    • Rule Selector:设置如何选择“生成规则”,默认选择“All(使用所有规则)”
    • Location Selector:设置如何选择生成点的位置,默认选择“Every Location(在所有可行位置生成对象)”
    • Location Increment:设置每个生成点之间的最小间距(单位是“米”)
    • Distance Mask:通过曲线来设置距离Spawner多远是生成对象的成功率(比如可以设置成中心密集边缘稀疏的状态)
    • Area Mask:通过一个遮罩(Mask)来设置生成对象的成功率(比如某些地方有草某些地方没有草)
  • Spawner Rules:设置Spawn规则。Spawn规则决定了每一个资源对象究竟应该如何在Terrain上被生成,这里的“资源对象”是在Resources参数中所选择的GR(GaiaResource)配置文件中就已经预先设置好了的!在Spawner上只能给资源对象添加规则,而不能设置新的资源对象!
    • Resource Type:资源类型,可以是Terrain Texture(地形贴图)、Terrain Detail(地形草贴图)、Terrain
      Tree(地形树)、GameObject(其他游戏对象)
    • Selected Resource:所选择的资源对象,会根据前面的Type过滤掉类型不对的对象
    • Min Viable Fitness:最小的可生成适宜度,一般都设置为0
    • Failure Rate:失败几率,可以当成是一个随机控制量,较大的失败几率会导致更为稀疏的分布,也显得更为随机一些
    • Max Instances:该资源对象在场景中的最大数量
    • Noise Mask:通过一个程序噪波纹理来进一步控制生成的失败率
    • Active:控制该条规则是否起作用
    • Instance Spawned:显示究竟生成了多少个资源对象
    • -删除该条规则(千万不要误点了!!!)
    • Visualize:点击此按钮会在场景中显示一个Visualizer对象,能以可视化的方式让用户查看哪里能够生成哪里不能生成
  • Statistics:这一栏中显示了整个Spawner的统计数据
  • Spawn Controller:这一栏的4个按钮分别可以让Spawner贴近地面(Ground)、与Terrain等大(Fit To Terrain)、重置(Reset)、开始生成(Spawn)

使用“GR NatureManufacture”配置文件和“GR GameTexturesDotCom”配置文件所生成的地貌分别是这样的:

GR NatureManufacture GR GameTexturesDotCom

大家在切换资源配置文件的时候一定要注意,必须先手动将Terrain上所使用的贴图都删光,再去Spawn出新的配置文件中的贴图资源。

接下来,让我们手动把其他的Spawner都生成一遍,大家这时应该能够读懂每个Spawner的真实含义了吧!比如:

  • Clustered Detail Spawner本质上就是在场景中生成一系列“草丛”,每丛草由最多90片草Detail组成。但它生成的草丛特别难找,因为每7245个生成点里才会生成1丛草!
  • Coverage Detail Spawner所生成的草就多得多了,因为它的设置的Location Selector是“Every Location Jittered”,Location Increment是“2”。
  • Clustered Tree Spawner:每5120个有效位置随机创建一丛不超过30棵的树
  • Coverage Tree Spawner:每隔45米在有效位置附近创建1棵树
  • ……

让我们来看一下究竟Spawn了哪些东西:

从这张Hierarchy的截图可以看出来,Gaia的文件结构还是非常清晰的。在“Gaia”下有Session Manager、Stamper、各种Spawner等等,然后每个Spawner所生成游戏对象就都放在这个Spawner的下面。对比下这个文件结构和Spawner Rules不难发现,每条Rule都对应一组游戏对象,有的Rule并没有生成任何物体,因此对应的游戏对象是个空组,有点Rule生成了很多物体,因此对应的游戏对象包含很多子物体。

资源配置文件(Resource Data)

如果大家认真读到这里并真的有所思考的话,一定会发现,Spawner中的规则设置根本就不完全嘛!这些参数根本不可能搞出岩石贴图贴在山体上,沙土贴图贴在平地上,草坪贴图混在中间这样的结果啊!其实,另外还有很大一部分的规则设置是被设置在资源配置文件里的,资源配置文件才是Gaia的核心魔力所在!!!

新建GR配置文件

让我们新建一个场景,并在Gaia Manager中新建一个GR配置文件,改名为“GR-MyResources01”。选择GR-MyResources01,并将其指定给Terrain Resources和GameObject Resources。

这个新建的GR配置文件中目前没有任何资源:

我们可以按照自带的GR配置文件里的设置来为GR-MyResources01设置Texture、Detail、Tree和GameObject。

配置Terrain Texture

在Texture Prototypes栏下,我们添加多个Texture类型的资源。以T_Ground_Sand_02_A_Sm为例:

  • Name:贴图资源名称
  • Texture/Normal:指定使用哪张图片素材当做DiffuseMap和NormalMap(与Terrain贴图相对应)
  • Size X/Y:指定贴图重复度(与Terrain贴图相对应)
  • Offset X/Y:指定贴图偏移(与Terrain贴图相对应)
  • Metalic:指定贴图金属度(与Terrain贴图相对应)
  • Smoothness:指定贴图光滑度(与Terrain贴图相对应)
  • Spawn Criteria:设置贴图生成条件
    • Name:生成条件名称(可不填)
    • Check Type:检查类型。是检查一个点(Point Check)还是检查一个区域(Bounded Area Check)
    • Virgin Terrain:如果勾选,那么检查区域的Terrain必须是“空”的,也就是说如果是检查单点的话,Terrain的这个点上不能被其他游戏对象覆盖
    • Check Height:是否检查高度
    • Min Height:可以生成的最低高度
    • Max Height:可以生成的最高高度
    • Height Fitness:用曲线来控制从最低高度到最高高度,生成的可能性的变化
    • Check Slope:是否检查坡度
    • Min Slope:可以生成的最小坡度
    • Max Slope:可以生成的最大坡度
    • Slope Fitness:用曲线来控制从最小坡度到最大坡度,生成的可能性的变化
    • Check Proximity:是否检查靠近具有某个Tag的游戏对象
    • Proximity Tag:检查的Tag
    • Min Proximity:可以生成的离具有此Tag的游戏对象最近距离(再靠近就不能生成了)
    • Max Proximity:可以生成的离具有此Tag的游戏对象最远距离(再离远就不能生成了)
    • Proximity Fitness:用曲线来控制从最近距离到最远距离,生成的可能性变化
    • Check Texture:是否检查该位置的贴图
    • Matching Texture:适合生成的贴图,用贴图的编号来表示。比如“1”代表如果有该位置有1号贴图,则适合生成,“!3”表示如果该位置没有3号贴图,才适合生成,Fitness值直接由贴图的强度来决定
    • Is Active:这项条件是否生效

可以看到,这里的Spawn Criteria就非常非常细致了。可以根据高度、坡度、贴图来“智能”地决定某一个位置是否适合生成该项资源。

配置Terrain Detail

Detail的资源配置与Texture的非常接近:

  • 首先是一些与Terrain Detail相对应的设置,这里就不多介绍了
  • 接下来的Dna设置是Texture没有的,这里的“Dna”主要设置的是该资源的大小(Texture没有实际大小,当然就没有“Dna”设置咯)
  • Spawn Criteria设置与Texture是一样的

配置Terrain Tree

Tree的配置和Detail几乎一模一样,也是先设置与Terrain Tree相对应的内容,再设置Dna,最后设置Criteria。

配置GameObject

GameObject的设置是最复杂的,Dna和Criteria和前面讲的没有什么区别,但每个GameObject资源都包含有多个Instances,而每个Instance都可以被单独设置。

比如自带的“GR 3D Forge Exteriors”配置中,有一个叫“fi_vil_GaiaFenseFull”的Instance:

  • Name:该Instance的名称
  • Desktop/Mobile Prefab:当用于Desktop或Mobile(Gaia Manager中设置)时所选择使用的Prefab
  • Min/Max Instances:最大/最小Instance数目(比如一颗石头作为Instance,设置这个值可以在被生成时随机生成多颗石头)
  • `Failure Rate:失败几率(也就是有可能在生成该资源是并不生成这一个Instance,避免完全重复)
  • Min/Max Spawn Offset X/Y/Z:出生位置偏移的最大/最小值(每一个Instance的出生位置其实是一个确定值,但我们可以给它设置一个随机偏移范围,使其出生产生一定的变化,避免完全重复)
  • Rotate To Slope:是否随着Terrain的坡度而旋转(比如篱笆这种Instance,就需要旋转而贴合地面的坡度,否则就会出现部分悬空的现象)
  • Min/Max Rotation Offset X/Y/Z:出生旋转方向偏移的最大/最小值
  • Use Parent Scale:是否从其父物体处获得缩放
  • Min/Max Scale:出生时缩放的最大/最小量设置
  • Scale By Distance:用一条曲线来控制,根据出生位置离中心点的远近来调整缩放值
  • Local Bounds:该Instance的边界半径值(用于其他Instance回避与此Instance相重叠)
  • Virgin Terrain:设置是否只能生成在“裸露Terrain”上
  • Ext Param:用于其他插件的自定义参数

下面我们来自己配置一个GameObject资源:

在场景中先创建一个Plane来当做参考地面,然后添加一些模型来组成一个小院子的样子。这些模型都不要做父子连接。

选择一个GR配置文件,在Inspector中将其锁定,这样我们选择其他游戏对象时,Inspector中依然是显示的这个GR配置文件的内容:

在Hierarchy中选择除地面以外所有的模型,然后拖到GR配置文件的“Drop Game Objects / Prefabs Here”框中,就会自动将这些模型变成一个GameObject资源,并自动起了个名字。

我们可以把两颗树的“Rotate To Slope”选项关闭,设置随机Y轴旋转,设置较明显的缩放,增加大约0.3的“Failure Rate”。

我们还可以设置那一丛草随机多次复制,并沿着X/Z轴有一定的偏移,勾选“Virgin Terrain”。

创建一个Clustered GameObject Spawner,使用这个GR配置文件,设置每500个可行位置创建一群最多不超过6个的聚落,点击“Spawn”,Terrain的平地区域就会出现多个小院子,而且每个小院子还有所区别。

修改GR配置文件中的Spawn Criteria中的Max Slope值为25,再次“Spawn”,这次小院子就会出现在有一定坡度的位置了。

可以看到,在坡度上,只有树和草不会随着坡度而旋转。

小结:

不可否认,Gaia的GR配置文件确实非常强大,也非常具有扩展性,但整个配置过程真的谈不上“方便”。比起利用自带的GR文件和素材来“一键生成”整个场景,要配置好一个完全自定义的GR文件至少需要对Gaia有较高的熟悉度以及至少大半天时间的耐心调试。当然啦,配置完成之后的创建工作就非常爽快了。因此,是不是有必要去做这项工作,真的取决于你的项目复杂程度和实际需求。

个人建议,刚开始玩GR配置文件的时候,还是多多利用并学习自带的那几个GR配置文件吧。可以将其复制之后再修改,总比从零开始创建要方便一些。

相关文章

网友评论

    本文标题:Gaia for Unity完全攻略(3):深入解析

    本文链接:https://www.haomeiwen.com/subject/ditloctx.html