云游戏的架构设计和技术实现 云游戏技术难题

云游戏的架构设计和技术实现 云游戏技术难题,第1张

游戏这个概念非常简单,就是我把游戏放到服务器上去运行,把游戏渲染出来的的音视频画面,通过流的形式传送到终端,终端上不再需要安装游戏,各种终端比如说电视、手机、PC、平板都可以运行。这样我们就不需要关心游戏怎么去适配不同的软硬件平台、终端性能够不够等等这些问题。

什么是云游戏

云游戏这个概念非常简单,就是我把游戏放到服务器上去运行,把游戏渲染出来的的音视频画面,通过流的形式传送到终端,终端上不再需要安装游戏,各种终端比如说电视、手机、PC、平板都可以运行。这样我们就不需要关心游戏怎么去适配不同的软硬件平台、终端性能够不够等等这些问题。这个概念本身是非常好的,在2009年的时候,这个技术就已经出现了,美国有家叫Onlive 的公司第一个推出云游戏服务,但是他最终在商业上还是失败了,技术最后被索尼公司收购,并运用在PS Now上。云游戏的概念虽然非常好,但里面技术挑战性非常高,有非常多的技术问题需要解决,那个时代可能还比较早,软硬件都还不太成熟,所以最后没有能够成功的商业化。到了现在这个时间点上,云游戏技术开始慢慢成熟起来,已经具备了商业化的基础。

下面是对我们产品的介绍。对云游戏来说,用户主要会关心延迟问题,玩一个对抗性很强的游戏,如果中间卡个几百毫秒那肯定受不了,游戏体验就会非常差。所以我们最核心的关注点就是要把延迟降低到最小、并且把画质保持在一个相对可以接受的程度。目前我们产品的整体延迟(从用户按下操作按钮到看到画面变化)可以控制到50毫秒以下,在这样的延迟水平下玩格斗游戏赛车游戏感觉都是非常流畅的,画面可以支持到720P/1080P,网络带宽只要4兆以上就可以了。我们单台服务器可以支持 20-50 路的并发游戏数量,也就是单台服务器可以同时为 50 个玩家提供服务,单个并发用户的整体服务器硬件成本在500元左右,可以说是一个非常有竞争力的成本。当年 OnLive 失败的主要原因是因为他的硬件成本非常高,他的一台服务器仅能服务一个用户,单个并发用户的成本可能就要上万,在这样的成本水平上要实现商业上的成功是非常困难的。目前这个项目已经在小范围的内测,他们主要是 toB 的业务,为宽带运营商提供增值游戏服务。

云游戏的技术挑战

第一个是实时性

游戏的整体延迟包括了游戏逻辑运算时间、音画渲染的时间,加上编码的延时、网路传输的延时、客户端解码的延时、客户端向服务端发送控制信息的延时,云游戏的实时性要达到一个可令玩家接受的程度,这个技术挑战是非常高的,当然也要依靠硬件和网络本身的性能,如果没有足够的带宽也不可能做到。

第二是虚拟化技术

虚拟化在服务端已经非常成熟,我们有虚拟机技术以及各种容器技术,但是在桌面上就不是那么成熟,普通的虚拟桌面不支持 GPU 的虚拟化,而游戏非常依赖 GPU 渲染,若没有 GPU 的虚拟化就没办法实现云游戏了,所以虚拟化是一个很大的技术瓶颈。

第三是经济性

每个并发用户的服务器硬件成本关系到这个模式能否成功商业化,如果成本超出了用户可接受的范围,那就没有办法实现盈利。

最后是运维管理

云游戏的运维管理跟传统的服务器运维管理不一样,因为用到的服务器硬件不一样,同时硬件负载又很高,这对运维管理提出了新的挑战,所以在技术上就要解决这些问题。

平台选择

游戏的运行平台非常多,各种各样,但是比较适合的只有windows平台。Linux 平台虽然开放,但是它没有什么游戏支持,其他的主机游戏平台基本都属于封闭技术,微软和索尼自己都在研发主机上的云游戏,那我们是没有办法去做的。

android平台也是非常适合做云游戏。服务器跑个android游戏再传到android设备上这个概念看上去比较怪异,但实际上IPTV运营商非常喜欢这个概念,因为机顶盒不允许安装第三方的应用,监控比较严,那我们通过云端化来绕过这种限制,这对机顶盒这种产品非常有帮助,所以android平台也是我们要考虑的。但今天主要是介绍 windows 平台游戏的虚拟化,android上是用硬件方案跑的,所以就不介绍了。

