实时渲染:实时、离线、云渲染的区别
三维渲染,也就是将3D模型转换成2D图像,并最终呈现在屏幕上的过程。渲染过程需要计算机消耗时间进行运算,不同的渲染分类也会用到不同的渲染引擎。虽然由于使用场景各不相同,引擎本身的渲染算法都有它自己的特点和优势,但是随着硬件计算能力的发展,它们的界限也逐渐变得模糊。
常见的渲染类型有以下几种:实时渲染、离线渲染、云渲染、混合渲染。
它们之间有相同点也有区别,这里便避免太多的专业性描述,用更浅显易懂的方式来进行解释。
实时渲染(Real-time Rendering)
从字面的意思来看很容易理解到:就是我们要实时的看到渲染之后的3D物体或者场景的效果。一般的实时渲染场景都带有很强的交互性,就比如最常见的3D游戏《王者荣耀》、《和平精英》,或者是一些带交互的3D应用,比如智慧城市、智慧园区的可视化项目等等。在实时渲染的场景中,这些应用都会独立运行在电脑、手机上,通过本地的硬件能力完成实时渲染的过程。

离线渲染(Offline Rendering)
离线渲染这个从字面意思来理解,好像就是“断网”之后再做渲染,但这种理解是不对的。
实际上,离线渲染跟实时渲染相对应,简单来说就是我们不需要实时地看到渲染效果的场景。
这种场景最为常见的就是我们的三维效果图。做过装修的朋友应该都知道,如果让设计公司出具效果图一般都是要收费的(当然,有些公司为了吸引客户会免费),而这其实就是在做离线渲染的工作。
那么,为什么不能实时地去渲染一张效果图,反而要用上离线渲染的机制呢?那就要看最后的渲染效果到底要多高了。
实时渲染,虽然渲染速度快,可以实时生成渲染内容,但是渲染的效果和真实度相对来说是会很高的。而离线渲染的场景,基本都是对渲染要求非常高的、甚至是完全真实的。
比如刚才提到的家装效果图,你可能不需要立刻看到渲染结果,但是如果看到的时候,发现效果不理想,可能就要换其他设计公司了。
另外一个比较常见的就是好莱坞影视大片、3D动画等影视场景。他们都需要达到一个非常逼真的渲染效果甚至是完全真实的场景复现,但是对实时性要求不太高。
所以,一般的好莱坞大片,尤其是特效格外高端的那种,拍摄完成后的制作周期都非常长。比如我们耳熟能详的《阿凡达》,当时动用40000颗CPU、104TB内存、10G网络带宽,整整离线渲染了1个多月。
这时候应该就会有朋友存在疑问了,怎么可能用到40000颗CPU来渲染呢?什么电脑能有这么多CPU?这恰恰就是离线渲染在概念上容易让人误解的地方:离线渲染大多数情况反而是在线的。
一般情况下,如果我们做三维家装效果图,是可以用自己本地的普通电脑进行渲染成图的,但是个人的电脑硬件配置一般都不会特别好。因此完成整套渲染计算的过程到最终出图也是需要很长时间的,电脑硬件越好,时间也就越短。
如果是专业的设计团队,肯定也是希望出图效果好的同时时间也越短越好。
于是就出现了一种新的离线渲染形态:渲染农场。说到渲染农场相信很多人都不陌生,它就是在云端买了很多渲染服务器,这些服务器可以搭建成千上万颗CPU或者GPU的集群,来专门服务那些需要快速完成离线渲染的用户。比如市面上好评度非常高的渲染农场:渲染100。机器128G,单机和联机渲染都支持。
这就是为什么《阿凡达》的渲染会用到那么多CPU的原因,当然现在基本都是采用GPU来进行渲染工作了。渲染农场其实就是搭建了渲染服务器集群,这当然就是在线的了。所以,渲染农场是离线渲染场景中的一种渲染形式,但是实际上它也是在线的。

云渲染(Cloud Rendering)
这个从字面意义理解就是在云端完成渲染的意思。但是为什么上面讲到渲染农场的时候,并没有特意强调它就是云渲染呢?
其实如果按照渲染发生的节点来说,渲染农场这种离线渲染就是属于云渲染范畴的。但是,我们通常对于云渲染的理解,一般都是在云端完成实时渲染的场景。上面我们提到的实时渲染大部分时候都是在我们自己本地的电脑或者手机上完成的,因此对于终端硬件的要求是比较高的,不然“卡顿”肯定是无法避免的。
云渲染的出现就是为了解决这个问题:让硬件性能不太好的终端也可以实时的渲染效果不错的3D内容。
云渲染的基本原理是,把所有的3D渲染工作都交给云端。渲染完成后,编码成为视频实时地传送给我们的客户端,客户端就变成了一个视频播放器,对视频流进行解码和播放,这个过程中可以监听一些鼠标和键盘操作,来完成交互功能。
这样大量的三维数据和美术资源不用安装到我们的手机或者电脑的客户端,而是全部在云端完成渲染,客户端只要具备看视频的性能,就可以体验具有比较好渲染效果的3D应用。对于大众来说,手机设备不用特别高配,就可以体验效果很好的游戏,而且手机一般也不会发烫了。目前云渲染的场景也主要体现在游戏场景中,即云游戏。当然还包括一些对渲染质量要求比较高的3D可视化或者数字孪生项目。

说到这里,大家对于实时渲染,离线渲染和云渲染这三种不同的渲染形式,应该都有基本的理解了。其实渲染本身就是一个数学算法在计算机上的运算过程。它们都有各自的优劣和使用场景:
01、实时渲染(实例:手游《王者荣耀》、《和平精英》)
追求渲染速度,要求比较强的交互体验。所以即便在客户端硬件性能较高的情况下,也要做大量的数学算法优化,在不是特别降低渲染效果的同时,减少渲染时间,达到很好的实时性交互。
02、离线渲染(实例:电影《阿凡达》)
追求渲染质量,不要求实时性和交互性。追求的是极致的渲染效果,达到以假乱真的体验。因此就用最极致最优秀最贴近真实物理原理的渲染算法,来进行真实度极高的渲染过程。通过渲染农场的云端计算能力,尽量地减少渲染时间。
03、云渲染(实例:渲染农场渲染100)
追求相对较高的渲染质量同时,也要达到实时性要求。所以云端算力的部署和调度的能力要求会更高,让客户端配置不高的用户通过云渲染也能体会到不错的3D应用。