ApocBoi
2020-11-26T17:59:49+00:00
本帖内容转自圈内著名大佬AA001(老A)在百度星际公民吧发布的[url=https://tieba.baidu.com/p/7107039570]科普贴[/url],已获得老A同意。老A本人是国内最早的一批backer之一,也是这次汉化组的带头人,负责完成了大部分的技术工作,以及与官方的大量沟通工作,帮助汉化组确定了对游戏内容修改的底线。其本人也与官方不少员工私交甚密。
本贴中提到的各项重要技术和其子技术,其实已经有大半都已经完成并实装入游戏了。目前主要等待的就是服务器网格化了。
原帖还未更新完毕,后续更新完毕之后我会对一楼进行编辑,补充剩下的内容。
1、“伊神”是贴吧著名吧宠,圈内著名精神病,喜欢到处凭借自己的臆想瞎吹《星际公民》的画面、引擎技术等,在百度Steam吧、网络游戏吧等大型贴吧重复发帖,内容不知所谓,这也导致了《星际公民》在Steam吧风评很差。如果在NGA也发现了莫名其妙吹捧《星际公民》的帖子,极有可能就是伊神也来这里开马甲了。
2、SC是Star Citizen的缩写,也就是《星际公民》的英文名的缩写。SQ42是Squadron 42的缩写,也就是和《星际公民》同世界观的剧情驱动的半开放世界单人战役部分《42中队》的英文缩写。CIG是Cloud Imperium Games的缩写,也就是《星际公民》和《42中队》的开发商的英文名的缩写。
3、“克拉克”为Carrack的音译。Anvil Aerospace(铁砧航天)的Carrack级探索舰是一艘广受喜爱的探索用大型飞船。[url=https://redd.it/k6i37w/]下图图源Reddit[/url]
星际公民开发8年之久,还不能成为一个“可玩”的游戏是因为大量的技术还在开发当中,作为公民的老玩家我们听到开发者最多的理(借)由(口)是“我们还需要工具才能使这项功能上线”,临近年底,又是周年销售期间,CIG的开发者们都比较忙,但是抽空也跟几位引擎开发和技术开发的devs聊了会天,由于伊神靠机翻的东西加上自己臆想的理解和坚持不懈地在外当复读机给SC造成极差的印象,加上其实圈内玩家除了对项目特别感兴趣的对游戏的技术开发所知甚少,因此决定做一个CIG开发的重要技术汇总,而这些比较重要的技术是让SC成为一个可玩游戏的基础,因此也希望大家对它们有所了解,不要被误导。
声明:所有技术内容仅代表目前开发进程和打算,没有上线时间的预计未来内容也有可能发生变动,在描述过程中本人尽可能还原官方描述,不会添加任何个人理解(如果有我会在楼层中回复而非单独发作一楼或者掺杂文中)。
本贴内容较长并且会更新, 建议使用 只看楼主 进行观看
重要技术讲解顺序:程序化生成行星技术,64位高精度地图/引擎,巨型地图预加载技术,物理昼夜循环技术(非天空盒),客户端对象容器流式运输(OCS),服务器对象容器流式运输(SOCS),物理储存系统,物理容器项目接口2.0(物理化飞船组件系统),服务器网格化技术(Server Meshing)[静态和动态]
非核心技术讲解顺序(会接重要技术后发布):第一人称与第三人称动画同步,DNA角色面部创建,气体云,FOIP(面部追踪),实时渲染反馈(镜子反射),AI分类,物体对象的物理/程序化损坏状态(物理破坏),物理化布条技术(衣服物理),物理化通勤和运输系统,物理弹丸管理器,零重力推拉,SDF技术(新护盾系统)
其余不是很重要或者不是很了解的技术我就不讲解了,能点进来看的基本都是对SC开发感兴趣和关注的朋友,希望大家理性看待,合理讨论,千万不要过度臆想或者半瓶子水就拿着机翻的东西出去当神论,这种做法不可取,就像一个用i7 7700和1060(刚好达到CIG最低推荐游玩系统)天天嚷嚷星际公民物理爆炸一样,论配置要炸也是先淘汰你自己嘛[s:ac:哭笑]
目录:
1、程序化生成行星技术
程序化生成行星技术是CIG程序化生成的主要技术,很多游戏的场景和地点无非就是程序化生成亦或是手工打造,而CIG的程序化生成行星技术是利用程序化生成结合手工打造所建立的工具,它的优势在于大规模游戏区域的生成和手工构建雕琢互相衬托。在使用这个工具时,CIG的美术艺术家可以设计星球每个生物群落的风格氛围,颜色,地形,植物动物等,以及这些群落所在星球上的位置,而程序化的工作则是细分物体位置比如每棵树每座山的详细坐标并且进行大规模生成。星球建立后CIG还可以手动修改和调整程序化生成的所有区域进行加工和打磨,例如设计任务区域。在一些重要的区域比如城市,空间站,任务点,兴趣点让艺术家来操刀,至于其他空旷大部分星球面积则交给程序化。
程序化生成行星技术所包含的子技术:程序化生成城市技术,程序化生成空间站技术,程序化生成小行星落技术,程序化生成动态天气技术,径向物理网格技术(重力),生态系统和生物群落分布技术,大气物理技术
2、64位高精度地图/引擎
64位高精度地图/引擎技术运行玩家在一个星系大小的地图下以第一人称游玩也能保证其高保真度,玩家所处的每一个位置都有其独立的x,y,z坐标和x,y网格编号,为了让玩家以第一人称在太阳系大小的地图下进行游戏,位置网格与网格之间的距离为1毫米,而大多数游戏都是以32位变量来储存坐标位置,可以使20公里x20公里x20公里的任一位置都有独立的坐标,而CIG开发的64位高精度地图/引擎则可以达到32位的2^32倍,使玩家在星系大小的地图里的任一位置都有唯一坐标,并且将网格精度保持为1毫米。
3、巨型地图预加载技术
整个基于64位精度的巨型地图会通过预加载完成,所以在进入游戏可以实现真实无缝
4、物理昼夜循环技术(非天空盒)
物理昼夜循环技术是StarEngine里的Sol-Ed(太阳能系统编辑器)和行星技术结果产物之一,该技术运行物理化的球体(比如行星和卫星)进行适当地旋转,并且通过其本地的光源实现昼夜效果
[quote]
楼中楼关于光追的对话:
吧友:之前光谱里回复光追问题的时候也说到了物理昼夜循环技术的问题,公民光追进度也卡在了如何对实体恒星的光进行光追。。。
老A:我能透露的是目前已经有了解题的思路并且开始在初步测试中
[/quote]5、客户端对象容器流式运输(OCS)
对象容器流式运输是使星际公民能够创建一个宇宙的关键,它可以不受限于玩家PC的物理内存上限,在玩家游玩的过程中访问新环境时对所在位置和物体进行流式运输,并且整个过程是无缝的,因此OCS对性能提升有了极大的帮助,因为它不会让你的显存因为内容太庞大而过载。OCS不会让玩家在登录时就加载所有的内容,而是根据玩家访问的地址进行所需资产的加载,同样在玩家离开后能对其进行卸载。同时OCS也可以作用于NPC身上,玩家离开区域后,NPC也会被OCS给卸载,但是这不代表这些NPC就消失了,而是玩家不需要看到它们的时候这些资产(包括NPC)不会加载到玩家的客户端中,而它们则会作为数据保留在“宇宙”当中,直到玩家再次访问和重新加载。如果NPC的行为在玩家没有加载的情况下导致环境有所改变(比如NPC破坏了某个物体),玩家在重新加载场景的时候也能看到NPC行为所造成的变化,对象容器流式运输的对象也是多层次的,可以实现“套娃”,所以客户端加载卸载并不完全是基于距离,而是根据实际需要,只要这个“容器”内的对象没有限制,同时也由客户端根据实际情况选择加载“小容器”或是“大容器”的内容,举个栗子,你可以看到一艘大型资本级舰船比如伊德里斯标枪海妖孟加拉的外形,但这不意味着你要去加载其内部,你可以在赫斯顿的酒吧却不需要加载就在旁边的医院,甚至你在任何一个地方的门外,你不需要加载房间内的对象,就是这个道理。
6、服务器对象容器流式运输(SOCS)
[当年国内外都吹成神的技术,事实证明没有god-tech]
和OCS差不多的原理只不过是用作于服务器端,目的是为了减少服务器的内存和CPU压力从而能给游戏添加更多的内容,实现SOCS的方法是把动态地把对象容器中的实体进行序列化,然后将实体的数据传输/保存/加载到服务器的数据库(目前的pcache之后是icache)来释放服务器内存。在这种情况下,根据需要去加载整个数据库中只需要用到的一部分而不是加载整个数据库(玩家访问的地区附近的一部分)来减少内存,并且能够减少CPU的运算,使服务器性能不会再因为CPU或者内存的压力而降低。由于其可以选择性地访问数据库中仅需要的部分,CIG可以给数据库中添加更多的内容而按需让服务器加载。
SOCS所包含的子技术:物体实体传输管理,无限状态和位置ID记录
7、物理储存系统
物理储存系统是一个依赖全局持续性的系统,而全局持续性又是一个依赖icache的系统,随着icache和全局持续性的开发虽然这个技术目前还没有达到release的阶段但是玩家已经可以逐步感受到它在游戏中的作用,比如个人库存。物理储存系统的另外一个很重要的前提就是所有的物品都要物理化,这样物品才能进行储存,武器、盔甲、设备、飞船组件、矿物、货物、用品等等,玩家目前可以通过Mobiglas进行物品来查看而物理储存系统才是让玩家能够真正访问和使用物品的重要技术。之所以说物理储存系统需要全局持续性加持是因为所有的物体状态都需要“全局持续”存在。这个系统也是著名说法“克拉克,咖啡杯,森林”的来源,而我这么解释你可能更加清楚它的作用:你可以买一杯咖啡,把咖啡放进背包里,把背包放进克拉克里,克拉克开到森林里[s:ac:嘲笑1]不管是咖啡,背包,还是克拉克,都是作为物理实体以一个“全局持续”的状态储存进了icache里。基于此也会延伸开发类似“清道夫”作用的机制,基于访问热点和储存对象大小来进行清理,这种清理可以是基于时间或者基于状态,避免发生森林里有一万个玩家扔下的咖啡杯或者在18区停满了克拉克。
8、物理容器项目接口2.0(物理化飞船组件系统)
物理容器项目接口2.0就是创造一个内部的物理网格,比如玩家在开船的时候,玩家跟着船动,而船跟着世界在动,都是独立的物理运算,在这种情况下也能实现第一人称和第三人称的动画同步,使玩家不管是第一人称视角/第三人称视角或者其他玩家以第一人称视角或者第三人称视角看你的行为动作都能是一致的。而这个物理网格里的项目可以作为接口连接到另一个网格内的项目从而达成一些非常逼真和有意义的效果,例如飞船组件物理状态对飞船的影响,电力系统,火势的蔓延,以及重力和受力的影响,所有的在这个“容器”内物理网格下的项目都是单独存在而又互相可以对接的,从而实现许多功能。
物理容器项目接口2.0的子技术:房间系统,火势系统,飞船内受力系统,房间内重力系统,飞船或者房间内电力系统
9、服务器网格化技术(Server Meshing)1/2 静态服务器网格化
有了前面OCS和SOCS两项技术的加持,CIG可以着手于服务器网格化,而服务器网格化则分为静态和动态,这里先说静态。静态服务器网格化其实就是将游戏中的位置比如行星或者卫星,城市或者空间站,更准确地说是每个对象容器给拆分,被拆分出来的每一个区域都由单独的服务器进行加载运算,比如“赫斯顿服务器”,“弧光星服务器”等,每一个被拆分的区域服务器被称为分片(shard),通过SOCS的加载卸载能力当玩家作为一个实体从一个地区转移到另一个地区时实际上是将实体及其状态从一个服务器传输到另一个服务器。在传输的过程中在玩家的客户端要做到无缝切换服务器连接并且保证服务器之间数据传输正常畅通无误,在后台全局数据库服务器中能够计算哪些分片需要加载或卸载。在这种情况下单个服务器压力会随着玩家和实体的转移而减少压力,同时能实现所谓的“全球同服”。值得一提的是服务器网格化技术也是支持物品物理化和物品储存实现的重要基石,全局持续性和icache也离不开静态服务器网格化。
静态服务器网格化子技术:物品实体物理化和物品储存系统,icache,全局持续性。
10、服务器网格化技术(Server Meshing)2/2 动态服务器网格化
静态服务器网格化实现后服务器的压力会小很多,但依然不能保证拆分后的服务器能承受住来自玩家的压力,比如大型舰队活动舰队战等,动态服务器网格化顾名思义就是把服务器动态地拆分而非静态那样按区域拆分,动态是按需求。根据一个分片中的实体数量(最直接的就是玩家和玩家船的数量)来进行拆分,一个服务器如果接近爆满就会被动态服务器网格化拆分成两个分片到两个新的服务器进行运算,而这两个分片之间的数据是互相连接的,而这个转移过程就通过SOCS的加载和卸载功能来完成。技术的重点在于服务器拆分为分片A和分片B后,分片A的玩家需要能看到分片B中的状态,反之亦然,从而使玩家感受上还是处于“一个世界”。举个栗子,未来打一场舰队战,双方各派出250人一共500人参战,抵达战场后,动态服务器网格化技术将会把这500个人给根据拆分成50个分片,每一个分片中都是5个玩家VS5个玩家,而分片中的这10个玩家是可以穿梭到另外的分片去的,同样通过服务器网格化技术再进行合理的拆分以及SOCS进行加载与卸载来达到战场的规模还是500人的规模但实际的服务器运算是50个服务器运算50个分片中的5V5。根据实际情况,动态决定每个区域的大小,也许能小到几公里内,一艘船内,一个房间内,都能够按需被拆分成单独的分片。有了动态服务器网格才能提升服务器的人数上限和实现所谓的“万人同服”。其他游戏也有了类似的服务器网格化技术,比如方舟、阿特拉斯的服务器传送和大地图,一些网游的“切换线路”等等,但是动态服务器网格化的跟它们区别在于自行切分,同时做到状态互通,这样在玩家感受上并不会感到自己被换了服务器而是在切片A能看到切片BCDEFG里的所有状态,以及自己做的动作行为比如射击开火投掷等数据也能被实时传输到其他切片中进行运算和造成影响。
这项技术目前还处于理论和基础架构建设状态,按照目前静态网格化的开发和逐步应用,个人预计会在2021后半段至2022中期进行开发
[quote]老A:以上这些技术也有很多是运用在42中的,我没有进行区分了,因为都是作为CIG的公司资产[/quote]核心技术总结
所有的核心技术讲完了,需要说明的是,一个完整的星际公民,没有其中任何某单独一项技术能够让星际公民明天就可以发布,而是需要所有的技术开发完成,经过测试,并且运行成熟,能达到预期的效果后才能产生质变。SOCS就是被吹得最厉害的最过头的技术然后SOCS实装后玩家的感受并不是非常直观和明显,反而带来了各种各样的问题,比如频繁30K,NPC站椅子等等。因此要说明的是,一个技术的概念和预期目标,经过开发和实践,并且解决后面所遇到的问题后,才是一项成熟和完整的技术,就像咖啡杯克拉克森林,需要icache,需要SOCS,需要全局持续性,需要服务器网格化,缺一不可,而还未上线的技术,上线后又会带来哪些BUG产生哪些问题?目前不得而知只有实践才能出真知。
我非常理解有些人热爱这个游戏,这个项目的心,但是进行一些胡吹、乱吹,甚至自己对这些东西都不完全了解的情况下掺杂了大量的个人理解然后跑出去宣扬,最后只会造成自己像个小丑一样被人嘲笑和不被大众所接受。
作为玩家,当然希望CIG能掏出什么黑科技达成一些伟大的成就,不过我更希望大家能够明白路都是一步步走出来的,星际公民的技术和内容也是需要一点点完善起来的,如果没有这些技术,当初画的饼就不可能实现,而随着这些技术的开发和逐步实装,能让玩家看到“饼原来是可以完成的”。不过切记,没有上帝技术能够一步登天,也没有什么技术能让CIG一波封神,做一个追梦者而不要做一个造梦者。
不存在什么内存过载爆炸,不存在什么CPU运算爆炸,CIG现在做的一切反而都是在减负~
[quote]
关于NPC站在椅子上的著名BUG的问答:
吧友:其实30K和站椅子在OCS实装前就有了,实装后30K的问题反而少很多,站椅子最早在2017公民控的弧光演示就出现过了
老A:站椅子的原因有很多,而目前大部分NPC站椅子的原因并不是17年那个时候的原因,而大多是因为SOCS导致的不同步所造成的的,30K确实在OCS后减少了很多,但在SOCS加入后...[s:ac:冷]
吧友:可以有个讨巧的办法,把npc的刷新点都设置在路中间应该好很多,不过之前好像bug是站街。。。
老A:问题在于NPC不是被“刷新”而是给保存了起来,等玩家访问那个区域的时候再加载,这段时间NPC的动作和行为导致的物理变动玩家回来也是能看到的,问题在于不同步所以不管在什么地方,玩家访问都会出现各种问题,集体站街或者人物重合等
[/quote]
本贴中提到的各项重要技术和其子技术,其实已经有大半都已经完成并实装入游戏了。目前主要等待的就是服务器网格化了。
原帖还未更新完毕,后续更新完毕之后我会对一楼进行编辑,补充剩下的内容。
一些重要名词注解:
1、“伊神”是贴吧著名吧宠,圈内著名精神病,喜欢到处凭借自己的臆想瞎吹《星际公民》的画面、引擎技术等,在百度Steam吧、网络游戏吧等大型贴吧重复发帖,内容不知所谓,这也导致了《星际公民》在Steam吧风评很差。如果在NGA也发现了莫名其妙吹捧《星际公民》的帖子,极有可能就是伊神也来这里开马甲了。
2、SC是Star Citizen的缩写,也就是《星际公民》的英文名的缩写。SQ42是Squadron 42的缩写,也就是和《星际公民》同世界观的剧情驱动的半开放世界单人战役部分《42中队》的英文缩写。CIG是Cloud Imperium Games的缩写,也就是《星际公民》和《42中队》的开发商的英文名的缩写。
3、“克拉克”为Carrack的音译。Anvil Aerospace(铁砧航天)的Carrack级探索舰是一艘广受喜爱的探索用大型飞船。[url=https://redd.it/k6i37w/]下图图源Reddit[/url]
一张截图(本图中出现的为装配了Best In Show 2950皮肤的Carrack级) ...
[img]https://i.redd.it/yu71fq7875361.jpg[/img]
以下内容为原帖正文,文中出现的“我”均为老A。
星际公民开发8年之久,还不能成为一个“可玩”的游戏是因为大量的技术还在开发当中,作为公民的老玩家我们听到开发者最多的理(借)由(口)是“我们还需要工具才能使这项功能上线”,临近年底,又是周年销售期间,CIG的开发者们都比较忙,但是抽空也跟几位引擎开发和技术开发的devs聊了会天,由于伊神靠机翻的东西加上自己臆想的理解和坚持不懈地在外当复读机给SC造成极差的印象,加上其实圈内玩家除了对项目特别感兴趣的对游戏的技术开发所知甚少,因此决定做一个CIG开发的重要技术汇总,而这些比较重要的技术是让SC成为一个可玩游戏的基础,因此也希望大家对它们有所了解,不要被误导。
声明:所有技术内容仅代表目前开发进程和打算,没有上线时间的预计未来内容也有可能发生变动,在描述过程中本人尽可能还原官方描述,不会添加任何个人理解(如果有我会在楼层中回复而非单独发作一楼或者掺杂文中)。
本贴内容较长并且会更新,
重要技术讲解顺序:程序化生成行星技术,64位高精度地图/引擎,巨型地图预加载技术,物理昼夜循环技术(非天空盒),客户端对象容器流式运输(OCS),服务器对象容器流式运输(SOCS),物理储存系统,物理容器项目接口2.0(物理化飞船组件系统),服务器网格化技术(Server Meshing)[静态和动态]
非核心技术讲解顺序(会接重要技术后发布):第一人称与第三人称动画同步,DNA角色面部创建,气体云,FOIP(面部追踪),实时渲染反馈(镜子反射),AI分类,物体对象的物理/程序化损坏状态(物理破坏),物理化布条技术(衣服物理),物理化通勤和运输系统,物理弹丸管理器,零重力推拉,SDF技术(新护盾系统)
其余不是很重要或者不是很了解的技术我就不讲解了,能点进来看的基本都是对SC开发感兴趣和关注的朋友,希望大家理性看待,合理讨论,千万不要过度臆想或者半瓶子水就拿着机翻的东西出去当神论,这种做法不可取,就像一个用i7 7700和1060(刚好达到CIG最低推荐游玩系统)天天嚷嚷星际公民物理爆炸一样,论配置要炸也是先淘汰你自己嘛[s:ac:哭笑]
目录:
- 1、程序化生成行星技术
- 2、64位高精度地图/引擎
- 3、巨型地图预加载技术
- 4、物理昼夜循环技术(非天空盒)
- 5、客户端对象容器流式运输(OCS)
- 6、服务器对象容器流式运输(SOCS)
- 7、物理储存系统
- 8、物理容器项目接口2.0(物理化飞船组件系统)
- 9、服务器网格化技术(Server Meshing)1/2 静态服务器网格化
- 10、服务器网格化技术(Server Meshing)2/2 动态服务器网格化
1、程序化生成行星技术
程序化生成行星技术是CIG程序化生成的主要技术,很多游戏的场景和地点无非就是程序化生成亦或是手工打造,而CIG的程序化生成行星技术是利用程序化生成结合手工打造所建立的工具,它的优势在于大规模游戏区域的生成和手工构建雕琢互相衬托。在使用这个工具时,CIG的美术艺术家可以设计星球每个生物群落的风格氛围,颜色,地形,植物动物等,以及这些群落所在星球上的位置,而程序化的工作则是细分物体位置比如每棵树每座山的详细坐标并且进行大规模生成。星球建立后CIG还可以手动修改和调整程序化生成的所有区域进行加工和打磨,例如设计任务区域。在一些重要的区域比如城市,空间站,任务点,兴趣点让艺术家来操刀,至于其他空旷大部分星球面积则交给程序化。
程序化生成行星技术所包含的子技术:程序化生成城市技术,程序化生成空间站技术,程序化生成小行星落技术,程序化生成动态天气技术,径向物理网格技术(重力),生态系统和生物群落分布技术,大气物理技术
2、64位高精度地图/引擎
64位高精度地图/引擎技术运行玩家在一个星系大小的地图下以第一人称游玩也能保证其高保真度,玩家所处的每一个位置都有其独立的x,y,z坐标和x,y网格编号,为了让玩家以第一人称在太阳系大小的地图下进行游戏,位置网格与网格之间的距离为1毫米,而大多数游戏都是以32位变量来储存坐标位置,可以使20公里x20公里x20公里的任一位置都有独立的坐标,而CIG开发的64位高精度地图/引擎则可以达到32位的2^32倍,使玩家在星系大小的地图里的任一位置都有唯一坐标,并且将网格精度保持为1毫米。
3、巨型地图预加载技术
整个基于64位精度的巨型地图会通过预加载完成,所以在进入游戏可以实现真实无缝
4、物理昼夜循环技术(非天空盒)
物理昼夜循环技术是StarEngine里的Sol-Ed(太阳能系统编辑器)和行星技术结果产物之一,该技术运行物理化的球体(比如行星和卫星)进行适当地旋转,并且通过其本地的光源实现昼夜效果
[quote]
楼中楼关于光追的对话:
吧友:之前光谱里回复光追问题的时候也说到了物理昼夜循环技术的问题,公民光追进度也卡在了如何对实体恒星的光进行光追。。。
老A:我能透露的是目前已经有了解题的思路并且开始在初步测试中
[/quote]5、客户端对象容器流式运输(OCS)
对象容器流式运输是使星际公民能够创建一个宇宙的关键,它可以不受限于玩家PC的物理内存上限,在玩家游玩的过程中访问新环境时对所在位置和物体进行流式运输,并且整个过程是无缝的,因此OCS对性能提升有了极大的帮助,因为它不会让你的显存因为内容太庞大而过载。OCS不会让玩家在登录时就加载所有的内容,而是根据玩家访问的地址进行所需资产的加载,同样在玩家离开后能对其进行卸载。同时OCS也可以作用于NPC身上,玩家离开区域后,NPC也会被OCS给卸载,但是这不代表这些NPC就消失了,而是玩家不需要看到它们的时候这些资产(包括NPC)不会加载到玩家的客户端中,而它们则会作为数据保留在“宇宙”当中,直到玩家再次访问和重新加载。如果NPC的行为在玩家没有加载的情况下导致环境有所改变(比如NPC破坏了某个物体),玩家在重新加载场景的时候也能看到NPC行为所造成的变化,对象容器流式运输的对象也是多层次的,可以实现“套娃”,所以客户端加载卸载并不完全是基于距离,而是根据实际需要,只要这个“容器”内的对象没有限制,同时也由客户端根据实际情况选择加载“小容器”或是“大容器”的内容,举个栗子,你可以看到一艘大型资本级舰船比如伊德里斯标枪海妖孟加拉的外形,但这不意味着你要去加载其内部,你可以在赫斯顿的酒吧却不需要加载就在旁边的医院,甚至你在任何一个地方的门外,你不需要加载房间内的对象,就是这个道理。
6、服务器对象容器流式运输(SOCS)
[当年国内外都吹成神的技术,事实证明没有god-tech]
和OCS差不多的原理只不过是用作于服务器端,目的是为了减少服务器的内存和CPU压力从而能给游戏添加更多的内容,实现SOCS的方法是把动态地把对象容器中的实体进行序列化,然后将实体的数据传输/保存/加载到服务器的数据库(目前的pcache之后是icache)来释放服务器内存。在这种情况下,根据需要去加载整个数据库中只需要用到的一部分而不是加载整个数据库(玩家访问的地区附近的一部分)来减少内存,并且能够减少CPU的运算,使服务器性能不会再因为CPU或者内存的压力而降低。由于其可以选择性地访问数据库中仅需要的部分,CIG可以给数据库中添加更多的内容而按需让服务器加载。
SOCS所包含的子技术:物体实体传输管理,无限状态和位置ID记录
7、物理储存系统
物理储存系统是一个依赖全局持续性的系统,而全局持续性又是一个依赖icache的系统,随着icache和全局持续性的开发虽然这个技术目前还没有达到release的阶段但是玩家已经可以逐步感受到它在游戏中的作用,比如个人库存。物理储存系统的另外一个很重要的前提就是所有的物品都要物理化,这样物品才能进行储存,武器、盔甲、设备、飞船组件、矿物、货物、用品等等,玩家目前可以通过Mobiglas进行物品来查看而物理储存系统才是让玩家能够真正访问和使用物品的重要技术。之所以说物理储存系统需要全局持续性加持是因为所有的物体状态都需要“全局持续”存在。这个系统也是著名说法“克拉克,咖啡杯,森林”的来源,而我这么解释你可能更加清楚它的作用:你可以买一杯咖啡,把咖啡放进背包里,把背包放进克拉克里,克拉克开到森林里[s:ac:嘲笑1]不管是咖啡,背包,还是克拉克,都是作为物理实体以一个“全局持续”的状态储存进了icache里。基于此也会延伸开发类似“清道夫”作用的机制,基于访问热点和储存对象大小来进行清理,这种清理可以是基于时间或者基于状态,避免发生森林里有一万个玩家扔下的咖啡杯或者在18区停满了克拉克。
8、物理容器项目接口2.0(物理化飞船组件系统)
物理容器项目接口2.0就是创造一个内部的物理网格,比如玩家在开船的时候,玩家跟着船动,而船跟着世界在动,都是独立的物理运算,在这种情况下也能实现第一人称和第三人称的动画同步,使玩家不管是第一人称视角/第三人称视角或者其他玩家以第一人称视角或者第三人称视角看你的行为动作都能是一致的。而这个物理网格里的项目可以作为接口连接到另一个网格内的项目从而达成一些非常逼真和有意义的效果,例如飞船组件物理状态对飞船的影响,电力系统,火势的蔓延,以及重力和受力的影响,所有的在这个“容器”内物理网格下的项目都是单独存在而又互相可以对接的,从而实现许多功能。
物理容器项目接口2.0的子技术:房间系统,火势系统,飞船内受力系统,房间内重力系统,飞船或者房间内电力系统
9、服务器网格化技术(Server Meshing)1/2 静态服务器网格化
有了前面OCS和SOCS两项技术的加持,CIG可以着手于服务器网格化,而服务器网格化则分为静态和动态,这里先说静态。静态服务器网格化其实就是将游戏中的位置比如行星或者卫星,城市或者空间站,更准确地说是每个对象容器给拆分,被拆分出来的每一个区域都由单独的服务器进行加载运算,比如“赫斯顿服务器”,“弧光星服务器”等,每一个被拆分的区域服务器被称为分片(shard),通过SOCS的加载卸载能力当玩家作为一个实体从一个地区转移到另一个地区时实际上是将实体及其状态从一个服务器传输到另一个服务器。在传输的过程中在玩家的客户端要做到无缝切换服务器连接并且保证服务器之间数据传输正常畅通无误,在后台全局数据库服务器中能够计算哪些分片需要加载或卸载。在这种情况下单个服务器压力会随着玩家和实体的转移而减少压力,同时能实现所谓的“全球同服”。值得一提的是服务器网格化技术也是支持物品物理化和物品储存实现的重要基石,全局持续性和icache也离不开静态服务器网格化。
静态服务器网格化子技术:物品实体物理化和物品储存系统,icache,全局持续性。
10、服务器网格化技术(Server Meshing)2/2 动态服务器网格化
静态服务器网格化实现后服务器的压力会小很多,但依然不能保证拆分后的服务器能承受住来自玩家的压力,比如大型舰队活动舰队战等,动态服务器网格化顾名思义就是把服务器动态地拆分而非静态那样按区域拆分,动态是按需求。根据一个分片中的实体数量(最直接的就是玩家和玩家船的数量)来进行拆分,一个服务器如果接近爆满就会被动态服务器网格化拆分成两个分片到两个新的服务器进行运算,而这两个分片之间的数据是互相连接的,而这个转移过程就通过SOCS的加载和卸载功能来完成。技术的重点在于服务器拆分为分片A和分片B后,分片A的玩家需要能看到分片B中的状态,反之亦然,从而使玩家感受上还是处于“一个世界”。举个栗子,未来打一场舰队战,双方各派出250人一共500人参战,抵达战场后,动态服务器网格化技术将会把这500个人给根据拆分成50个分片,每一个分片中都是5个玩家VS5个玩家,而分片中的这10个玩家是可以穿梭到另外的分片去的,同样通过服务器网格化技术再进行合理的拆分以及SOCS进行加载与卸载来达到战场的规模还是500人的规模但实际的服务器运算是50个服务器运算50个分片中的5V5。根据实际情况,动态决定每个区域的大小,也许能小到几公里内,一艘船内,一个房间内,都能够按需被拆分成单独的分片。有了动态服务器网格才能提升服务器的人数上限和实现所谓的“万人同服”。其他游戏也有了类似的服务器网格化技术,比如方舟、阿特拉斯的服务器传送和大地图,一些网游的“切换线路”等等,但是动态服务器网格化的跟它们区别在于自行切分,同时做到状态互通,这样在玩家感受上并不会感到自己被换了服务器而是在切片A能看到切片BCDEFG里的所有状态,以及自己做的动作行为比如射击开火投掷等数据也能被实时传输到其他切片中进行运算和造成影响。
这项技术目前还处于理论和基础架构建设状态,按照目前静态网格化的开发和逐步应用,个人预计会在2021后半段至2022中期进行开发
[quote]老A:以上这些技术也有很多是运用在42中的,我没有进行区分了,因为都是作为CIG的公司资产[/quote]核心技术总结
所有的核心技术讲完了,需要说明的是,一个完整的星际公民,没有其中任何某单独一项技术能够让星际公民明天就可以发布,而是需要所有的技术开发完成,经过测试,并且运行成熟,能达到预期的效果后才能产生质变。SOCS就是被吹得最厉害的最过头的技术然后SOCS实装后玩家的感受并不是非常直观和明显,反而带来了各种各样的问题,比如频繁30K,NPC站椅子等等。因此要说明的是,一个技术的概念和预期目标,经过开发和实践,并且解决后面所遇到的问题后,才是一项成熟和完整的技术,就像咖啡杯克拉克森林,需要icache,需要SOCS,需要全局持续性,需要服务器网格化,缺一不可,而还未上线的技术,上线后又会带来哪些BUG产生哪些问题?目前不得而知只有实践才能出真知。
我非常理解有些人热爱这个游戏,这个项目的心,但是进行一些胡吹、乱吹,甚至自己对这些东西都不完全了解的情况下掺杂了大量的个人理解然后跑出去宣扬,最后只会造成自己像个小丑一样被人嘲笑和不被大众所接受。
作为玩家,当然希望CIG能掏出什么黑科技达成一些伟大的成就,不过我更希望大家能够明白路都是一步步走出来的,星际公民的技术和内容也是需要一点点完善起来的,如果没有这些技术,当初画的饼就不可能实现,而随着这些技术的开发和逐步实装,能让玩家看到“饼原来是可以完成的”。不过切记,没有上帝技术能够一步登天,也没有什么技术能让CIG一波封神,做一个追梦者而不要做一个造梦者。
不存在什么内存过载爆炸,不存在什么CPU运算爆炸,CIG现在做的一切反而都是在减负~
[quote]
关于NPC站在椅子上的著名BUG的问答:
吧友:其实30K和站椅子在OCS实装前就有了,实装后30K的问题反而少很多,站椅子最早在2017公民控的弧光演示就出现过了
老A:站椅子的原因有很多,而目前大部分NPC站椅子的原因并不是17年那个时候的原因,而大多是因为SOCS导致的不同步所造成的的,30K确实在OCS后减少了很多,但在SOCS加入后...[s:ac:冷]
吧友:可以有个讨巧的办法,把npc的刷新点都设置在路中间应该好很多,不过之前好像bug是站街。。。
老A:问题在于NPC不是被“刷新”而是给保存了起来,等玩家访问那个区域的时候再加载,这段时间NPC的动作和行为导致的物理变动玩家回来也是能看到的,问题在于不同步所以不管在什么地方,玩家访问都会出现各种问题,集体站街或者人物重合等
[/quote]