windows游戏的虚拟化技术主要是两条路线。一个是虚拟机方案,但主要问题是 GPU 虚拟化技术不成熟,可能需要一些专业级的显卡支持,成本非常高、性能损耗非常大,每一个游戏都跑一个 Guest OS 非常浪费内存,所以这条方案就被我们否掉了。同时windows 上也缺少可用的容器级技术,我们只能采取 API Hook 方式手工实现虚拟化,我们称之为 Sandbox 方案。

Sandbox方案就是把游戏所用到的系统 API 全部hook接管,让游戏认为自己运行在一个正常的 OS 上面,但实际上是我们接管的一个 OS。这样做的好处是性能损耗很小,基本上没有额外的损耗,但是比较痛苦的要针对每个 API 做适配,需要对每个游戏进行适配,而且游戏通常不开源,游戏开发商通常也不会配合你去修改代码,需要一些 hack 技术来针对每个游戏做适配。

技术实现细节

图像和声音的采集

图形API有 DirectX 9,10,11,12还有OpenGL,接管这些API后我们就可以把画面重定向到视频编码器,不不在屏幕上输出了。音频比较简单,只要接管Windows Audio Session API就可以了。

输入操作的虚拟化

手柄比较麻烦,因为手柄支持的API接口比较多样化,比如 DirectInput, XInput, RawInput,还有些游戏直接读 USB 设备,实现这些API的接管工作是比较琐碎的。

存储的虚拟化分

一是游戏的资源部分,比如执行程序、、声音等等。这些资源文件都是只读的,需要一个共享存储来放这些文件,因为这些文件体积比较大,通常一个游戏需要几十个G的容量,如果全部都放在本地节点上的话,对节点的存储容量要求很大,而且以后更新维护起来也比较困难。所以我们用 NAS 来共享这些文件,这么做的网络 I/O 开销会非常大,后面我会介绍如何来优化这一块。第二是用户配置和存档数据等等可变数据,这些数据需要集中化存储,同时可能存在跨机房的访问需求。用户离机房越近延迟越小,所以需要多地、异地部署服务器,让玩家在全球漫游访问你的服务,这需要有跨机房文件共享的能力。

其他需要适配的内容

比如游戏一般都是单实例,我们需要绕过游戏的防多启动机制。还有些游戏无法后台窗口运行,我们需要通过 API Hook 的方式,让游戏认为它处于一个正常的状态。最理想的适配方式是通过 SDK,让 CP 来适配你的云游戏平台,但目前来说还不实际,因为云游戏的商业化还没有完全的落地,需要技术去慢慢的推进。

音视频编码技术

视频流采用的是 H264 编码,主要是 720P/1080P@30fps,1080P@60fps 对网络和硬件的要求过高,暂时还做不到。音频编码使用AAC。因为标准的封装格式不含控制流,不能传输用户的操作数据,所以我们自己定义了一种封装格式,简单的把 H264 和 AAC 的裸流封装起来传送给客户端。

目前用软件编码器基本不可行,一路视频编码就要消耗掉一个CPU核的资源,跑个三四路就把 CPU 资源吃光了,游戏就没办法运行了。幸运的是三大硬件厂商 Intel、AMD 和 NVIDIA 都推出了自己的硬件编码器,Intel的CPU自带硬件编码器,支持20+路的720P实时编码没有问题。NVIDIA 的硬件编码性能更高,可以直接对GPU的 FrameBuffer 做编码并传到 CPU 上,节省了很多内存的拷贝,性能是最好的。

视频编码的参数调优

首先避免使用 B 帧以减小延迟;较大的 GOP 设置来减少 I 帧的比例,保证每一帧消耗的码率都在一个最大可控的范围内;0 延迟设置,保证每输入一帧数据编码器都立刻输出这帧的编码数据,避免编码器缓冲帧数据;bitrate控制,使用固定比特率的算法是不适合的,因为游戏中经常会存在一段时间的静止画面,此时比特率很低,对接下来的变化帧编码器就会分配大量的比特来编码,这就会造成这一帧数据特别巨大,从而带来了额外的网络数据传输延迟。所以我们采用了自适应算法,在保证比特率总体在最大范围内的同时,保证每一帧消耗的码率都在一个最大可控的范围内,确保每帧的数据传输延迟可控。

