热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

从一个骗人的技术说起光线追踪——光影技术的里程碑

一般来说,我们总是喜欢把光线追踪和另一个概念:光栅化,作为相对的两个概念。因为二者在游戏画面展现上的差距有着天渊之别。光栅化技术有非常明显

一般来说,我们总是喜欢把光线追踪和另一个概念:光栅化,作为相对的两个概念。因为二者在游戏画面展现上的差距有着天渊之别。

光栅化技术有非常明显的缺陷,因为它是一个骗人的技术。


那什么是光栅化?

在过去,计算机硬件的运算速度是不够快的,不能实时使用这些技术。CG制作都是需要在离线渲染的渲染农场里把一个个单帧渲染出来,然后在脱机播放。

到目前为止,大多数的所谓的实时图形都是依赖于一种技术:光栅化。

实时计算长期以来都使用的是“光栅化”,这个技术是在二维屏幕上显示三维物体。 它的优点就是速度快,效果也还尽人如意。通过光栅化,可以从虚拟的三角形网格或多边形创建屏幕上的物体,也就是建模。在这个虚拟网格中,每个三角形的顶点与不同大小和形状的其他三角形的顶点相交。很多信息与每个顶点相关联,包括物体在空间中的位置,以及有关颜色,纹理及其“正常”的信息,这些信息用于确定物体表面的方式。

电脑然后将3D模型的三角形转换为2D屏幕上的像素或点。在三角定点的数据中为每个像素分配一个初始颜色值。在接下来就是像素的进一步处理过程或着色,其中包括场景中的光线如何撞击像素改变颜色,以及如何将一个或多个纹理应用在像素上,继而组合生成应用于像素上的最终颜色。说起来可能感觉很简单,但这是一个相当密集型的计算过程。场景中有数百万个多边形用于所有物体模型,并且在4K的显示器上大约有800万个像素。这也意味着屏幕上显示的每一帧图像每秒需要刷新30到90次。

此外,内存缓冲区用于即将在屏幕上显示的预先渲染帧。深度或“Z缓冲区”用于存储像素的深度信息,以保证像素的x-y屏幕位置上最前面的物体显示在屏幕上。并且最前面物体后面的物体要保持隐藏状态。这就是一直以来为什么实时渲染需要依靠强大GPU的原因。

光线追踪是什么?

与光栅化渲染不一样的是,光线追踪把一个场景的渲染任务拆分成了从摄像机出发的若干条光线对场景的影响,这些光线彼此不知道对方,但却知道整个场景的信息。每条光线会和场景并行地求交,根据交点位置获取表面的材质、纹理等信息,并结合光源信息计算光照。

一个典型的光线追踪场景:
在这里插入图片描述
光线追踪并不是新技术。事实上,它几乎和最早的3D计算机图形技术一同出现。

1968年,Arthur Appel在其论文《 Some techniques for shading machine rendering of solids》提出Ray Casting(光线投射)的新概念,这也是后来光线追踪的基石。


1969年就任于IBM的Arthur Appel在《Some Techniques for Shading Machine Renderings of Solids》论文中首次提出Ray Tracing(光线追踪)。


英伟达RTX光线追踪

标准化的光线追踪(raytracing)是以光源为起点定义光线,进而追踪由此产生的光线与物体表面以及光线与光线之间交互关系的过程。但该技术目前实现起来非常困难,因为这一技术需要无限多的光线照射在物体表面,通过反射、折射、漫射等途径进入最终的“摄像机”成像。这一过程需要耗费大量的算力(当前PC的计算能力无法做到)且会有大量光线损失,最近NVIDIA推出的RTX 20系显卡包括现在绝大多数光线追踪技术采用的都是逆向思维,即以“摄像机”镜头为出发点,反向回溯光线并通过这些光线寻找光源。

可以理解为RTX的光线追踪是人为定义了射入摄像机的光线总量,通过回溯这些光线反射后以寻找光源,每一个交汇结果都可以被作为是回溯过程中招惹到的光源所发射的光线与物体作用的结果,找不到就丢弃。

这样做的好处在于光线关系的起点是摄像机,这就造成光线关系与场景可视的几何信息存在高度的关联性和可遍历性,也就是所有进入不了视野的光线都将被认为的剔除。

另外,光线的实际范围被约束在了可视场景内,方便光线在回溯过程中的排序以及遍历,光线的处理过程既可以跟shader过程结合,也可以透过direct compute单独拿出来做独立数学步骤,就像deferred shading一样。

这样做会极大的加速整个追踪和交汇检查过程的效率,我们可以看做是手解高阶方程与使用计算机处理的差别。在这里插入图片描述

当然,他的缺点也是不容忽视的,比如这类实时光线追踪并不是从光源出发,而是从视角的角度出发,无法做到对真实的光线进行真实的遍历,人为规定了光线的数量以回溯光线的过程,也就意味着整个过程脱离不开人为定义,错误的干扰依旧是不精确甚至错误的主要原因。但总的来说,实时光线追踪技术可以让玩家体验到更加真实的游戏场景,光线决定了物体表现的最终纹理,在体验游戏真实性上是一次巨大的技术革新。


推荐阅读
  • 本文介绍了如何在方法参数中指定一个对象的协议,以及如何调用符合该协议的方法。以一个具体的示例说明了如何在方法参数中指定一个UIView子类对象,并且该对象需要符合PixelUI协议,同时方法需要能够访问该对象的属性。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 学习笔记17:Opencv处理调整图片亮度和对比度
    一、理论基础在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式:在图像像素中其中:参数f(x)表示源图像像素。参数g(x)表示输出图像像素。 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
  • 科技感英文字体_软件用的很6,理论也掌握了,就差搞懂字体了?
    字体是视觉设计中最重要的传达元素之一,字体本身的视觉特性和品质影响着信息传递的质量,英文字体有自己非常完善的系统,如果要精通则需要从字体的 ... [详细]
  • vb6集成ad登录共享文件_SCSP实验2单点登录
    01—实验目的掌握单点登陆相关原理和深信服配置02—实验环境1.AC版本v12.0.42AC1地址:https:172.172.1.1AC2地址:htt ... [详细]
author-avatar
虎爷2602900775
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有