01 3D引擎是什么?
听到“引擎”两个字,你可能首先会想到汽车引擎,为汽车提供动力的核心部件。如果没有引擎,汽车就只能是一个模型,它就无法跑起来。
3D模型也一样,我们用3DMax软件制作了一个非常逼真、精美的3D模型,还有光影和动画效果,甚至每一根发丝都是那么真实,但它是“死”的,不能与人互动。
而3D引擎是让模型“活”起来。假设我们把3D应用或者3D游戏看作一辆正在奔跑的汽车,那3D引擎就是隐藏在内部驱动它去运行的底层技术。
这就是3D引擎的能力,它为3D模型赋予了“交互方法、物理定律、剧情脚本、AI智能”,让开发者不需要编写很多代码,就能让3D模型在“体”、“相”、“用”三方面逼近现实世界真实的人和物。
而且与汽车引擎不同,汽车没引擎不能跑,3D应用和游戏没引擎也可以运行,3D引擎更像“汽车工厂”,本质上是一种开发游戏和应用的软件。
02实时渲染与离线渲染
讲到这里,需要给大家澄清一个概念,刚才说我们引擎是驱动3D应用和3D游戏在不断的运行,那有伙伴问了:电影院里我们也经常看到一些3D渲染的非常精美画面,那是不是也跟3D引擎有关系?
实际上电影画面大多数都是离线渲染出来的,跟我们今天聊的3D引擎不是一回事儿,3D引擎的渲染方式是实时的。
那离线渲染引擎和实时渲染引擎有什么本质上的区别呢?
实时渲染(Real-time Rendering)从字面的意思非常容易理解,就是我们要实时看到渲染之后的3D效果。
3D应用和3D游戏这种必须要满足与用户之间强交互,比如最常见的3D游戏《英雄联盟》,或者是一些带有交互的3D应用,比如智慧城市、智慧工厂等数字孪生项目,一般来说保证流畅运行至少24FPS:只有达到或者超过1秒钟播放24张连贯图像,才能人眼观看时没有卡顿的感觉。
离线渲染(Offline Rendering)是跟实时渲染相对应的,简单来说就是我们不需要实时的看到渲染效果的场景。最早电影每帧都要花上几天的时间来渲染,渲染完成后输出的一个完整的电影视频,给到院线去放映就可以了。
即使到今天硬件发展如此迅速,现在电影渲染依然是很慢的。比如电影《阿凡达》如果说在一个普通电脑上渲染,可能还要几百年的时间,随着云渲染技术的愈加成熟,直接在渲染农场也能很快完成电影渲染任务。
3D引擎与集成电路很像,都是内部复杂,使用起来反而没那么复杂。下面这个架构图就是实时渲染的游戏引擎架构示例,我们可以看到里面包括很多功能模块,实时渲染是一部分,还有声音模块、渲染模块、图形系统、UI 系统和内存管理。我们常用的数字孪生引擎里边也有相应的一些逻辑,比如数据储户、孪生体互相控制,还有物理仿真等等。
03 3D引擎的发展历史
3D引擎的发展历史是3D游戏行业发展史的缩影。其实在三十多年前,电子游戏出现的早期,没有游戏引擎也能开发游戏,我们熟悉的玛丽兄弟、魂斗罗,都是程序员用简陋的代码编辑器,从零开始一行一行写代码开发出来的。
在红白机时代,游戏开发者如何既节省性能又增强游戏体验:
想必大家很熟悉超级马里奥这款游戏,下方展示两张图,我们可以看到左侧的画面中天空有白云,地上有草丛。大家有没有发现,白云和草丛长得很像,形状完全一样只是颜色发生了变化。
实际上,白云和草丛只用了一张图,游戏开发者为了保持游戏的性能节约内存,想尽各种办法。再比如右侧的怪物,它有一个不断左右脚不断向前踏步的动作,一会儿左边脚大,一会儿右边脚大,这样来回翻转来实现走动效果的。
那时,用户的期望很低,游戏的玩法也是很简单,所以允许使用这种作坊式的粗糙方法。后来游戏市场规模越来越大,用户要求越来越高,游戏玩法也越来越复杂,这就导致游戏的代码量变得非常巨大。
开发者们发现每次做游戏都一行行敲代码很耗时费力,所以能不能设计一套代码库?把最基础、最常用的功能都封装好,这样下次做新游戏就不用重新写代码了。
一开始,这种想法只是在一些游戏公司中的一小部分程序员中做尝试,程序员在开发某个功能时多留一个心眼,把未来可能重用的部分单独剥离出来。这种尝试就像荒野中微微闪现的星火,但这些零散的可重复利用的代码块还远远称不上“引擎”。
终于,1993年一个改变时代的大神出现了,他就是约翰·卡马克,ID Software的创始人。他设计了人类第一款3D引擎,带领团队在短短几年内就创造了《DOOM》《德军总部》《雷神之锤》《狂怒》等如雷贯耳的游戏大作。今天,卡马克被誉为FPS之父、3D游戏之父。
卡马克和其他程序员不同,他在动手开发游戏之前就先设计了一整套基础代码的框架和开发规范,并将所有的基础代码写好,还留下了方便调用的接口,比如图像渲染接口、3D加速接口、轨迹控制接口等,这样其他程序员在开发游戏时就可以像拼乐高积木一样,快速搭建出各种游戏应用,也使得游戏的规划更合理,功能更稳定,并且游戏开发者只需要将精力聚焦游戏规则本身,提升了游戏开发效率。而这个基础代码库就是最早的3D游戏引擎。
卡马克开发的世界上第一款3D游戏《德军总部3D》让人们看到了一个全新的游戏世界、感受到极为震撼的游戏体验。这款游戏一出现,一下子引爆了大量的3D游戏需求。后来有一家叫“乌鸦”的游戏开发公司找到卡马克,买下了这个游戏引擎的授权,于是乌鸦公司就用这款引擎快速开发了不少畅销游戏。游戏行业就此诞生了一个新的细分市场:3D游戏引擎。
直到今天,3D引擎行业发展进程中,伴随互联网时代变迁、软硬件技术更迭,行业本身出现了不同专业领域的发展方向,逐渐进化出不同领域的专用引擎。
04 3D引擎赋能创新应用
从2021年开始,元宇宙逐渐进入人们的视野,将成为下一代互联网的科技革命浪潮。而ChatGPT的爆火,让元宇宙的热度逐渐退去,人们开始冷静下来思考,元宇宙概念变得更加真实,与之相关的数字孪生、XR等产业也展现出更为实用的商业价值。
元宇宙造就了一种全新的、身临其境的数字世界,想要构建一个与现实世界高度贴合甚至是超越现实世界的“元宇宙”,前提需要创造一个与现实世界1:1还原的虚拟世界,关键核心点则是数字孪生,而数字孪生也是构建元宇宙的核心技术之一。
3D引擎所提供的渲染能力和实时交互是数字孪生所需的必要能力之一。开发数字孪生的引擎模拟现实世界自然法则越丰富越强大,就能越好地让数字孪生体身上的信息发挥作用,数字孪生体被3D引擎驱动,就如同现实物体被自然法则驱动。
因此3D引擎能力决定着数字孪生技术的成熟度,也决定了元宇宙在虚实映射与虚实交互中所能支撑的完整性。
可以预见到,3D引擎将成为下一代互联网的“CAD”。
如果说数字孪生开发离不开“3D引擎”
那该如何选择最合适的3D引擎?
3D游戏引擎能否开发数字孪生?
B/S架构和C/S架构如何比较?
常见的WebGL与WebGPU又有什么关系?
......
下一期我们再为大家详细讲解。