终端的视频解码优化

H264 的解码是比较头疼的,因为android平台适配起来比较痛苦,尤其是它的硬件解码坑非常多。如果直接使用mediacodec封装的硬件解码器,那个延迟非常高,基本没有办法用。有一些芯片厂商会提供一个后门,让你把缓冲关掉直接输出画面,但是这需要对接具体的芯片厂商,无法做到通用,只适合一些机顶盒类的产品。所以还是需要用软件解码的方式来支持 0 延迟的输出。android设备的性能参差不齐,早期的低端芯片性能不满足实时解码 ,需要利用 GPU 做一些加速。

网络传输的优化

用UDP传输的话,因为H264 本身不支持容错,一旦丢包就会出现花屏,在下一个I帧到来前都无法恢复,通常要持续好几秒,严重影响用户体验,无法接受;而TCP 丢包的话只是出现几百毫秒的卡顿,实测还是可以接受的,所以我们放弃了 UDP 协议传输,利用TCP在网络层做一些调优使延迟降低。实测下来,现在的宽带网络延迟基本没有问题,主要问题反而是在用户侧的 WiFi 上,一旦出现无线信号干扰,网络抖动会比较厉害。

服务器和客户端的同步算法

我们的云游戏把所有环节的缓冲都关掉了,全部是零延迟自出,原来缓冲设计的目的就是为了抵抗颠簸,比如网络的颠簸、或某一个编解码环节出现了抖动,通过缓冲把这个抖动抹平,现在把缓冲都关掉后对同步会造成很大的影响。有很多因素会造成颠簸,比如服务器发送数据过快,客户端来不及消费,造成的结果就是延迟非常大。所以我们自己设计了一套算法来解决这个同步的问题。具体的做法就是让客户端在完成一帧画面的显示后向服务器反馈一个消息,服务端根据客户端反馈的消息就知道客户端消费到了第几帧,跟服务器现在编码的帧数做比较,在一定的阈值内就继续传输下一帧,否则等待客户端的确认消息,直到客户端赶上来。这样做的结果就是当颠簸发生时服务器能及时感知并停止发送数据,等颠簸消除后再继续发送最新的游戏画面,实测下来获得了比较理想的同步效果。

存储的优化。只读资源数据是放在 NAS 上的,几百个游戏共享一个 NAS,加载游戏时的网络 I/O 开销非常大,所以我们做了一个优化来本地缓存这些共享文件,利用dokan实现了一个虚拟磁盘来访问资源文件,再把虚拟磁盘重定向到NAS上,同时利用节点的本地 SSD 硬盘来缓存热点文件,从而降低了网络 I/O 的开销。

更多的云游戏玩法

旁观模式,一个玩家玩的时候其他玩家可以接入这个视频流,看他怎么玩;对战模式,其他玩家可以切到这个游戏流里面两个人在一起对战;还有直播模式,把视频流封装为 HLS,推送到 CDN 上进行直播,这是非常流行的主播模式,云游戏都可以支持。

云游戏运维方面的挑战

云游戏需要维护大量的服务器节点,而且跟普通的服务器管理不一样,需要自己造一些轮子。由于所有的硬件资源都是高负荷运行,我们要最大化的增加硬件利用率,一般的服务器 CPU 占 10% 就很不错了,而云游戏的 CPU 都是在接近 100% 的情况下运行,另外还需要GPU的参与,这导致了硬件的可靠性相对比较低。

软件因为没有隔离性,可靠性也会降低,一旦出现问题怎么维护、怎么恢复,成了比较麻烦的问题,因为没有现成的方案,就我们需要自己设计服务器集群来解决这些问题。另外还有跨机房部署的问题。

硬件方案的选型,我们主要有三套方案,一套是 GRID 显卡方案,这是 NVIDIA 为云游戏专门设计的专业显卡,上面带有编码器可以将游戏画面直接编码输出,但它的缺点是价格比较昂贵,一台服务器的硬件成本大约在 5 万元左右。

还有就是消费级独显方案,去掉了昂贵的专业显卡的同时还能获得更好的GPU性能,所以这套方案的性价比要高很多,每路并发的硬件成本可以降低到 500 元以下。

最后一个方案是 Intel 核显方案。完全不需要用独立显卡,但 Intel 核心显卡的性能偏弱,运行大型的 3D 游戏会比较吃力,运行一些休闲游戏没有问题。这个方案的优点是不需要显卡,1U 的尺寸下可以装入多个节点,集成度提高,而且易于维护,也是一个值得考虑的方案。

下面来解释一下云游戏一下集群的概念。Node(节点)对应一台物理计算机,一个节点可以同时运行多个游戏实例为用户提供服务。多个节点组成一个 Group(节点组),一个Group内包含了若干节点和NAS,对应于一个机柜, 多个机柜用万兆交换机串连起来,部署在一个机房,称之为 Cluster(集群),再上面一层是云游戏平台,包括用户的入口管理、登录计费等,可以跨越多个机房。

下图是系统架构图:

User Profile Storage 用来存放用户的存档数据,Log Storage 用来存储日志数据,还有数库等等。

Group 内的各 Node 组成对等网络,可以任意添加或者删除 Node,各个 Node 通过竞争算法选举出来一个 Master,由 Master 与 Manager 建立连接,对整个 Group 进行管理,如果Master出现故障则由剩余的节点重新选举出一个新的Master进行接管,从而保证了任何节点的故障不会影响到其他节点的正常服务。在Node 上仅需要安装好操作系统和 Daemon 服务,无须配置,即插即用。Node daemon对服务器进行管理和监控;游戏文件存放于 NAS 上,由各 Node 共享;内网/外网流量隔离,防止互相影响。

Manager 用于对集群内的所有 Node 进行管理, 配置/更新/上线/负载均衡/监控,游戏数据管理更新,用户数据管理等等。提供 web 后台给运维操作,实现运维的自动化和可视化操作。Manager使用双机热备模式实现高可用,避免单点故障造成整体系统瘫痪。

日志和监控。我们需要有完整的日志来记录和追踪系统行为,保障整个系统的可维护性。同时系统会实时监控每个游戏实例以及 Node 的状态,包括 cpu、gpu、网络io 的使用率,游戏帧率、延迟等等数据,所有数据保存下来,后面可以通过一些数据分析的手段来找到性能的瓶颈,然后再针对性的进行优化,进一步优化我们的系统。

提问:对家用的wifi做一些支持,能详细说说吗

乔捷:首先,要提示用户wifi信号不好会造成延迟,终端检测到网络信号不好时及时的提示用户。其次,对于网络延迟的抖动,我们的同步控制算法能够补偿一部分抖动。最后,可以在服务器上调优一下TCP参数,比如说减小数据重传的超时时间,加快数据包的重传,可以有效缓解抖动。

提问:对用户体验有影响吗

乔捷:目前肯定有,我们是标清的 720P 的画面质量,因为要考虑硬件成本和网络传输成本。但随着成本的逐步降低,未来要支持1080P甚至4K画质也是没有问题的。

提问:对于 CP 的开发模式有哪些影响

乔捷:目前没有影响,我们只是买一个授权,然后由我们进行对接,不需要CP方去改动代码。当然如果 CP 方愿意来对接我们的SDK话那是最好的,可以加入对战、排名、内购等各种功能,利用云游戏的特点为游戏增加更多的玩法。

提问:我们这么多年下来的计算,最早开始所有的计算都是在中心,随着终端计算能力的增强,计算很多功能都到终端上面去,现在你的方案是把所有的终端都放在中心,这对服务器成本要求很高如果能够容纳一些用户同时运行大型游戏,服务器成本是否会非常高

乔捷:对。为什么我们要中心化因为终端的种类太多了,手机、平板、电视、PC,这么多平台,你一个游戏要去移植这么多平台,本身的工作量就非常大,而且用户要去下载安装,推广的成本非常高,网络游戏单个用户的获客成本已经到了几十到上百块钱。所以,服务器成本表面上看是有点高,但是算上开发成本分发成本推广成本,这点服务器成本已经完全可以接受。

