光追基本理解

2019-08-15  本文已影响0人  Jaren_lei

        要弄懂什么是光线追踪渲染,首先需要让我们有一种“世界观”的认识,那就是我们人眼所能看到的万事万物几乎都是反光或发光的,就连黑茫茫的宇宙也有微弱的微波背景辐射。如果我没有记错的话,目前人类所能制造的最黑的(几乎不反光的)物质,也只能吸收 98 %左右的光线,还是存在微弱的反光。这就是说,是物体总是会反光(或发光)的(不一定非得是金子),这就是光线追踪之所以成为可能的基本前提。而这些无论是直接发出的光,还是反射的光,最终射入我们的眼睛成像,就形成了我们“看到的世界”。那么基于这样的认识,我们就不难理解我们为什么能够看到这五彩缤纷的世界。光线追踪渲染的目的就是利用计算机图形技术(线性代数及仿射几何),在虚拟的 3D 场景中模拟(仿真)出几乎与人类观看客观真实世界一致的视觉效果。所谓的实时光线追踪,就是随着摄像机视角的变动,后端需要实时发射追踪光线来重新计算光照信息,如果屏幕分别率很高,这个计算量是很大的,对 GPU 的性能要求是很高的,如果性能达不到游戏直接会卡死。

       光追渲染可以实现电影级画质的渲染。这也是传统的光栅化渲染无法简单的做到的。传统的光栅化渲染技术发展到今天,为了尽可能快的渲染出较真实的画质,其复杂度已经是当初的至少几何级数倍了,很多相关的渲染技术已经复杂到需要专业级数学知识才能理解和运用。当然有了光追渲染,不能简单的就去否定传统的光栅化渲染技术。虽然微软在其渲染光追渲染的文档中一开始就说“ 3D GraPhics 15 a Lie ( 3D 图形是一个谎言) " ,但光栅化渲染技术在相当长的一段历史时期内都是性能与画质折中后的优秀技术方案,甚至在实时光追可以实现的今天及未来的相当长的一段时间内,因为硬件性能的问题,光栅化渲染至少还要在我们的手机上奋战很长一段时间,也就是说两种渲染技术会在相当长的一段时间内并存。而未来实时光追渲染还将主要在高性能的 Pc 端崭露头角,因此建议大家对两种技术都要熟悉和了解。在光线追踪渲染中,并不是直接模拟一条条从光源射出的光线,看它经过如何的反射折射或直射等光学过程进入我们的眼睛,想象一下这样一来其实大多数光线都因为没有最终射入眼睛而浪费了,同时也浪费了很多计算资源,而这种浪费是完全没有必要的。真正的光线追踪则是反其道而行之:假设我们眼睛能够接收到什么光线,并将这些光线从眼睛中反向发射出来,先射到屏幕上,再从屏幕的像素射到场景中(这让我突然想起某位古希腊先哲在试图解释人类视觉原理时说人类眼睛中射出了无数的触手触碰到了物体,于是人类就有了视觉。在此向他老人家致敬! ) ,接着计算和追踪这些反着走的光线如何从屏幕上的像素上射出,再经过直射、折射或反射回到光源,如果光线回到了光源,那么这条从眼睛射出的光线就是可见的,我们就调用相关的着色程序为这个像素点着上颜色(未着色的就默认为黑色或天空背景颜色),当从眼睛中射出的所有光线都被着色(或默认色)完毕后,一副图像就完成了。这就是光线追踪的核心基本原理及其名称的来历。当我们能够在 1 秒钟内以超过 25 帧以上的速度实时来完成光线追踪渲染过程时,根据动画原理,我们就可以看到连续的画面了(有人称之为 4D 技术),这样一来就被称为实时光线追踪渲染了。如果再给这个过程加上人机交互及其他多媒体手段,那么 3D 游戏、 3D 高仿真设计等等也就可以实现了。其实从另一个方面来说,即使我们可能不了解实时光线追踪渲染,但是对于光线追踪渲染应该很不陌生了,因为几乎所有的运用了特效的电影作品都使用的是光线追踪渲染,并且大多数都是基于 CPU 进行渲染的,这些特效的渲染不是实时的,而是一帧画面就需要渲染几小时甚至几天时间,同时其渲染细腻程度也是我们现在所说的实时光线追踪渲染还无法达到的。

补充:

●图形渲染(Rendering)一般有两种方法:光线追踪和光栅化

●光栅化是将一个图元转变为一个二维图像的过程。二维图像上每个点都包含了颜色、深度和纹理数据。将该点和相关信息叫做一个片元(fragment)。

●光栅化的目的,是找出一个几何单元(比如三角形)所覆盖的像素。

●粗略地讲:你模型的那些顶点在经过各种矩阵变换后也仅仅是顶点。而由顶点构成的三角形要在屏幕上显示出来,除了需要三个顶点的信息以外,还需要确定构成这个三角形的所有像素的信息。光栅化就是干这个的。

上一篇下一篇

猜你喜欢

热点阅读