如何进行软件渲染?


15

我想探索基于实时软件的栅格化。我知道这些天一切都在朝着GPU迈进,但是在一些游戏中使用软件渲染器仍然有意义。

例如:Voxeltron

Voxatron是一个竞技场射击游戏,发生在一个由体素(小方块之类)构成的世界中。游戏中的所有内容均以虚拟的128x128x64体素显示器显示,包括菜单和玩家清单。如果仔细观察,有时会看到库存(得分/生命/弹药)在地面上的某些物体上蒙上阴影。

我长期从事体素渲染和建模工具的研究,其最终目标是制作大型探险冒险游戏。大约半年前,它与我在Conflux的舞台射击游戏中所做的工作融合在一起,这就是结果。

从本质上讲,这是一个非常简单的游戏-大多只是Robotron摆在一个3D可破坏世界中,带有愚蠢的生物。我不确定可破坏性对游戏玩法的影响有多大,但是炸开墙壁确实很有趣。我还添加了一个实验性的围墙拾音器,您可以使用该拾音器来构建屏障以躲避可怕的怪物。

游戏发生在一小部分竞技场上。其中一些客房设有固定动作的房间,位于Knightlore和Smash TV之间。这是一些原始的基于冒险的设计潜入其中,并且是创建主题环境的借口。

特征:

  • 具有柔和阴影的自定义软件渲染。
  • 内置声音和音乐合成器(也用于制作预告片音乐)。
  • 播放和游戏后录制。

1
整洁的游戏链接。注意它没有必要用软件渲染器获得在GPU上软阴影。他将在渲染循环方面遇到一些性能限制,如果他能够利用可用的硬件,那么他将无法在更基本的机器(例如1.6 GHz笔记本电脑或手持设备)上运行。
bobobobo

Answers:


11

我假设您已经知道一些基本的线性代数,涉及的种类:3d投影,相机设置,将顶点转换为世界位置等...如果您不了解,则有很多不错的地方可以学习。这是我喜欢的两个:

游戏引擎架构

  • 简要介绍了基本线性代数,但确实涵盖了您需要了解的所有内容。由于其他许多原因,这本书也值得一读。

实时渲染

  • 稍微更详细的介绍,但仅会坚持您可能需要知道的内容。同样,对于其余各章中涉及的主题,我也建议使用此主题。

了解了如何表示和处理3d对象后,便可以开始研究如何将其绘制到屏幕上。通常,这是通过扫描线三角形光栅化技术完成的。这实际上是一个非常简单的概念。在插值颜色和uv纹理坐标时,一次绘制一个三角形的一行。对于屏幕上的所有三角形,将继续此过程。您甚至可以实现一个深度缓冲区来处理乱序渲染。

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

这些文章中对此进行了更详细的介绍:

教程-基于软件的渲染简介:三角形栅格化

软件渲染学校:第一部分


只是为了好玩,请查看以下文章:

雷神之锤2源代码评论3/4(软件渲染器)


不用

那里有一些很好的链接!
乔纳森·康奈尔

5

这是一个相当广泛的话题。不过,它有两个基本部分:图形转换和光栅化管线的实际理论,以及使您能够按自己选择的方式在屏幕上展开像素的实际实现位。最重要的是,还有优化(尤其是后者)。

幸运的是,第一部分与现代硬件和API公开的用于图形管线的理论相同。如果您已经知道这一点,那么您就定了。如果您不喜欢,我推荐一本好书。这个很好。

第二部分有很多选择。它们在很大程度上取决于您的操作系统和工具链的选择。如果您在Windows上使用C或C ++,则可以直接将像素直接绘制到GDI位图(这SetPixel很简单,但是很痛苦,没用,很慢- CreateDIBSection给您大量原始字节,您可以以更快的速度进行操作)。

您还可以获取DirectDraw曲面并对其进行写入,或者写入Direct3D或OpenGL纹理。在后一种情况下,您仍将使用硬件,但是只要您自己在CPU上完成最终图像的所有合成,并且仅使用硬件API将结果复制到屏幕上,它就仍然很重要。在现代PC上,无论如何都无法直接访问原始VRAM或任何其他内容。

如果您想了解更多,您可能应该提出更具体的问题。我或其他人很乐意回答他们。


对于这本书:“漂亮”有多好?$ 84是一笔可观的现金:)
Jonathan Connell

这是我最推荐的一种。对于最便宜的选项,您可以参考转换管道上的Direct3D文档。尽管它是D3D特定的,但其中95%完全适用于一般理论。您还可以签出OpenGL Red Book的在线副本。它们已经过时,但理论仍然适用。

0

好吧,我将从最基本的角度解决这个问题。除此之外的任何事情都可以扩展到简单的质量检查中;您需要购买有关该主题的书。

在软件渲染和使用GPU之间,最根本的区别在于绘制像素。也就是说,在进行软件渲染时,您最终要负责绘制每个该死的像素,而使用GPU,像素的绘制很大程度上由硬件自动完成,您只需使用着色器“按摩”像素管线即可。

例如,考虑一下您作为程序员必须执行的操作才能在屏幕上显示3D三角形。使用GPU,您几乎可以告诉硬件顶点的X,Y,Z坐标是什么,然后视频卡填充屏幕上构成三角形图像的所有像素。您可能使用着色器告诉GPU根据纹理或其他东西更改每个像素的颜色,但最终还是取决于GPU自动为您填充所有像素。

在进行软件渲染时,您必须计算出屏幕上要填充的像素,然后进行blit处理以实际填充这些像素。也就是说,您需要进行矩阵数学运算,以从3D场景的坐标空间转换到视图空间,然后将点从视图空间投影到屏幕上,依此类推。

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.