角色视野理论和世界粒度有密切的关系,主要为了解决客户端的计算量而单独提出来的。以前的例子曾经提到过国战的例子,都是从服务器角度来解析如何实现,却从来没有考虑客户端的情况,而角色视野就是从客户端角度来解决国战的例子。
我考察下,国战时,对客户端会有什么影响呢?首先,在角色视野将充斥大量的人和事物;其次,各种魔法和战斗将频繁发生;再次,和服务器的通讯量将激增;最后,本机计算量将飙升。很多质疑单一世界架构的可能性,就是认为,在现有架构下,无法解决这些问题。我们撇开不谈,先研究下,对于一个角色来说,参与国战的话,需要什么呢?
对于一个角色来说,他真正面对的,只是他视野内所有的东西,我举个荆棘谷的例子。我在荆棘谷的时候,曾经在部落营地发生过好几次战斗,在阿拉希高地也进攻过部落营地,幽暗城有一次,可惜刚入门口就死了,老是进不去,晕,没亡灵角色,不会走。格罗姆高营地的战斗有不少特点,首先,他的树多,视野不是很宽,还蛮多悬崖、废墟。但我们战斗的时候真正面向的只是眼前一个锥形视野,有时候,被部落从背后偷袭却没发现。当然,在你转身跳跃时,场景会急剧变化,成360度全景视野。
另外一个特点,我们真正看清楚的是周围大概30码球形范围内的东西,而超过30码外的,轮廓就很小了,可以看到他们正在和怪物战斗,但具体使用什么法术或者技能的细节却看不出来。比如术士使用死亡缠绕,怪物被恐惧到处跑,你可以看到怪跑动的过程,却看不到死亡缠绕发出的过程。而更远的山脉仅仅只能看到一个轮廓。这几个特点,和真实人类视野也是相似的。人真正看到的也是眼睛目力所及的一个锥形区域,越远的地方看到的也越小。
我们在世界粒度试图探讨,如何降低粒度来降低数据量,这个课题跟角色视野息息相关。假设有1千人在视野范围内进行战斗,你真正能够看到,看仔细的只会是很小距离内的一部分人,而其他人甚至头只要动下就能给你很好的视觉体验。
我们知道,角色视野是个球形区域,越远的视野将越小,粒度越粗。当粒度足够粗的时候,大可不必象细粒度那样计算。所以我在世界粒度篇曾经提过,如果降低粒度来换取计算量的减少。
还有另外方案,我们知道当视野超过一定距离时,粒度将相应降低,那么我们将角色限制在一个球形空间中,角色看到视野超过球形空间半径以外的东西,都是类似于视频那样的图象,而不是靠实时计算出来的。这种方案的基础是认为,网络传输给客户端的代价要远低于客户端的计算代价,这种方案有一定的理论基础。对视频来说,已经有足够的技术压缩一定范围内的视频图象,而角色看到的是粗粒度的图象实际上具有很大的压缩空间。对于近距离的角色变化,完成可以通过本地进行细粒度计算来完成。这样,可以降低了本地GPU的计算压力。
在国战模式下,在角色视野范围可能密布其他角色,由本地承担计算任务,以现在的GPU能力,控制在百人之内应该还是可以的。视野之外,由服务器计算完成,通过压缩到本地解开,合并成一个完整的角色视野。