手机开放世界动态生态开发

开放世界游戏面对主要问题是资源的加载和卸载问题
基本做法是基于划分区块,整个区块做多级LOD
但是这套做法主要解决静态场景问题,对于纯动态场景,有额外的问题需要解决
目标则是,构建完全由程序生成地形和生态群落的树木,草和NPC分布
 
1:过程地形的生成
最简单的做法基于多重perlin噪音的混合生成
perlin噪音生成地形结构太过机械,缺少蚀刻特性,改善方法
通过perlin噪音生成基础的多个生态分布
每个生态再去读取通过 worldMachine 之类的工具生成的具体的高度图
这样就能构成一个整体世界随机生态分布,每个生态地形又有足够的细节
 
不同的生态应该采用不同的纹理,地形采用Mesh方式构建,顶点色标注不同生态,通过顶点色偏移纹理数组,从而控制不同生态采样不同纹理
在生态边缘,通过额外绘制若干边缘mesh一层的方式,在两个生态之间通过Alpha透明度过渡的方式,混合纹理,实现生态边缘的逐渐过渡
 
过程地形纹理,可以通过坡度,噪音的方式采样多张纹理,增加细节表现
这种地形在局部拥有细节,但是缺少全局的结构特征,缺少类似gaea工具的Clut生成的地理颜色分布,以及宏观法线缺少,导致低精度Mesh缺少足够的远景宏观法线细节
也可以通过顶点色控制生态宏观法线的纹理数组采样,生态边缘通过额外Mesh过渡
 
地形Mesh的顶点色也可以包含部分AO信息,便于压低地表坑洞颜色,增加地表细节
 
2:过程草的生成
地形上需要有覆盖物来增加细节,以10*10的Cell大小,来生成高密度的草,可以限制只附近50m范围内生成,通过GPU Instance绘制草体
而花朵等其它装饰植被可以限制为附近10m生成,这样既可以高覆盖率,同时也增加了草的细节
草体渲染,通常卡通化,不需要绘制阴影,只接受阴影,同时草的发现始终向上,通过额外纹理形成多种颜色分布,以及草浪的颜色变化
 
3:过程树木的分布
树木生成高度依赖于地形的高度,地形以64* 64为一个Cell,近处高精度区域为5*5,而在之外整个7*7范围为中景,再远则为远景
中景远景的树木可以通过GPU Instance的方式直接绘制,近景则需要采用单个prefab实体的方式加载,因为近处的树木需要碰撞等逻辑交互
中景远景可以通过Imposter billboard方式渲染,近景制作两级LOD,第二级即是billboard
中景billboard以zone为单位作为批次,整个GPU Instance绘制
 
4:水体
水体和地形Mesh一一关联,每个64*64m的Zone,有一块水体Mesh
 
5:远景地形和远景水体
远景水体通过一片巨大的水平面绘制,远景地形通过可以通过一块2KM*2KM大小Mesh绘制,也可以对远景进行切块,根据距离逐渐降低精度,通过Mesh加Skirt的方式,来消除连接处的接缝问题
 
6:天空和大气环境
通过实时反射球,反射天空盒和地形,采样反射球较低的mip级别,用于做假的大气散射颜色,在雾气计算逻辑中处理
天空盒,采用过程方式,通过配置四个时间段,清晨,正午,傍晚,深夜,不同的天空盒,混合材质,来绘制天空盒
天空盒基本氛围,地面,地平线,天空,太阳,太阳光晕,多个部分来配置颜色,对于月亮,可以额外采样一张纹理,来绘制
环境额外包括风,雨,雪,雾,等基本的配置,风可以通过粒子表现,地面雾气分为远景的雾片,和贴地面的平面雾气
雾气还包括基于距离和基于高度的雾气,以及近处的雾气粒子
7:云朵
云朵可以接受光照,以及采样法线贴图,但是需要控制最低亮度
 
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章