3D 游戏的万人同屏技术详解(2)

2020-08-23 10:22:42 +08:00
 gantleman
全文地址
https://zhuanlan.zhihu.com/p/195059458

在<使用 redis 实现 5 万人同服的'相位技术'>中我介绍了基于九宫格和相位技术的空间管理技术。这里我们也要借鉴游戏服务器中“服务”的概念。可能有些同学没有接触过游戏服务器,对服务的概念不是很熟悉。服务可以看做是一个独立的线程环境。这个线程监听着一个消息队列。其它的服务可以发送消息给他。这种方式在服务器开发中的 go 语言,erlang 语言,skynet 框架中被广泛应用。消息队列保证了服务所创建的数据是私有并且多线程安全的,只能通过消息通讯的方式进行修改。服务的概念为多线程下使用数据的安全问题提供了保护。通过消息通讯建立了在多线程下的秩序。但这种方式在客户端使用的并不多。各种服务的框架也都是在服务器端使用的多。

客户端使用多线程开发管理 1 万多个线程将会是一场噩梦。而管理 1 万多个服务对技术水平要求也还是比较高的。针对客户端没有多线程的服务框架问题,我开发了 pelagia 框架。借用“服务”的概念来管理客户端多线程。通过内嵌 kv 数据库和预判以及服务私有数据的概念彻底消灭多线程死锁和依赖的问题。因为只有解决多线程的安全问题。才能进一步思考如何优化通信和计算以及存储的平衡问题。安全问题不解决所有的优化问题就会是空中楼阁。

全文地址
https://zhuanlan.zhihu.com/p/195059458
23832 次点击
所在节点    推广
129 条回复
Mac
2020-08-25 01:16:35 +08:00
百人同屏就能卡成 PPT
sola97
2020-08-25 02:47:06 +08:00
我玩的 VR 社交游戏,头显单眼 1660x1440,玩家每人平均 3 万面,30 人同屏就掉到十几帧了,啥时候能做到刀剑神域那样?
sola97
2020-08-25 02:55:12 +08:00
@sola97 分辨率 1600x1440
weizhen199
2020-08-25 08:50:13 +08:00
只渲染血条都能卡死.jpg
gantleman
2020-08-25 10:24:04 +08:00
@weizhen199
@sola97
@993651481
@Mac

有次听制作人说他调研玩家,对 5 千人以上的团战非常感兴趣。我还不太相信,万人同屏的概念都出来这么久了,大家对这个热情还这么高。
undef404
2020-08-25 13:17:08 +08:00
不懂就问, 万人同屏感觉主要压力在客户端这边. 服务器这边万人在线和万人同屏有啥区别么?
yangbonis
2020-08-25 14:11:17 +08:00
站在一万人的广场上也不会每一个人的动作都在意啊
gantleman
2020-08-25 15:01:25 +08:00
@yangbonis 你这个问题非常好啊。站在 1 万人的广场上有两个含义,你可以和其他 1 万人做交互,你也可以选择不和其他人做交互。你有选择互动的权利。在屏幕上画 1 万个假人,这些不能互动的假人,你就没有权利去交互了。对于游戏策划的意义就更多了,没有交互的权利那么这个假人就是个贴图,对策划来说意义非常有限。可以交互,可以选择性的交互,这样的互动就可以设计出无穷的玩法。
gantleman
2020-08-25 15:05:22 +08:00
@undef404 就网络游戏来说,万人同屏的压力从客户端渲染开始,网络,服务器硬件,集群硬件,ai 软件。这整个链条任何一点出现瓶颈,最终反映到玩家面前的都是客户端卡顿。所以我们会有错觉万人同屏都是客户端的锅。这个锅又黑又大,都丢给客户端哪真是太委屈了。
danc
2020-08-27 10:18:04 +08:00
那么问题来了,大佬最多做到多少人同屏
chengz
2020-08-27 10:30:35 +08:00
对于 MMO 来说,万人同屏其实是一个伪概念。
真·万人同屏(玩家视野上限一万人,客户端实时刷新视野)---- 无法实现
万人同服(玩家视野上限 200-400 人,同地图内玩家可以强交互,多个场景负载,相同场景可平行扩展
万人同地图(玩家视野上限 200-400 人,单场景最高一万人,同场景玩家强交互)
@gantleman 题主说的是哪一种?
gantleman
2020-08-27 10:38:50 +08:00
@danc 当然是韩信点兵多多宜善,理论上同屏人数没有上限。我还不是大佬,推广新的并行计算工程学方法也刚刚开始。过去 70 年里硬件都是以 cpu 主频率为主导。真正并行计算的硬件爆发增长也只是最近几年的事情。amd 把牙膏厂 1 万多的硬件硬拉到了 5 千多。才让 8 核心的 cpu 普及开来。软件也经历的从汇编语言的扣性能,到 java 部分性能自由开始注重快速开发稳定运行。以后也肯定能做到并行计算的自由。现在硬件的极限是 128 。我预测未来 10 年会有 500 核到 cpu 普及。那时候才是并行计算真正的爆发期。
gantleman
2020-08-27 10:48:47 +08:00
@chengz 你说的的问题是目前的业界使用的技术上限太低的问题。先不要急着下结论说这是伪概念,无法实现的等等。讨论上限的问题就是讨论如何突破上限的问题。既然都是做技术的,那么就要用技术语言来说明问题。你既然认为万人同屏有问题。那么在客户端到服务器这长长的链条中是哪个技术环境限制了玩家视野的上限?
chengz
2020-08-27 11:37:02 +08:00
@gantleman 大佬,我只是个小产品,你给我一万个人,我也没法把他们同时塞进一个屏幕内。不讨论拉
charten
2020-08-27 11:40:46 +08:00
@sola97 我觉得是 cpu 吃不消,因为通过可视区或者九宫格技术裁剪掉“看不到”的场景,减少绘制面数。而 cpu 的化,如果不是追求实时,其实可视区外的对象可以降频计算,不过无论如何,gpu 可以少算,cpu 不行...
takemeaway
2020-08-27 15:15:41 +08:00
@chengz 他说的万人同屏实际上是万人聊天室,玩家交互很少,只不过是同服务器交互。
怎么可能一个屏幕装一万人
chengz
2020-08-27 15:50:08 +08:00
@takemeaway 仔细看看题主的历史发言,这个问题已经不重要拉。
lichdkimba
2020-08-27 19:34:34 +08:00
https://store.steampowered.com/stats/?l=tchinese

根据 Steam 的数据,达成万人同时游玩这一条件即可成为 Steam 上大概排名前 70 的游戏
gantleman
2020-08-27 22:49:59 +08:00
@lichdkimba 祝愿中国的游戏资本和策划人早日作出世界水平的 3A 大做。
xuanbg
2020-08-28 10:01:08 +08:00
万人同屏,肯定要在渲染上面偷梁换柱。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/700635

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX