美文网首页交互媒体设计教案
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