这就和视频一样,最早我们看视频是买光盘的,后来有了网络以后是从网络上下载,而现在宽带普及了之后已经没有人下载了,都是直接视频点播,因为它方便,门槛越低越容易被用户接受,现在还会有人买光盘吗基本上已经没有了吧。电视电脑都不是我们的工具了,大家现在用的比较多就是手机。计算资源越来越中心化集中,管理成本不断降低。现在买游戏机、ps3、ps4,每隔 5 年换一个游戏机,以后不需要游戏机更新换代了,更新换代对于厂商来说是一个比较痛苦的过程,有一个漫长的迁移过程。将来根本不用关心什么硬件,比如今年的“吃鸡”游戏非常流行,但是很多玩家的显卡性能不足,跑不起来。将来游戏都是放在服务器上跑,用户根本不用担心跑不跑得动,接上就可以玩。一旦这个服务模式成立,硬件厂商都会向这个方向投入资源,最早2011年的时候我们就预研过云游戏的技术,当时做了以后就放弃,后来看到这个机会以后推出来了grid显卡,一下子拉很高,看这一块商业模式什么时候落地,现在还是在探索的过程当中,将来是大趋势。

提问:除了服务上面成本,要求终端的网络非常好吗对解码要求高么

乔捷:对,因为网络非常普及的情况下,宽带已经无处不在了,所以这个问题基本已经被解决了。现在的主流中低端芯片可以实时软件解码720P的视频流。

提问:我知道游戏有很多种类,目前云游戏技术支持的范围怎么样云游戏的交互目前为止是否还很有限

乔捷:主要是主机游戏,用手柄玩的游戏。看类型,使用键盘鼠标的游戏比如FPS在电脑上比较好操作,在电视上就不太方便了,目前主要还是适配手柄操作的游戏。

平台与编程语言选择

首先,游戏开发的平台就有很多类型:

个人主机平台:Windows、Linux、MacOC;

移动平台:iOS、Android、WindowsPhone、BlackBerryOS、Symbian;

专业主机平台:Xbox、PlayStation、Will等。

如果你想从事移动平台的游戏开发,Android主流JAVA语言,iOS主流Object-C语言,那么你就要去学习这个平台主流的语言,而在个人主机上主流的游戏开发语言现在包括以后很长时间也还是C++。但是并不是所不同平台的游戏开发,就毫无共通之处,学了这个到了另一个平台就无用了。不是这样的,编程的世界里你走得越远你会发现很多东西的本质都是相似的,例如你如果扎实地理解了C++的基本语法(而不是死记硬背),日后再转Java语言也不是很难的事情,因为它们本质的面向对象特性还有各种编程语言特性都是相通的。

所以,如果你想走得远,在学习的时候不能简单流于表面,对于一样知识越深入到底层,你就越能看到其它知识与其的异曲同工之处,因此你将比别人更轻松。但是,当然一开始最好尽可能是贴合自己的专属领域和编程语言,这样能尽快地在这个领域持有一席之地。无论你选择哪个平台,游戏开发这个浩大的工程都离不开游戏引擎,所以这里都有二条路线让你选择:

只使用游戏引擎;

使用游戏引擎并深入学习游戏引擎原理。

游戏开发需要学什么?和软件开发一样,游戏开发也是需要从编程语言学起的。下面有怎样学习软件开发的方法。游戏开发比软件开发相对难一些,因为游戏开发需要我们熟悉各种游戏开发工具。来看看具体的内容吧!

阶段一:学习和计算机沟通的言语——C++语言或其他语言

编写程序就是和计算机进行沟通,而沟通很常用的途径就是语言,就像我们平时和别人沟通一样,只是现在你是和计算机进行沟通,其实你想想和计算机沟通比和别人沟通来得更容易。

计算机语言有很多中,如C/C++,Objc-C,Java,AS3,汇编语言,php,asp等,就像我们平时语言也有多种。当你掌握了这样的一种语言,那么你就能和计算机在不同的领域进行沟通。

而C++语言是目前来说较为强大的语言之一,而重要的是现在很多游戏的底层都是用C++语言写的。而同时你要熟悉一种编程开发工具,编程工具就是你向计算机沟通的一种工具,就像平时我们说话用的嘴巴,开发工具让我们和计算机的沟通更加方便。

阶段二:熟练掌握数据结构及各种常用的算法_灵活使用语言

单单会语言还不够的,就像我们平时你不是会说话就能和别人很好的沟通,你要懂得沟通的方式和技巧。数据就是计算机内存放记录的内容,你可以认为是我们平时说的词,数据结构就是数据与数据间的关系。

针对程序来说,你对数据理解,定义,操作熟悉,对算法多样,高效,那么程序就会简洁,运行效率高,这就是为什么要熟练掌握数据结构和常用算法的原因。其实算法就是解决问题的方法,解决一个问题,方法有很多,有些常用的方法是前人经验得来的,我们就要学习。

