现代游戏引擎中软件栅格化的用途是什么?


9

我本季度要参加计算机图形学课程。我们的实验室项目之一是软件光栅化。

现在,我正在计划项目建议书,并在考虑如何使它在当代游戏开发中对其他人有用。

经过短暂搜索后,我学习了一种称为“软件遮挡剔除”的技术。它对各种分辨率的缓冲区进行软件光栅化。我们可以使用分层z缓冲区查询遮挡。

我的问题:除了软件遮挡剔除之外,现代游戏引擎中的软件栅格化还有哪些用途?

Answers:


4

据我所知,软件遮挡剔除(您已经提到过)几乎是软件光栅化器唯一仍会使用的东西。Procworld利用类似的技术来显示其庞大的体素环境。

像截锥体剔除一样,大多数其他剔除方法也可以在CPU上工作,但是,与该示例一样,针对截锥体的测试是在对象级别上进行的,可能是使用轴对齐的边界框(AABB)。此交集测试比使用功能完善的软件光栅化器要简单得多。

在某些情况下,软件光栅化可用于鼠标拾取对象。在游戏引擎中,这通常可以通过使用物理引擎和具有简化网格的射线三角形碰撞来解决。

在现代交互式3D应用程序中,当CPU在等待GPU的同时处于空闲状态时,人们可能会认为使用这些空闲周期通过软件光栅化器在CPU上渲染可能会有所益处。除了渲染变得非常复杂和令人费解之外,这里的问题通常是带宽。在CPU上渲染的图像在显示之前需要先转移到GPU,这可能会抵消其好处。


0

具有“战争迷雾”概念的游戏通常具有可见性网格,以定义每个位置的战争迷雾状态。栅格化有时用于修改网格上特定形状的战争状态的迷雾。

例如,使用一种功能来显示具有特定半径的地图圆,或者使用某种功能来显示方形。

与图形完全不相关,但在现代游戏中绝对可以使用光栅化技术,而在RTS中也可以使用这种技术。

游戏中其他基于网格的数据可能会在类似情况下使用栅格化。


-2

栅格化是一个包含许多部分的巨大话题,我不是引擎程序员,但是我会尽力给出一些概述(这与完整的清单相去甚远!)。

一些非常基本的低级内容包括:

  • 视锥剔除:将相机视锥以外的所有东西都扔掉(将其视作相机的可视区域)。
  • 背面剔除:丢弃不指向相机的所有多边形。
  • Painter的算法:按照物体到相机的距离顺序绘制对象,从较远的物体开始,然后再朝向相机。

游戏中使用的更多高级内容包括:

  • 镶嵌:实际上非常类似于LOD(请参见下文),但是现在最新的DirectX版本引入了镶嵌,它提供了自动网格划分或缩小。这可以极大地提高图形性能,因为如果需要它们,您可以得到多边形,如果您不再想要它们,可以摆脱它们。
  • LOD:详细程度系统会根据对象和摄像机之间的距离替换对象的网格。例如,您的角色具有三个网格:一个网格为10,000,一个网格为5,000,另一个网格为1,000。如果您留在他的正前方,则会显示高分辨率网格(10,000个多边形),如果您移开它,则在100m之后将角色替换为中等网格,而在另一个100m之后将使用低分辨率网格替换角色。您可以减少网格而不是替换网格,但这会使编码更加复杂。
  • 二进制空间分区:该空间分为两个卷。将重复执行此操作,直到达到目标为止,例如,直到该空间仅包含应该在屏幕上绘制的多边形为止
  • 传送门和单元:(又名传送门剔除)用于室内场景和/或第一人称射击游戏。场景分为与投掷门户(例如门)相连的单元(例如建筑物的房间)。您可以将门户设置为打开和关闭。

假设您对图形流水线有基本的了解,我尝试着重于光栅化。您还可以查看照明和阴影或其他东西。

这些仅包括一些可能包含在项目中的技术。由于我在stackexchange上没有足够的声誉,因此我无法提供许多链接,但是您会在google中找到所有这些东西:)


2
问题是关于软件(阅读:CPU)的光栅化。您提供的一些信息通常与栅格化有关,在我的书中,有些技术与栅格化完全无关。您能否在答案中阐明这些技术如何使用软件光栅化或从中受益?
大卫·库里
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.