热门标签 | 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一样。

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

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


推荐阅读
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • 英特尔推出第三代至强可扩展处理器及傲腾持久内存,AI性能显著提升
    英特尔在数据创新峰会上发布了第三代至强可扩展处理器和第二代傲腾持久内存,全面增强AI能力和系统性能。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 本文介绍了在 iOS 开发中设置图片和视图圆角的几种方法,包括通过 layer 设置圆角、使用贝塞尔曲线和 Core Graphics 框架,以及使用 CAShapeLayer 和 UIBezierPath。每种方法都有其优缺点,适用于不同的场景。 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 使用虚拟机配置服务器
    本文详细介绍了如何使用虚拟机配置服务器,包括购买云服务器的操作步骤、系统默认配置以及相关注意事项。通过这些步骤,您可以高效地配置和管理您的服务器。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
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社区 版权所有