致所有读者的问候。我决定总结并翻译F. Permadi撰写的有关光线投射技术研究的精彩文章“用于游戏开发和其他目的的光线投射教程”。
该出版物涉及并结合了“什么是雷铸造”和“雷铸造与游戏开发的雷追踪”原始文章。
值得注意的是,为了创建一个伪3D引擎(您也可以写一篇文章),我彻底研究了本教程。
好吧...开始吧!
什么是射线投射?
射线投射(以下称为投射)是一项技术,它通过从整个视场的角度“投射射线”将一组有限的数据(最简化的地图或平面图)转换为3D投影。例如,下图显示了投掷如何将2D A转换为几乎3DB。
射线投射和射线追踪
像光线投射一样,光线追踪“通过从视点向场景中的对象投射虚构的光线来定义表面的可见部分”。
前两个定义使throw和trace看起来是一样的。实际上,有些书将两个术语互换使用。但是,从游戏开发人员的角度来看,投掷光线应被视为跟踪实现的特殊情况。
投掷比跟踪快。这是可能的,因为它使用了一些几何约束来加快渲染过程。例如,墙壁始终垂直于地板(这在Doom或Wolfenstein 3D等游戏中可以看到)。如果不是这样的限制,投掷技术将是不可能的。
以下各段提供了引发和跟踪的全局比较。要记住的主要事情是:“由于某些几何约束,投掷使用的光线少于跟踪的光线”。否则,“抛出是跟踪的专门实现”。
原理
投掷:根据某些几何约束,光线会成组投掷并移动。例如,在分辨率为320x200的屏幕上,“射线生成器”将仅释放其中的320个(我们从宽度为320像素的屏幕具有320个垂直列的结果中得到此数字)。
跟踪:每条光线是单独计算的,也就是说,监视器屏幕上的每个点(通常是一个像素)都由其一条光线跟踪。例如,在分辨率为320x200的屏幕上,我们需要6.4万条(320 * 200 = 64000)射线,这比投掷要慢200倍。
式
通常,抛出时允许计算错误。路由时,所有内容都应尽可能准确。
速度
抛出比跟踪快很多倍,并且适合于实时过程。跟踪无论如何都不适合(除非我们有一台频率为500 GHz的PC)。
质量
掉落时,我们得到的图像质量中等/较差。您会注意到划分为块元素。跟踪时,图片尽可能逼真-有时甚至太多。
来自Wolfenstein 3D的场景。请注意,图片分为矩形块。对象(武器)和敌人(狗)只是透明的位图,可以在背景上缩放和绘制。
游戏第7位来宾的场景。渲染效果惊人。但是,玩家的运动仅限于预先定义的路径(这是由于预渲染图像的数量受到限制这一事实)。
外部世界
投掷时,我们在几何上受到限制,只有简单的形状可用。跟踪时,可以渲染任何形状。
记忆
抛出:渲染的图像不会保存到磁盘。通常,仅场景图本身存储在介质上,并且动态生成相应的图像。
跟踪:渲染的图像保存到磁盘并根据需要从那里加载。当前,没有这样的硬件部件能够即时渲染光线跟踪的结果。
示例
投掷:
- Wolfenstein 3D(iD软件)
- 暗影施法者(乌鸦)
- 竞技场(贝塞斯达)
- 厄运(iD软件)
- 黑暗力量(LucasArts)
跟踪:
- 第7位来宾(Trilobyte)
- 关键路径(Mechadeus)
- 第11小时(Trilobyte)
- 神秘(青色)
- Cyberia(Xatrix)