Epoch Dev Blog 3
最近在做星球的部分东西
昨天和陈叔说 我终于知道我在做什么了
Epoch将会做成一个手机版的 No Man‘s sky,但是并不具备无限的地图过程生成,也没有动物等等,除此以外,Epoch目前在做的功能和No Man‘s sky几乎一样:无缝登陆,过程生成的地表,太空战斗。
无缝登陆这块目前是没有问题,但是在Visual上表现力太差,因为登陆过程要经过一个大气层,这个大气层略高,不好处理地面的物体。No Man Sky的处理方式是加上了一个缓冲用的云层,等云散去,离地表只有一千个单位左右,做大面积的植被也不会有很多性能上的问题。但是我目前没有做这个云层,所以地面树木的生成会被很明显地看到,这个和LOD没有什么关系,就是单纯的突然冒了出来这种效果,因此估计后面我也会做这么一个trick,用云层来阻隔玩家视线,同时生成树木。
地表植被目前只做了树木和草,种类也只有四五种,我也在收集各种SpeedTree,留着后面使用。目前植被生成不是太好,代码也写的很烂,有很多可以优化的地方,主要问题有这几个:
1.草一般是做成billboard,这种模式在第一人称在地面的时候非常有用,可以用很少的物体大面积填充视线。但是这不适用于飞行游戏,飞机是要从天上飞下来的,这个时候billboard的效果就不是很好,因为billboard会让贴图一直面向摄像机所以看上去草角度有问题。解决这个问题我估计只能从改进地面Shader入手,地面贴图先用草,用2K分辨率都不过分,只要能把地面的草给模拟了就好,等到降落后,地面贴图再改成纯泥土,配合很多billboard的草,看起来应该会好些。
2.草不知为什么,并没有被Dynamic Batch掉,结果就是很多draw call,在iPad上运行的效果不是很好。但是我没法做Static Batching,因为我的草并不是真正的静态物体,一旦摄像机掠过草,草就会被移动到前方更远的地方(我还没做pool),保证摄像机看到的是很多草,这样Unity没有办法合并草的mesh,因为都是动态的。
(#Edit : 找到没有 Dynamic Batch 的原因了:我在飞船上加了一个 WindZone 模拟声速飞过的效果,导致 Speed Tree 不能 Batch(对,我的草都是SpeedTree...),关掉风就能看到几乎所有batch都被save了...我一直以为风没有关系)
3.目前树木的生成还不是依据星球的height map,因此是随机分布的,这个其实不难,但我还没写到。
4.海洋的模拟。一般海洋放一个Plane就可以了,但这是星球,是有弧度的,一般的海洋Shader搭配Sphere都会有些问题,我估计解决方式就是,把Sphere拆成一个1/4的弧面,甚至更少,在登陆过程中不断更改mesh,1/4弧面的时候Shader只有反射,保证不是很卡,然后着陆到地平线后再用很小的弧面配合带折射的Shader来做到海洋的效果。
5.天气。这个再说吧,也不是很难做的样子,和树差不多,反正是手机游戏,要求不是很高,没法做很真实,突出风格化就好。