网络游戏吧 关注:1,596,364贴子:29,743,177

星际公民的核心技术领先当代网游五年以上

只看楼主收藏回复

星际公民的核心技术: 程序化生成行星技术,64位双精度地图/引擎,巨型地图预加载技术,物理昼夜循环技术(非天空盒,而是天体的自转和公转形成。),客户端对象容器流式运输(OCS),服务器对象容器流式运输(SOCS),物理储存系统(全部都是带有物理碰撞和交互的实体),物理容器项目接口2.0(物理化飞船组件系统),高度分布式可容错缓存架构,全局持久性数据库,服务器网格化技术(Server Meshing)【静态和动态】
非核心技术(会接重要技术后发布):第一人称与第三人称动画同步,DNA角色面部创建,气体云,FOIP(面部追踪),实时渲染反馈(镜子反射),AI分类,物体对象的物理/程序化损坏状态(物理破坏),物理化布条技术(衣服物理),物理化通勤和运输系统,物理弹丸管理器,零重力推拉,SDF技术(新护盾系统)


1楼2020-11-29 15:33回复
    程序化生成行星技术
    程序化生成行星技术是CIG程序化生成的主要技术,很多游戏的场景和地点无非就是程序化生成亦或是手工打造,而CIG的程序化生成行星技术是利用程序化生成结合手工打造所建立的工具,它的优势在于大规模游戏区域的生成和手工构建雕琢互相衬托。在使用这个工具时,CIG的美术艺术家可以设计星球每个生物群落的风格氛围,颜色,地形,植物动物等,以及这些群落所在星球上的位置,而程序化的工作则是细分物体位置比如每棵树每座山的详细坐标并且进行大规模生成。星球建立后CIG还可以手动修改和调整程序化生成的所有区域进行加工和打磨,例如设计任务区域。在一些重要的区域比如城市,空间站,任务点,兴趣点让艺术家来操刀,至于其他空旷大部分星球面积则交给程序化。
    程序化生成行星技术所包含的子技术:程序化生成城市技术,程序化生成空间站技术,程序化生成小行星落技术,程序化生成动态天气技术,径向物理网格技术(重力),生态系统和生物群落分布技术,大气物理技术


    2楼2020-11-29 15:38
    回复
      64位高精度地图/引擎
      64位高精度地图/引擎技术运行玩家在一个星系大小的地图下以第一人称游玩也能保证其高保真度,玩家所处的每一个位置都有其独立的x,y,z坐标和x,y网格编号,为了让玩家以第一人称在太阳系大小的地图下进行游戏,位置网格与网格之间的距离为1毫米,而大多数游戏都是以32位变量来储存坐标位置,可以使20公里x20公里x20公里的任一位置都有独立的坐标,而CIG开发的64位高精度地图/引擎则可以达到32位的232倍,使玩家在星系大小的地图里的任一位置都有唯一坐标,并且将网格精度保持为1毫米。


      3楼2020-11-29 15:38
      回复
        巨型地图预加载技术
        整个基于64位精度的巨型地图会通过预加载完成,所以在进入游戏可以实现真实无缝
        物理昼夜循环技术(非天空盒)
        物理昼夜循环技术是StarEngine里的Sol-Ed(太阳能系统编辑器)和行星技术结果产物之一,该技术运行物理化的球体(比如行星和卫星)进行适当地旋转,并且通过其本地的光源实现昼夜效果


        4楼2020-11-29 15:39
        回复
          客户端对象容器流式运输(OCS)
          对象容器流式运输是使星际公民能够创建一个宇宙的关键,它可以不受限于玩家PC的物理内存上限,在玩家游玩的过程中访问新环境时对所在位置和物体进行流式运输,并且整个过程是无缝的,因此OCS对性能提升有了极大的帮助,因为它不会让你的显存因为内容太庞大而过载。OCS不会让玩家在登录时就加载所有的内容,而是根据玩家访问的地址进行所需资产的加载,同样在玩家离开后能对其进行卸载。同时OCS也可以作用于NPC身上,玩家离开区域后,NPC也会被OCS给卸载,但是这不代表这些NPC就消失了,而是玩家不需要看到它们的时候这些资产(包括NPC)不会加载到玩家的客户端中,而它们则会作为数据保留在“宇宙”当中,直到玩家再次访问和重新加载。如果NPC的行为在玩家没有加载的情况下导致环境有所改变(比如NPC破坏了某个物体),玩家在重新加载场景的时候也能看到NPC行为所造成的变化,对象容器流式运输的对象也是多层次的,可以实现“套娃”,所以客户端加载卸载并不完全是基于距离,而是根据实际需要,只要这个“容器”内的对象没有限制,同时也由客户端根据实际情况选择加载“小容器”或是“大容器”的内容,举个栗子,你可以看到一艘大型资本级舰船比如伊德里斯标枪海妖孟加拉的外形,但这不意味着你要去加载其内部,你可以在赫斯顿的酒吧却不需要加载就在旁边的医院,甚至你在任何一个地方的门外,你不需要加载房间内的对象,就是这个道理。


          5楼2020-11-29 15:39
          回复
            服务器对象容器流式运输(SOCS)【当年国内外都吹成神的技术,事实证明没有god-tech】
            和OCS差不多的原理只不过是用作于服务器端,目的是为了减少服务器的内存和CPU压力从而能给游戏添加更多的内容,实现SOCS的方法是把动态地把对象容器中的实体进行序列化,然后将实体的数据传输/保存/加载到服务器的数据库(目前的pcache之后是icache)来释放服务器内存。在这种情况下,根据需要去加载整个数据库中只需要用到的一部分而不是加载整个数据库(玩家访问的地区附近的一部分)来减少内存,并且能够减少CPU的运算,使服务器性能不会再因为CPU或者内存的压力而降低。由于其可以选择性地访问数据库中仅需要的部分,CIG可以给数据库中添加更多的内容而按需让服务器加载。
            SOCS所包含的子技术:物体实体传输管理,无限状态和位置ID记录


            6楼2020-11-29 15:39
            回复
              物理储存系统
              物理储存系统是一个依赖全局持续性的系统,而全局持续性又是一个依赖icache的系统,随着icache和全局持续性的开发虽然这个技术目前还没有达到release的阶段但是玩家已经可以逐步感受到它在游戏中的作用,比如个人库存。物理储存系统的另外一个很重要的前提就是所有的物品都要物理化,这样物品才能进行储存,武器、盔甲、设备、飞船组件、矿物、货物、用品等等,玩家目前可以通过Mobiglas进行物品来查看而物理储存系统才是让玩家能够真正访问和使用物品的重要技术。之所以说物理储存系统需要全局持续性加持是因为所有的物体状态都需要“全局持续”存在。这个系统也是著名说**拉克,咖啡杯,森林的来源,而我这么解释你可能更加清楚它的作用:你可以买一杯咖啡,把咖啡放进背包里,把背包放进克拉克里,克拉克开到森林里不管是咖啡,背包,还是克拉克,都是作为物理实体以一个“全局持续”的状态储存进了icache里。基于此也会延伸开发类似“清道夫”作用的机制,基于访问热点和储存对象大小来进行清理,这种清理可以是基于时间或者基于状态,避免发生森林里有一万个玩家扔下的咖啡杯或者在18区停满了克拉克。


              7楼2020-11-29 15:40
              回复


                8楼2020-11-29 15:43
                回复


                  9楼2020-11-29 15:44
                  回复
                    物理容器项目接口2.0(物理化飞船组件系统)
                    物理容器项目接口2.0就是创造一个内部的物理网格,比如玩家在开船的时候,玩家跟着船动,而船跟着世界在动,都是独立的物理运算,在这种情况下也能实现第一人称和第三人称的动画同步,使玩家不管是第一人称视角/第三人称视角或者其他玩家以第一人称视角或者第三人称视角看你的行为动作都能是一致的。而这个物理网格里的项目可以作为接口连接到另一个网格内的项目从而达成一些非常逼真和有意义的效果,例如飞船组件物理状态对飞船的影响,电力系统,火势的蔓延,以及重力和受力的影响,所有的在这个“容器”内物理网格下的项目都是单独存在而又互相可以对接的,从而实现许多功能。
                    物理容器项目接口2.0的子技术:房间系统,火势系统,飞船内受力系统,房间内重力系统,飞船或者房间内电力系统


                    10楼2020-11-29 15:45
                    回复
                      服务器网格化技术(Server Meshing)1/2 静态服务器网格化
                      有了前面OCS和SOCS两项技术的加持,CIG可以着手于服务器网格化,而服务器网格化则分为静态和动态,这里先说静态。静态服务器网格化其实就是将游戏中的位置比如行星或者卫星,城市或者空间站,更准确地说是每个对象容器给拆分,被拆分出来的每一个区域都由单独的服务器进行加载运算,比如“赫斯顿服务器”,“弧光星服务器”等,每一个被拆分的区域服务器被称为分片(shard),通过SOCS的加载卸载能力当玩家作为一个实体从一个地区转移到另一个地区时实际上是将实体及其状态从一个服务器传输到另一个服务器。在传输的过程中在玩家的客户端要做到无缝切换服务器连接并且保证服务器之间数据传输正常畅通无误,在后台全局数据库服务器中能够计算哪些分片需要加载或卸载。在这种情况下单个服务器压力会随着玩家和实体的转移而减少压力,同时能实现所谓的“全球同服”。值得一提的是服务器网格化技术也是支持物品物理化和物品储存实现的重要基石,全局持续性和icache也离不开静态服务器网格化。
                      静态服务器网格化子技术:物品实体物理化和物品储存系统,icache,全局持续性。


                      11楼2020-11-29 15:46
                      回复
                        服务器网格化技术(Server Meshing)2/2 动态服务器网格化
                        静态服务器网格化实现后服务器的压力会小很多,但依然不能保证拆分后的服务器能承受住来自玩家的压力,比如大型舰队活动舰队战等,动态服务器网格化顾名思义就是把服务器动态地拆分而非静态那样按区域拆分,动态是按需求。根据一个分片中的实体数量(最直接的就是玩家和玩家船的数量)来进行拆分,一个服务器如果接近爆满就会被动态服务器网格化拆分成两个分片到两个新的服务器进行运算,而这两个分片之间的数据是互相连接的,而这个转移过程就通过SOCS的加载和卸载功能来完成。技术的重点在于服务器拆分为分片A和分片B后,分片A的玩家需要能看到分片B中的状态,反之亦然,从而使玩家感受上还是处于“一个世界”。举个栗子,未来打一场舰队战,双方各派出250人一共500人参战,抵达战场后,动态服务器网格化技术将会把这500个人给根据拆分成50个分片,每一个分片中都是5个玩家VS5个玩家,而分片中的这10个玩家是可以穿梭到另外的分片去的,同样通过服务器网格化技术再进行合理的拆分以及SOCS进行加载与卸载来达到战场的规模还是500人的规模但实际的服务器运算是50个服务器运算50个分片中的5V5。根据实际情况,动态决定每个区域的大小,也许能小到几公里内,一艘船内,一个房间内,都能够按需被拆分成单独的分片。有了动态服务器网格才能提升服务器的人数上限和实现所谓的“万人同服”。其他游戏也有了类似的服务器网格化技术,比如方舟、阿特拉斯的服务器传送和大地图,一些网游的“切换线路”等等,但是动态服务器网格化的跟它们区别在于自行切分,同时做到状态互通,这样在玩家感受上并不会感到自己被换了服务器而是在切片A能看到切片BCDEFG里的所有状态,以及自己做的动作行为比如射击开火投掷等数据也能被实时传输到其他切片中进行运算和造成影响。
                        这项技术目前还处于理论和基础架构建设状态


                        12楼2020-11-29 15:46
                        回复
                          吹牛洗脑技术领先10年


                          IP属地:四川来自Android客户端16楼2020-12-01 14:27
                          回复