三、功能详解
跟着做完上一部分内容的朋友肯定有很多疑惑,什么叫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 TypeOperation Type决定了这次Stamping会对当前Terrain产生什么影响,可以选择Raise(拉高当前Terrain)、Lower(降低当前Terrain)、Blend(按权重比例与当前Terrain相融合)、Stencil(取代范围内当前Terrain的高度数据)、Difference(计算出于当前Terrain高度的差值)等五种类型。
Distance MaskDistance 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配置文件吧。可以将其复制之后再修改,总比从零开始创建要方便一些。
网友评论