专栏名称: 风云之声
科技与战略风云学会,科学素养,家国情怀,横跨文理,纵览风云。《周易·文言》:“九五曰:飞龙在天,利见大人,何谓也?子曰,同声相应,同气相求。水流湿,火就燥。云从龙,风从虎。圣人作而万物覩。”
目录
相关文章推荐
知产宝  ·  典型案例 | ... ·  3 天前  
51好读  ›  专栏  ›  风云之声

《黑神话》是如何开发的?3D游戏技术介绍 | 袁岚峰

风云之声  · 公众号  ·  · 2024-10-19 20:00

正文

请到「今天看啥」查看全文


角色还会有衣服、饰品、面具等等,有时还有几层衣服。这些也需要专门的数据结构来处理,布料就能用来表示衣服。

最特殊的一类东西是光源。有火炬、蜡烛之类的光源,有时还有一个外来光源,像太阳一样的平行光。由于光会反射、折射、吸收、增强,光线的处理非常复杂,是图形显示算力需求最大的算法。实际上所有物体的颜色、亮度值都是以光源为基础的。

好,现学现用一下,大家看看这幅图中,有哪些数据结构?

看看图中有哪些数据结构?

每一种数据结构的处理,都有非常深入的计算机图形学研究背景。靠这些图形学算法,3D游戏开发才有基础。上世纪九十年代,3D游戏就有了不错的效果。随着软硬件进步,到现在游戏的效果提升极大,有时逼真得吓人。了解游戏开发的基础知识,就会明白游戏对于科技进步的拉动作用。

3D游戏开发涉及的数据种类、算法,实在是太多了。一般开发者没有能力自己去从头实现,中小公司都不行。还好有游戏开发引擎,如Unity和Unreal。游戏开发引擎将相关数据结构和算法打包好,直接提供框架给游戏开发者使用。开发者按照引擎使用规范,定义好游戏世界的数据,设定游戏规则,就可以把游戏编写出来了。Unreal和Unity就像编程中常用的Visual Studio一样,是一个集成开发环境。

Unity是最常用的游戏开发引擎,开发的游戏类型和数量最多。除了游戏以外,它还可以用于美术、建筑、汽车设计、影视等领域,都是3D模型、3D世界进行2D显示。这个引擎的开发公司是Unity Software,中国子公司是Unity中国。Unity中文版叫“团结引擎”,有自己的特性,和英文版不一样。Unity每年都会有大版本更新,如2019版、2020版,直到2024版,小版本更新就更为频繁。

Unreal的中文名叫“虚幻”,但没有特殊的中文版。现在流行的是虚幻4 (或称UE4,2014年发布) 以及虚幻5 (或称UE5,2020年发布) 。《黑神话》就是用虚幻5开发的。Unreal引擎的开发者是著名游戏公司EPIC,这个公司有《堡垒之夜》、《战争机器》等作品。为了促进行业发展,EPIC把Unreal的源代码开放了,但不是开源,使用还是要付费。和Unity一样,Unreal也可以用于影视等其它领域。

Unreal相比Unity,率先实现了一些先进图形算法。其中有些在《黑神话》中有应用,如Nanite、Lumen,后文介绍。不过Unity以后也会实现这些算法。Unreal还有一套定义游戏规则、角色动作的代码框架,叫做game play,而Unity没有。但这并不是说Unreal就更好,也许开发者认为game play定义规则的办法对某些游戏并不高效。

个人开发者与中小公司,一般会用Unity或Unreal引擎开发游戏。大公司也会用,但是大公司同时会有自己开发的引擎,代表公司技术实力。

此外还有DCC软件 (即Digital Content Creation,数字内容生成) 、建模软件,如Blender、3DMAX、Maya,用来生成行业最通用的FBX模型文件。

以上是游戏开发概念性的常识,没有涉及具体的数据结构与算法

二.游戏开发基础算法概念

游戏世界的物体,基础的表示办法是三角形网格 (Mesh)


如图,用三角形网格模拟物体表面,就可以定义一个物体的三维形状。顶点的密度越大,三角形网格越多,物体表面就能模拟得越好。三角形网格表示的基础是,任意多边形都可以切成多个三角形。也有其它的网格类型,如四角形网格 (加一些三角形网格) ,但最常用的是三角形网格,《黑神话》应该也是。

一个三角形网格,要存储顶点的3D坐标和三条边,顶点的顺序可以区分正面与反面。还有一些其它性质,如法向量、材质属性。

玩家看游戏画面时,往往意识不到三角形网格的存在。这是因为,最吸引注意的,是物体表面 即三角形内部) 的“内容”,而不是顶点。要用各种色彩去填充表面,不能是光光的三角形。这就是三角形内部的“纹理” (Texture) ,其实就是一张图片贴到三角形上面去。显示时不止贴图片,还要结合光源计算出里面的色彩。

有了三角形网格表示、纹理表面贴图,一个物体就很像回事了。游戏中有近景、远景,对同一个物体可以设计精度不同的模型,近景用高精度,远景用低精度,分几个级别。但这都是静态的,游戏里很多物体的形状、角度是会变的。

物体如何变动、对撞反应,需要一个“物理引擎”。游戏世界的物理,和真实世界一般是不同的,有夸张、简化。也有尽量模拟真实世界的,做得很细,这是很难的,主打真实,但效果未必好。游戏世界只要效果好,完全可以变通处理。一些物理效果显然是不符合牛顿定律的,——经常在评论区见到有人说:我们这儿不归牛顿管!但没关系,人们很容易接受游戏世界的物理规则,比真实世界更有趣、好玩。

对计算机编程来说,这提供了很大的方便。例如《黑神话》里,悟空的棍风扫到了几株小草。如果是真实物理,棍子一扫不可能有太大棍风。在物理引擎里,就可以简单处理,对小草加一个有方向的扰动,根据扰动力度,计算各顶点偏移量,模拟出夸张效果。







请到「今天看啥」查看全文