阶段三:找一个平台,发挥你的语言能力——Win,Android,IOS

目前程序应用的范围广,平台很多,就针对游戏程序目前常见的就有Win,Android,IOS等,平台就相当于语言使用的地域,你会普通话在中国很吃香,沟通无难题,但你去到美国,那就有难度了,就是你是普通话专家都郁闷。不同的平台对语言及程序架构的要求不一样,因此你要挑一个平台时更好的使用你的语言。

阶段四:开发游戏Dome_实践你的技术

如果你前三个阶段都过了剩下的就是开发游戏Dome,从游戏的logo开始,菜单,到场景,当主角,到NPC,到主角与NPC的交互,到主角与场景的交互等,一步一步写,在不断的开发中积累经验与程序框架。用得越多越熟练。

1、先学习C/C++

2、之后接触学习WINDOWSAPI和VC++

3、需要掌握一个3D游戏SDK:DirectxSDK,或者OPENGLSDK

4、美工和建模方面的知识适当了解围绕以上找相关资料或书,可能需要好几本。

首先非常感谢在这里能为你解答这个问题,让我带领你们一起走进这个问题,现在让我们一起探讨一下。

1要想成为一个游戏开发人员,就得先成为一个很好的程序开发人员。当你成为一个很好的程序开发人员时,就可以考虑学习游戏开发了。要想成为一个非常好的游戏开发人员,最重要的一点,就是需要对数学非常好。当然,这里指的数学好,不是指加减法好,或者心算好,而是指线性代数,几何和几何代数,物理方面的数学等等。如果你对于数学是毫无兴趣,或者索然无味的话,就要重新想想自己是否可以改变自己的理想了。如果你的数学不好,还想成为游戏中的人员,呵呵,有一个办法,就是成为游戏的测试人员,游戏的艺术人员,或者是游戏设计人员,或者游戏的管理人员。

上面知道数学是开发游戏的第一个基本条件了,但还是有很多其它知识需要学习的。下面就来详细说明一下:

2程序设计语言:在程序语言方面,不但要精通一两门语言,还需要了解其它的语言。一般开发游戏都是使用C++或者C,因此精通这门语言是必然的选择了。由于开发游戏需要不同的语言,比如脚本语言,这样就需要了解一下动态语言,比如Python等等。

3数据结构:不管计算机发展到什么程度,只要是编写程序,就少不了数据结构。目前,基本上都不再会有自己去创造“车轮”年代了,应去理解和使用STL,或者其它更好的数据结构库了。精通地使用STL,就基本上解决了数据结构的问题了。

浮点数:在开发游戏里,使用最多的数据类型是什么呢?显然就是浮点数。比如3D游戏里的点坐标,就是使用三个浮点数来表示的。浮点数的计算,往往就会有不精确的现像,比如判断一个数是否等于0,就不能想当然地认为是否等于0了。

4编程工具:编程工具,就像自己的柴刀,如果没有柴刀,就砍不到柴的。当然,磨刀不误砍柴功。因此,一定要对自己的编程工具非常熟悉,比如调试,工程配置,编辑,编译等等,还有经常出现的编译错误等。如果你还是使用VC6来开发现在的游戏话,建议你赶紧放弃吧。那都是8年前的开发工具了,目前都需要使用VS2005的开发工具了,强大的C++语言特性,强劲的编辑工具,让你写代码,就如流水般流畅。它还能支持编译x64位的代码,64位的PC越来越流行了。

5计算机体系结构:不了解计算机的体系结构,就没有办法知道程序的运行环境。很多年前,还是8086的体系的结构,接着,就是80386的保护模式。到目前多核体系结构,对于编写程序,要求发挥多核CPU的性能,就需要了解怎么样合理地分配CPU资源了。或许,你还可以控制那个CPU进行渲染的操作,那个CPU进行网络通迅。如果到四核的CPU,又要需要多少个CPU进行数据库的查询工作呢?

6Windows编程:目前90%的游戏运行环境就是Windows,如果不了解Windows,就无从下手了。比如Windows的消息处理过程,事件响应,还有Windows的网络通迅过程,这些都是需要了解的。还有Windows提供的API,更加要熟练运用了。

7DirectX:对于每个游戏开发者,都是必备常识。

