有创造3D世界多边形可行的替代scheme吗?

当然,我看到使用多边形创建3D世界的好处。 但有时我想知道是否有其他方法存在,并在已发表的电脑游戏中使用过; 也许甚至是将多边形与其他一些渲染风格相结合的三维animation的混合方法,以便多边形渲染的局限性可能被克服或者被减轻。 例如,一种使人体没有锯齿状肢体的方法。

光线追踪技术几十年来一再出现。 虽然通常的3D引擎是基于在3D空间中获取一堆顶点,并通过投影matrix将其转化为2d空间,然后通过光线追踪引擎模拟每个屏幕像素的光线,然后看它在哪里击中表面。

光线追踪引擎通常喜欢炫耀反映他们的环境的完善的球形炫耀。 尽管在基于多边形的引擎中,球体和reflection很难做好,但是使用光线跟踪却是相当简单的。

不幸的是,GPU并没有针对光线追踪进行优化,所以很less有游戏充分利用这一点,所以没有任何一家GPU供应商会对此进行优化。 这种鸡蛋问题妨碍了方法成为主stream。 尽管如此,还有一些使用基于光线跟踪的引擎的实验性游戏 。

为了抛出另外一种可能性,我们可以用符号距离场和raymarch来定义场景。 许多demoscene创作使用这种技术创建非常详细的场景在一个微不足道的数据预算,让math公式做了繁重的工作。

ÍñigoQuilez的slisesix  - 由4千字节的可执行文件渲染!

这个场景,从一个名为rgba slisesix的演示是由ÍñigoQuilez ,使用这种技术最多产的创造者之一创建的。 它是从4千字节的可执行文件生成的,没有模型或纹理映射。

你会看到许多Shadertoy例子中使用的这种技术,就像这些大象一样 ,也是由ÍñigoQuilez (警告 – 这个链接在浏览器上很费力)

大象使用签名的距离领域,由ÍñigoQuilez

( 查看ÍñigoQuilez的网站获取更多的例子,以及关于这些和其他效果背后的math和编程的迷人文章)

这种技术在performance出平滑曲面和荒谬的performance,即使在放大的时候具有分形精细的细节,也是非常神奇的。由于一些聪明的空间折叠math,它也非常适合表示重复的内容,比如建筑中的常规结构。 一旦你渲染一个主题/列/拱/等,你可以镜像和瓷砖无限增加一点额外的成本。

虽然有很多缺点:

  • 对于一个复杂场景的距离函数可能是非常昂贵的评估。 (参见上面的大象,作为一个多边形网格场景,我们可以使用当前的硬件和软件,以更高的帧率渲染类似的视觉效果)通常的性能修正可能适用于多边形场景,例如细节缩减水平,剔除和假冒者,在有符号的距离字段中没有直接的或易于插入的模拟。

  • 创作一个签名的距离场景需要一种math雕刻技巧 ,很less有游戏内容创作者已经掌握了。 这不像在传统的3D软件包中创建场景那么简单,点击“转换为有符号距离场”。 尽管来自网格的体素化距离信息可以用于诸如阴影之类的一些效果 ,但是具有复杂带符号距离视觉效果的任何演示几乎肯定是从math上构建的。

  • dynamic修改场景更加棘手。 使用多边形场景,我们可以独立移动,删除或添加每个多边形。 我们可以使用蒙皮网格来animation角色。 使用带符号的距离场,所有东西都是公式的乘积,并不是我们可能想要应用的每个直观操作都在该域中具有清晰的或无副作用的expression式。

所以,到目前为止,多边形光栅化已经被certificate是一个更灵活的工具,对于我们今天构建的大多数游戏来说都是实用的。 但我敢打赌,可能会有一些聪明的方法来devise围绕特定的距离场raymarching的怪癖游戏,创造一些非常酷!

在这个方向上有一个有趣的发展:据我所知, MediaMolecule's Dreams为他们的创作工具使用了有符号的距离场,但是他们并不直接渲染它们 – 它们将它们转换成点或四边形,以更传统的方式渲染结果forms。

在梦中的雕刻工具的例子

使用其他几何图元可以构建一个graphics引擎。 在1994年,Accolade发布了一款名为Ballz的3D战斗机。 当时的硬件令人印象深刻,与其他控制台上的东西明显不同,但作为一个特许经营并没有那么好。 底层引擎后来被用于一些虚拟宠物游戏 。

在这里输入图像描述

Ecstatica & Ecstatica 2 (分别于1994年和1997年由Psygnosis发布)主要使用椭圆体。 我没有演奏这些,但是再次回想起他们看起来很有特色。

在这里输入图像描述

最近的例子是Toribash ,它似乎使用了球体,圆柱体,圆锥体和多边形的组合。

在这里输入图像描述