我个人接触电脑是比较早的,在小学的时候,就已经开始接触计算机编程了。也就是说,我经历过DOS时代,16位Windows时代,再到后来出现了Windows 2000和Windows XP。这些经历让我明白了一点:计算机实在是太过于博大精深了。就计算机游戏而言,我是玩过DOS版本DOOM的玩家,一直到现在的3A级别大作,我的游戏之路就没有断过,所以,个人觉得,自己对游戏还是有一点点发言权的。
从初中开始,我就在想,这些游戏程序到底是如何编写出来的?强大的好奇心,让我去书店买了一本游戏编程的书籍。我深深地记得,和书店老板砍价好久,才以50块钱的价格买了那本书。要知道,这50块钱我攒了半年,是靠着每天用早餐钱省下1毛或者2毛慢慢积累起来的,给老板付钱的时候,就是拿着一盒子1毛的硬币去的。
书虽然买到了,但是和你猜想的差不多。一个初中水平的小孩儿,怎么看得懂?除了第一章介绍的内容看明白了,剩下的内容就和天书一样。现在再看这本书,就会发现,这本书写得太烂了,完全就是代码的堆砌,估计,写书的人都不明白自己写了什么。再加上,大学时代购买的国内游戏编程书籍,也是差不多的水准,让我一度深深怀疑,我国的计算机水平真的这么次吗?
几年前,我依旧是这么想的,认为我国的游戏编程水平,一直处于非常低的状态,直到我看到了某个游戏后,才改变了我的想法。这个让我改变想法的游戏,就是很多人一说起来就生气的《王者荣耀》。先平复一下你们的心情,其实从游戏编程的角度来看,王者荣耀的水平是非常可以的,它解决了很多游戏方面的技术难题,真的公开的话,很多游戏公司是可以受益的。所以,我认为,我国的游戏编程水平已经有了比较大的提升了。很多人就会问了,既然游戏编程水平提高了,那么,为什么我国还是做不出像3A那样的高质量游戏呢?什么氪金啊、盗版啊、环境啊等等,其实都是比较次要的问题,真正阻碍我国做出高质量游戏的,其实就是游戏制作本身的超高难度。
所以,我就来谈一谈,自主研发一款高质量的游戏,难度到底有多高。
一、游戏是最复杂的电脑程序
这是我们首先要明白的一点:游戏程序,是电脑程序中最复杂的,也是难度最高的。随便对比一下。像Word这样的商业软件,基本上功能比较单一。Windows系统提供了很多编程接口(相当于系统给出一些接头类的东西,其他程序员可以通过这个接头来使用Windows提供的功能),程序员在写Word这样的程序时,就能大量使用,从而让编程过程变得简单。
再来看一个简单的游戏。比方说,某个程序员要写一个类似超级玛丽一样的游戏,那么,他需要处理的东西就多了。为了画面好看,程序员需要处理各种各样的图片素材;为了游戏有声音,程序员需要去处理录音文件;为了游戏有可玩性,程序员要去处理游戏逻辑;为了游戏能变得有趣,程序员甚至还需要懂得人工智能。当这些基础的东西弄好之后,这个游戏才能有个雏形。
二、游戏程序对硬件真的是用到了极致
光看显卡这个硬件,就能明白,游戏对硬件的利用是真的很极致。可以说,最开始显卡的出现,就是为了给游戏程序用的。游戏画面想要更好,需要非常大量的计算,而这些计算,CPU已经负担不过来了。其实,在十几年前,独立显卡已经非常大了,在台式主机箱里,它都是一个庞然大物。
为什么呢?因为,显卡内置了GPU,它要计算大量的内容,以减轻CPU的压力,所以,不得不设计一个很大的散热装置。一般用电脑的时候,它并不是很烫,但是,当你玩一个大型游戏的时候,它就非常烫了,不仅仅是CPU的热量,显卡也提供了很多热量。
三、游戏引擎是研发的最大障碍
为什么要有游戏引擎呢?就是因为,游戏编程太复杂了。游戏要处理显卡、声卡以及各种各样的输入设备,还有各种各样的大型建模,工作种类实在是太多了。而且,程序员们发现,游戏需要处理的硬件以及各种各样的素材,方法都是通用的,那为何不把这些东西弄成一个工具呢?这就是游戏引擎的雏形了。
现在开发游戏,基本上分两步:先有了游戏引擎,然后就是游戏创作。游戏引擎负责处理游戏编程中最麻烦、最繁琐的东西,比如,和显卡打交道。游戏创作就简单多了,有了游戏引擎,你的很多天马行空的想法,就可以实现了。我们要自主研发游戏,那么,总不能老是用外国的游戏引擎吧?还是得自己开发一个。说起来容易,真的去做,估计连比较简单的声卡处理,都能难倒一大片的专家。所以,开发游戏引擎,真的是一大障碍。
四、复杂的建模,是优化难点
除了游戏引擎外,游戏中的各种建模,也是一个痛点。游戏想要有高质量,视觉上一定要过得去,一个连画面都粗制滥造的游戏,是称不上高质量游戏的。说一句大家容易理解的话:假设一个高质量游戏总共使用了显卡100%的GPU(很大型的游戏了),那么,这个游戏中所
能这一个模型的数据量,就达到了几十万。一个游戏,复杂的模型非常多,真的像这样原封不动地转化数据,那最后的计算量就太大了。电影最小的帧数是24帧,电脑游戏由于要求高,最低要30帧才会比较流畅。就按30帧算,这个大型游戏,不经过优化,每秒钟要处理上亿的数据量!你说,现在有什么电脑能吃得消?所以,游戏优化必不可少。
那么,如何进行优化?就是用近似算法,将复杂的模型简单化,以达到减少整体数据量的目的。这就和压缩算法差不多,好的压缩算法,永远在人家的秘密口袋里,你想得到源代码,根本不可能;如果只用他们的付费编程接口,那就不再是自有物体的建模,可能占据了50%的GPU,剩下的50%,是给场景加特效用的,还有将游戏场景变换成二维画面显示出来的工作。
一个物体的建模为什么那么消耗计算力?这个要从建模的本质上说。比方说某个游戏中有很精细的人物模型,这个人物模型想要放置在游戏场景中,需要三步。第一步,由专业的美工用计算机画出这个模型,越精细越好。第二步,将这个模型转化成游戏程序能读懂的数据。第三步,由游戏程序借助显卡的能力,将模型数据绘制出来。
看明白了吗?关键是第二步的数据转化。如果原封不动,把最精细的模型转化成数据,可主研发了。
除了人为模型的优化,剩下的特效内容,依旧非常烧脑。比方说,场景中阴影的计算、光照的计算、画面同步的计算、线条平滑的计算(专业名词叫抗锯齿)、不同天气的计算等等。虽然说,微软公司的DirectX提供了基本的功能,但是,想要逼真的效果,就需要游戏团队额外单独进行编码。就算我们能够研发出这些特效内容,优化同样是一个问题。一个逼真的下雨模拟,代码可能就达到上万行,在原本就紧张的电脑资源面前,你不优化,游戏还怎么运行?
所以,即使我们能做出游戏,后期的优化,也能要了游戏团队的命。
最后总结一下,一个高质量游戏的完全自主开发过程。
(一)游戏团队大开脑洞,进行天马行空的构思,最好把游戏的世界观给构建出来;
(二)留下思维活跃的成员继续构思游戏,剩下的全部人员,进行游戏引擎的攻克;
(三)在攻克游戏引擎的同时,美工组成员,开始负责所有的图片、界面、模型的制作,质量越高越好,细节越完美越好;
(四)除此之外,最好为游戏创建原声,可以请人来作曲,请人来作词,最后请人来演唱;
(五)如果可能的话,将游戏中需要的人物配音、动物配音、物体配音全部配齐;
(六)如果一切顺利,游戏引擎开发了出来,就可以大刀阔斧地把游戏给“拼凑”出来了;
(七)游戏初稿完成后,可以找大型计算机(用于科研的超高性能计算机)测试游戏,并进行初步修改;
(八)找出所有影响游戏运行效率的细节,逐一攻破,最理想的优化结果是:市面上流行的家用计算机的运行效果,和科研用的高性能计算机的运行效果相差无几;
(九)经过比较长的一段时间测试,找出尽可能多的游戏BUG,并逐一修复;
(十)游戏大功告成,自主研发游戏终于问世!
所以说,我国的高质量3A游戏之路,任重而道远。
领取专属 10元无门槛券
私享最新 技术干货