软件工程:现在的游戏开发,都不是一个人就可以开发完成的。一定是一个团队,相互之间的协作,就成为了需要解决的问题。比如每个人写的一部份的程序库,是怎么样连接在一起,都是软件工程的问题,怎么样安排进度,都是需要使用甘特图来说明,以及怎么样进行测试,也是测试人员配合进行的。现在的游戏都进行入了3D的时代,那么你从哪里开始呢,最快的方法,就是下载DXSDK,然后打开一个空的工程,看看DX给你创建了什么文件,以及这些源程序作什么用的。接着试着创建一个三角形显示出来看看,试着改变它的颜色,试着让它转动起来,最后创建两个三角形,计算一下这两个三角形会不会相交呢?会不会碰撞呢?

在以上的分享关于这个问题的解答都是个人的意见与建议,我希望我分享的这个问题的解答能够帮助到大家。

在这里同时也希望大家能够喜欢我的分享,大家如果有更好的关于这个问题的解答,还望分享评论出来共同讨论这话题。

我最后在这里,祝大家每天开开心心工作快快乐乐生活,健康生活每一天,家和万事兴,年年发大财,生意兴隆,谢谢!

看你要去哪个方向了,策划、程序、美术,每个方向又有细分。

策划有剧情策划,关卡策划,数值策划等等。

程序有客户端编程,服务器编程,引擎编程,脚本编程,手机游戏开发,网页游戏。

美术有3d建模,2d美术。

方向不一样需求不一样。

较了解程序,就程序俩说吧。

如果要说只为干活,客户端你得学windows编程,socket等

服务器当然就是各种数据库操作,各种通讯操作。

引擎编程需要了解底层,directx,opengl,3d数学,物理基础等。

脚本的话就学脚本就够了。

手机游戏开发分ios、android,对应使用不同引擎需要不同的学习。

网页游戏前端目前flex流行,js,html也在发展。

以上只是速成。但是真正建议的是,

学好c++,数据结构,socket编程,了解windows编程,学习数据库编程。

先学3d数学,再学directx,然后试着做个小游戏。

学习设计模式。研究开源引擎。

会是个比较漫长的过程,但是基础扎实,各种开发都不怕。

可以专挑一条喜欢的道路深入研究,也可以专注游戏逻辑实现。

我也是在学习游戏,个人经历来说,觉得比较好的一个方案。

1、3D数学,包括矩阵、四元数、空间变换、碰撞检测等等;

2、C、C++要熟练掌握,对内存、指针这些都要很熟悉;

3、底层的计算机知识、组成原理很重要,最好能会一些汇编;

4、数据结构和算法,非常重要,基础都很重要;

5、对游戏的整体认识,包括游戏需要哪几个模块,比如渲染、物理、AI、gameplay等等,最好自己不用引擎的情况下写过一些基础的引擎、渲染模块等等;

6、对游戏需要有自己的认识和见解,玩游戏也要学会分析,知道如何分析游戏的优缺点,知道什么样的游戏好玩,为什么好玩,建议多看各种文章和视频;

7、了解业界的动态,多关注游戏相关的知识,业内的消息、媒体、人脉也非常重要,学习自己分析业界动向和观点;

8、使用和熟悉学习一下unity这种比较成熟的引擎也很有帮助,可以帮你了解游戏引擎的架构和引擎的动向,但是千万要巩固计算机基础之后再做这些;

9、创新的思维和openmind很重要;

10、好的实习经历、项目经验很重要,先进入游戏行业很重要,每个人都要敲门砖。

学习游戏开发需要熟练掌握游戏编辑软件,熟练掌握好这些基础的游戏软件功能就可以了。

常用的编辑软件有以下6种。

1、3dsMAX:大多数游戏开发公司美工使用,效率较高,可以独立制作游戏中所有美术相关资源。

2、MAYA:跟3dsMAX差不多的软件,因个人喜好而定,MAYA在制作动作的方面较MAX稍差,不过在很多方面这两款软件都是可以兼容的。

3、Deeppaint3D:可以直接打开3维模型文件,在上面绘制贴图。

4、C++:程序使用,用来实现游戏中的各种功能,调试BUG等。

5、Photoshop与Panter:配合MAX或MAYA来绘制各种模型需要用的贴图。

6、ZBrush:美工制作超高模用的,然后可以生成法线贴图,在MAYA或MAX中使用。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 云游戏的架构设计和技术实现 云游戏技术难题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情