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
23773 次点击
所在节点    推广
129 条回复
clf
2020-08-23 10:24:52 +08:00
但万人同屏的难点难道不是在人物 /角色模型高速&高质量渲染上么……
gantleman
2020-08-23 10:29:11 +08:00
@lychs1998 我在详解(1)做了解释 https://zhuanlan.zhihu.com/p/195065464
就像通关一样,渲染只是瓶颈的第一关,并且大多数公司在第一关就挂了。
across
2020-08-23 10:34:14 +08:00
@lychs1998
我自己没做过。但是记得超大数量的,都是同类型的重复渲染,unity 以前也出过类似教程,比如 GPUInstance 相关的:
https://blog.csdn.net/leonwei/article/details/73274808
murmur
2020-08-23 10:39:59 +08:00
我也不知道万人同屏的场景是啥,现在 mmorpg 一般一个服务器跑到死也才八千一万人,玩的时候同屏 200 人以上优化差一点的游戏就 gg 了,当年魔兽世界冬拥湖都没扛住渲染压力
pabupa
2020-08-23 11:20:19 +08:00
Earth online?
learningman
2020-08-23 13:11:32 +08:00
@pabupa Earth Online 万人同屏也不多见。。。
dogfeet
2020-08-23 13:41:24 +08:00
游戏中的这种场景,一般都是不用 redis 的。如果考虑支持在线数高,还是偏向于数据直接放在场景服务的内存中。
gantleman
2020-08-23 15:12:31 +08:00
@dogfeet 现在用 redis 很多了,毕竟谁也不敢说自己写的缓存服务器比 redis 强。场景服务器是第二代服务器的概念,魔兽十年前就已经是相位技术的第三代了。
chihiro2014
2020-08-23 20:57:45 +08:00
@lychs1998 渲染这种其实放本地,倒也不算啥。难点其实在于其他人的实时状态和网络带宽利用上面
murmur
2020-08-23 23:23:50 +08:00
@gantleman 恰恰相反,魔兽是通过相位技术打散玩家,减少负载的,以前练级就测试过,同一个服务器,同一个工会的人,在一个图升级,一些人是看不到另一些人的,都被送到其他位面了
sola97
2020-08-23 23:35:07 +08:00
GPU 吃不消
gantleman
2020-08-24 00:35:33 +08:00
@murmur 我在另一篇文章介绍了服务器如何使用 redis 实现位面技术。https://zhuanlan.zhihu.com/p/166347236 。这里介绍的是并行技术如何应用到客户端实现万人同屏。例如使用万人同屏实现单机游戏如骑马砍杀或刺客信条。
gantleman
2020-08-24 00:38:06 +08:00
@sola97 万人同屏由 3 个问题组成,我在详解(1)做了解释 https://zhuanlan.zhihu.com/p/195065464 。渲染能力是这 3 个方面限制的一种。网络游戏的服务器和单机游戏的 AI 处理也都限制了万人同屏技术。
onionKnight888
2020-08-24 08:50:13 +08:00
@murmur 大灾变之后吧
oneoy
2020-08-24 09:00:20 +08:00
单机 5w 人? 我写的后端目前单机 8k 人在线没问题 服务器配置 4h8g
gantleman
2020-08-24 10:53:28 +08:00
@oneoy mmorpg 能做到 8k 人已经棒棒的了。魔兽没使用相位技术前只能做到 2 千到 3 千人。国内普通水平在 5 百到 1 千人。
luckyrayyy
2020-08-24 23:02:18 +08:00
永恒之塔有 4 ~ 6k 人同地图军团战的场景,但是也不会出现在一个屏幕吧……而且客户端早就爆了,把所有人的模型给去掉,施法特效去掉才勉强能玩。
yanguangs
2020-08-24 23:05:34 +08:00
@onionKnight888 WLK 引入的,联机的时候就能很明显的看出来,做完主线的人跟没做完的人相互看不到.
gantleman
2020-08-24 23:24:49 +08:00
@luckyrayyy 同步一万个玩家的数据需要多方面的硬件支撑,目前百兆光纤的速度是 10M 每秒。10M 除以 1 万就是 10 来个字节了。同步一万个玩家的数据对带宽,显卡,服务器都是挑战。
993651481
2020-08-25 00:19:34 +08:00
万人同屏 = 暂时办不到

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

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

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

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

© 2021 V2EX