与Blender的“慢速”渲染相比,现代游戏引擎如何实现实时渲染?


90

我是gamedev和Blender的新手,有些事情我无法动摇:

在Blender中,单个渲染(即使使用更高级的Cycles渲染器)在我的计算机上最多可能需要45秒钟。但是显然,在游戏中,您可以拥有惊人的图形,因此渲染显然是连续发生的,每秒实时发生多次。

因此,我还想知道,Blender的渲染看起来有多“慢”,以及游戏引擎如何实现实时(或接近实时)渲染时,断开连接是什么。


3
实时渲染本身就是一个巨大的话题,关于它的书籍很多(包括“实时渲染”)。而且像Cycles这样的渲染器在游戏引擎中的工作方式与3D渲染器完全不同-您无法真正比​​较它们
UnholySheep

42
@UnholySheep当然,您可以对它们进行比较。还有谁能解释这个区别,以回答这个问题?
user985366 '17

2
@ 10Replies但是这个问题不会在那个站点上引起关注。
GiantCowFilms

3
@ 10Replies:尽管OP确实提到了Blender,但从本质上讲,这个问题归结为为什么实时游戏引擎渲染3D场景的速度似乎比逼真的3D渲染器(例如Blender,还有许多其他渲染器)更快。请注意,这也是公认答案所回答的问题。考虑到这一点,我同意在“ 游戏开发”(这里可以询问有关通用游戏开发技术的问题)上而不是在“ Blender”(这里的问题更具体地针对Blender)上,这个问题在“ 游戏开发”上更具话题性。
OR Mapper'2

3
我想这里的秘密是惊人的不一定精确。对于3D渲染中使用的数学有快速的近似值,例如InvSqrt
Dmitry Grigoryev

Answers:


115

实时渲染,甚至是现代的实时渲染,都是技巧,捷径,黑客和逼近的抓包。

以阴影为例。

我们仍然没有一个完全准确且健壮的机制来渲染任意数量的灯光和任意复杂的对象的实时阴影。我们在阴影贴图技术上确实有多种变体,但是它们都遭受着阴影贴图的众所周知的问题,甚至这些“修复”实际上只是变通和权衡的集合(根据经验,如果您会在任何东西中看到术语“深度偏差”或“多边形偏移”,但这并不是一种可靠的技术)。

实时渲染器使用的技术的另一个示例是预先计算。如果某些东西(例如照明)太慢而无法实时计算(并且这可能取决于您使用的照明系统),我们可以对其进行预先计算并将其存储出来,那么我们可以实时使用预先计算的数据时间来提高性能,通常以牺牲动态效果为代价。这是直接的内存与计算的折衷:内存通常便宜而充足,而计算通常不是,因此我们消耗额外的内存以换取节省的计算资源。

另一方面,脱机渲染器和建模工具往往更关注正确性和质量。另外,由于他们正在使用动态变化的几何体(例如正在构建的模型),因此它们必须经常重新计算事物,而实时渲染器将使用不具有此要求的最终版本。


14
还要提到的另一点是,用于生成游戏将需要的所有数据以快速呈现一个区域的视图的计算量可能比呈现一个视图所需的计算量大几个数量级。如果在不进行任何预先计算的情况下渲染一个区域的视图将花费一秒钟,但是某些预先计算的数据会将其减少到1/100秒,则在实时游戏中需要视图的情况下,花20分钟进行预先计算可能会很有用,但是如果一个人只想要一部十秒钟的24fps电影,花四分钟就可以快得多……
supercat

9
...以每秒1个的速率生成240个所需的视图。
超级猫

@supercat,因此,您的渲染几乎没有草率,并且您可以完全控制该过程。如果您准备牺牲功能,则可以使用游戏引擎进行渲染。但是正如您所说的,这不值得。
joojaa

我能想到的一个引人注目的例子是原始的Quake引擎(〜1996年),它能够使用非常耗时的预计算技术的组合,在非常有限的机器上实现令人难以置信的实时3D图形。BSP树和预先渲染的灯光效果是提前生成的;为该引擎设计一个关卡通常需要数小时(通常是一整夜)的等待地图编译工具完成的时间。从本质上讲,折衷是减少了渲染时间,却以编写时间为代价。
Jason C

(原始的《毁灭战士》引擎(1993年)进行了类似的预先计算。马拉松可能也有类似的计算,但我不记得,我记得建立马拉松级别,但我不记得所涉及的内容。)
杰森C

109

当前的答案在解释所涉及的一般问题方面做得非常好,但是我觉得它错过了一个重要的技术细节:Blender的“ Cycles”渲染引擎与大多数游戏使用的引擎是不同的引擎。

通常,通过迭代场景中的所有多边形并分别绘制它们来渲染游戏。这是通过通过虚拟摄像机“投影”多边形坐标以生成平面图像来完成的。将该技术用于游戏的原因是围绕此技术设计了现代硬件,并且可以实时完成相对较高的细节水平。出于兴趣,这也是Blender之前的渲染引擎采用的技术,然后Blender Foundation放弃了旧引擎,转而使用Cycles引擎。

多边形渲染

另一方面,循环就是所谓的光线追踪引擎。它无需查看多边形并单独渲染它们,而是将虚拟光线投射到场景中(最终图像中的每个像素一个),将光束从多个表面反射出去,然后使用该数据确定像素的颜色应该。光线追踪是一种非常昂贵的计算技术,这使其在实时渲染中不切实际,但由于其提供了更多级别的细节和逼真度,因此用于渲染图像和视频。

光线追踪渲染


请注意,为简洁起见,我对射线追踪和多边形渲染的简短描述已被简化。如果您想了解更多有关这些技术的信息,我建议您阅读一本深入的教程或书,因为我怀疑有很多人写的解释比我想得要好。

另请注意,3D渲染涉及多种技术,某些游戏实际上出于某些目的使用了光线追踪的变体。


3
+1非常好;我故意没有深入探讨光线追踪与栅格化的关系,因此能够很好地将其作为补充。
Maximus Minimus

16
这个答案对差异的核心意义更大。游戏引擎执行栅格化(转发或延迟),而脱机渲染器(如Blender,Renderman等)执行光线跟踪。两种完全不同的绘制图像的方法。
ssell

4
@ LeComteduMerde-fou当gamedev针对游戏开发人员时,我觉得补充性的技术说明将对技术偏爱的读者有所帮助。
法拉普

1
@ssell True,但这不仅与光线追踪有关-即使没有光线追踪,即使使用GPU渲染,Blender的渲染通常也更加详细和缓慢。这主要与对正确性的关注有关-更好的纹理过滤和分辨率,抗锯齿,照明,阴影映射,Z精度,四边形,双向表面,大多边形数量,高分辨率输出,准确的凹凸贴图,缺少预先计算的地图,变形,准确的运动学……这是游戏引擎缺乏或伪造的一长串功能。
a安

1
@Chii我记错了。我在考虑ART VPS,它只是加速,而不是实时的。
杰森C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.