本篇文章7826字,读完约20分钟
实时渲染视频级计算机三维图形是图形行业的终极目标,与目前普遍采用的光栅化渲染技术相比,光线跟踪一般被视为视觉技术的未来方向,几乎是真实的电影水平 光线跟踪算法是实现这个目标的圣杯,经过几十年的努力,终于接近这个理想。
美丽的cg效果图和真相,我想大家对这些都不知道。 虽然大家不知道游戏中水面等的场景,但是它产生的画面效果似乎永远都不那么现实。 无论人们如何努力,其画面始终是动画,与人们心中的“电影级画质”总是有那么大的不同。 这是因为我们现在的游戏无一例外都采用了光栅化算法。 在这些电影中使用了光线跟踪算法。 此算法也无一例外地用于3dsmax、maya、softimagexsi等软件中。
光线跟踪技术是从几何光学的通用技术中派生出来的。 通过跟踪光与物体表面的相互作用,得到光通过路径的模型。
/ S2// S2 /
简单来说,3d技术中的光线跟踪算法首先假设屏幕内的世界是真实的,显示器是透明的玻璃,在屏幕内发现并跟踪能够透过人眼的光线
说到光线跟踪,不得不提到光栅化。
/ S2/]光栅化是指将场景模型的数学描述及其彩色新闻转换为计算机屏幕上的像素的过程。 光栅化允许将几何图形转换为屏幕上的像素。
direct3d使用扫描线的渲染来生成像素。 顶点解析完成后,所有图元都将转换到屏幕空之间,屏幕空之间的单位为像素。 点、线和三角形通过一系列光栅规则转换为像素。 光栅规则定义了一组统一的规则来生成像素。 光栅生成的像素通常具有一组深度值、RGB漫反射颜色、RGB特殊颜色、雾系数和纹理坐标。 这些值将传递到管线下一阶段的像素解析,并注入到渲染目标中。 实时3d渲染程序需要对客户的实时操作做出快速响应,因此通常要求每秒至少20帧以上的渲染速度。 因此,高效的“光栅化”渲染技术成为当今最流行的3d即时图像处理技术。 但是,栅格化的缺点也很明显。 那就是,无法计算实际的光线,很多地方会变形。
光线跟踪算法分为前向跟踪算法和反向跟踪算法两种。
其中,正向跟踪算法是光源发出的光在环境场景之间多次反射、透射,投影到场景表面,最终进入人眼的自然光线跟踪方法。
逆跟踪算法相反,它是从注意者的角度,只跟踪可以看到哪个注意者的表面投射光。 目前,所有三维制作软件的光线跟踪算法都使用反向跟踪法。 这是因为可以最大限度地节约计算机的系统资源,而不会导致渲染质量下降。
在现实世界中,要击中物体表面,有折射、反射、吸收三种情况。 光被不同的地方反射,通过选择性吸收,光谱发生变化,反复多次反射和折射,最终进入我们自己的眼睛。 光线跟踪技术就是模拟这个过程。
在渲染中,光线跟踪为每个像素提供几到几十束光线。 然后,光线在场景中传播,与场景中的所有物体相交。 另一方面,由于场景中的物体预先由开发者设定了属性,因此光束会发生各种变化,最终凝聚在屏幕上。 会被我们感知。
反向跟踪法是计算最终射入我们眼睛的光的反向光路,即眼睛-物体-光源的过程。 因为这样可以省去很多不需要计算的光路,在光线跟踪中并非所有的光线都是有用的。 虽然最终有些光不进入我们自己的眼睛,但是继续计算会浪费不必要的计算资源。 在光线跟踪中,光也同样分类,假设看不到一条主光线,系统将放弃整个光路,看到后将开始计算辅助光线[反射、折射、阴影]。 主光线判别完成后,辅助光线的其他属性(透明度、颜色)操作也差不多完成了。
光线跟踪算法最初是在1968年由arthur appel提出的,当时也称为“ray casting”。
1979年,turner whitted带来了递归光线跟踪算法“recursive raytracing algorithm”的新的研究突破。
1984年,carpenter等人发表了分布式光线跟踪的论文“分布式光线跟踪”,影响非常大。 发展到今天,大部分照片级渲染系统都基于光线跟踪算法。 基本的光线跟踪算法并不难。 我想大部分计算机图形学的同学都写过,难的是如何优化提高效率。
说到皮克斯,连《汽车总动员》都开始大规模采用光线追踪。 皮克斯的《汽车总动员》于2006年6月在美国上映,至今已有8年多的时间。 皮克斯基于Reyes ( renderseverythingyoueversaw ),一直采用自己公司开发的渲染器renderman。
reyes是另一种渲染算法,对于解决许多复杂的场景非常有效。
1984年皮克斯考虑光线跟踪,但最终反复采用了reyes。 根据关于《汽车总动员》的论文《raytracing for the movie“cars”》,5年前他们开始了向renderman添加光线跟踪功能的项目,同期的《汽车总动员》正在制作中。 因为reyes在解决反射强的汽车表面材质方面有些棘手,所以只能进行环境测绘,但不能成为平滑闪耀的质感。 这就是光线跟踪擅长的事情。
以下是几个采用光线跟踪的主要渲染器。
mentalray,由nvidia制造。 已集成到3d建模软件autodesk的maya和3ds max中。
arnold近年来越来越流行,sony pictures imageworks、数字域、ilm、luma pictures等知名特效企业都采用了这种渲染器。
vray比arnold更常见,近年来也变得疯狂。 目前有处理器版本和gpu版本( v-ray和v-ray rtgpu )。
光线跟踪现在多用于电影特效的静止图像渲染,但为什么对大众影响最大的3d图形游戏行业明显没有光线跟踪的痕迹呢?
光线跟踪不能长时间应用于游戏领域的原因很简单。 是那个可怕的计算量。 即使在使用反向跟踪算法之后也是如此。
据intel称,要通过光线跟踪达到现代游戏的画质,并能顺利运行的帧数,每秒需要计算约10亿条光线。 这个数字每帧包含约30束不同的光,分别用于计算着色、光和其他各种特殊效果。 根据该公式,对于入门级分辨率(如1024×768 ),总共786432像素,乘以每像素30束光和每秒60帧,就需要能够计算每秒141.5亿束光的硬件。
而且即使到了今天,顶级酷睿I 7每秒能解决的光也不到几千支。 而且这只是运算量的差。 因为光线跟踪的每一条辅助光线都没有任何关联性。 这意味着包括各种缓存技术在内的“投机方法”没有用。 所有计算光线跟踪辅助光线的计算都直接加载到存储器中,这是对内存延迟和带宽的惊人考验。 图形内存的容量也是一大难题,需要十几gb到几十gb的图形内存。
虽然在游戏行业引入光线跟踪是一个很大的课题,但是研究机构和图形解决方案制造商正在致力于这项技术。 光线跟踪需要实时渲染才能应用于游戏,这就是所谓的实时光线跟踪。
之前已经提到了光线跟踪算法,那是如何实时的?
6fps左右就会产生互动性。 15fps可以说是实时的。 30fps不会太卡住。 60fps给人一种平滑流畅的感觉。 72fps再往上的肉眼已经看不出区别了。
实时是指每秒需要30帧以上的渲染。 否则无法满足画面流畅度的要求,没有实用价值。 实时光线跟踪的难点在于场景多、噪声多,所需的实时渲染效果决定了扫描和交叉检测的庞大计算量。 (场景分割数据结构的重构和光与场景的交叉测试是两个主要的计算。
这是渲染行业和所有模拟计算行业的终极矛盾。 效率和质量的矛盾。
随着德国萨尔兰大学计算机图形学团队开发的openrt库的完成,光线跟踪技术应用于计算机游戏的实时渲染在理论上成为可能。
openrt函数库是萨尔兰大学计算机图形团队的实时光线跟踪项目。 openrt实时光线跟踪项目旨在将实时光线跟踪效果添加到3d游戏中。 该项目包括高效的光线跟踪解决核心和语法类似于当前opengl的openrt APP接口,客户程序员通过这一部分访问以前高效的光线跟踪解决核心的功能,从而实现游戏场景
萨尔兰大学除了开发了openrt函数库外,还设计了一种叫做——saarcor的实时光线跟踪的硬件架构。 saarcor研究小组在2005年的siggraph上展示了第一个实时光线跟踪加速器硬件——RPU ( RAY处理器)。
rpu与gpu一样,是完全可编程的体系结构,支持材质、几何体、照明等实时编程。
rpu除了以前就传来了gpu的效率之外,最引人注目的是支持光线跟踪技术。 采用与gpu相同的指令集。 因为这可以通过优化着色工艺来解决。
此外,由于集成了专用硬件单元,rpu可以支持递归函数调用和快速光线跟踪算法,并且在与递归光线跟踪算法相同的行上有效。 为了提高执行效率,rpu通常将四束光线打包解决,多线程计量的支持也保证了硬件资源的高效利用。
Saarc or Siggraph 2005上展示的rpu原型机由fpga构建,频率为66mhz,内存带宽也只有350mb/s,但多亏了特别设计的专用架构,
要知道,这样的性能充分代表了rpu架构在解决光线跟踪方面的效率,nv当时的高端gpu拥有rpu样机的23倍浮点运算能力和100倍以上的带宽。
更令人兴奋的是,由于光线跟踪特别适合并行解决的天生特征,rpu可以像cpu一样使用多核架构,样机可以组合不同数量的fpga芯片。 例如,两张fpga可以提供单一fpga两倍的运算能力,但saarcor实验室已经测试了4FPGA的样机。
在saarcor展示rpu后不久,该研究计划的工作人员接触了ibm德国的技术人员,得到了拥有cell解决方案的工程样机。 在ibm技术人员的协助下,saarcor在短短两周内用这台机器实现了全屏实时光线跟踪渲染效果。 目前,saarcor的研究人员正在cinema 4d上以插件方式实现实时光线跟踪。 他们还透露了一条鲜为人知的消息: saarcor实际上得到了nvidia的2.5万美元赞助,而以前的fpga原型实际上是在nvidia的资助下进行的。 saarcor至今未能量产,后来saarcor项目被纳入了openrt光线跟踪开发项目。
十多年前的2004年,德国青年danielpohl将光线跟踪技术应用于电脑游戏作为学术研究项目。 因为id软件的开源,《quake3》成为了他的选择,开始移植。
他用openrt改造了那个渲染核心。 令人惊讶的是,用《quake3》之前流传的光栅渲染实现光线跟踪出乎意料地简单。 例如,每个像素的动态实时阴影只需要10行左右的代码指令来描述光线跟踪的模型。 光线跟踪技术的加入,刷新了整个游戏的照明效果。 画面超过了很多后来发表的新游戏。 在接下来的几年里,danielpohl将观察力放在了《quake4》、《quakewar》等游戏上,试图通过这些游戏实现实时光线跟踪算法。 有兴趣的是,danielpohl的实时光线跟踪技术完全不依赖gpu,只是借助多核cpu的运算能力。 因此,可以看出,danielpohl之后被录用为intel高薪,正式加入“视觉运算部”,intel决心实现实时光线跟踪。
英特尔要进入专用显卡市场已经不是一两天了。 上世纪末,英特尔曾推出i740这一独显。 但是,只有这些。 想要回归显卡市场的intel想要在光线跟踪上对抗amd和nvidia,因此研究光线跟踪的天才程序员danielpohl拜师intel,推进了显卡的开发。
在2007年的idf上,intel正式公开了自己的显卡——代号“larrabee”的神秘面纱,larrabee完成了其万亿次的运算项目“tera-scalabee” 英特尔首席执行官eddavis (也是英特尔第一个实用级万亿次运算器)的演示表明,larrabee基于可编程的体系结构,是为高端通用计算平台设计的 它至少支持16枚内核、1.7-2.5ghz的频率、150瓦以上的功耗、jpeg纹理、物理加速、抗锯齿、抗锯齿、增强的ai和光线跟踪等特征。
Larrabee特别适合光线跟踪计算,因为天生的cpu从以前开始就继承了体系结构血统。
在idf2007的技术演示中,英特尔也大力宣传了larrabee在实时光线跟踪行业取得的最新成果。 但是,larrabee并不像想象的那样顺利。 在2009年的idf大赛上,我们看到了新的酷睿I 7系列、凌动双核,但larrabee被抛在脑后。 非常遗憾。 、
作为一个半路死亡的产品,larrabee在很多人心中应该一直保存着一些神秘的颜色,但是最后这个项目做不下去了,还是对实时光线跟踪的迅速发展感到有些遗憾。 众所周知,最后的larrabee技术用于“mic”至强PHi协处理器,成为intel高性能计算行业和gpu制造商的加速器卡竞争的武器。
larrabee项目刚刚中途死亡后,实时光线跟踪技术似乎还不够完善。 但是,2009年3月,无名初创企业causticgraphics突然浮出水面,带来了划时代的实时光线跟踪软硬件处理方案,据说可以提高200倍
其管理团队聚集了苹果、autodesk、ati、intel、nvidia等行业巨头的技术和图形专家,三位创始人james mccombe、luke peterson、ryan salsbury曾是苹果公司的创始人。
causticgraphics声称一举解决了光线跟踪算法的低效问题。
根据这家企业的说法,他们的算法之所以独特,是因为他们处理的是以前流传下来的光线跟踪算法偏向随机性的问题。 新算法大大提高了光线跟踪计算的局部性,但完成这部分算法需要协处理器。 causticgraphics的工程师们非常明智。 他们对硬件的定位只是专注于光线跟踪计算的协作者,没有比这更愚蠢的事情了。 明暗处理等以前流传的光栅化的解决仍然由gpu进行。
另外,在2009年8月的siggraph会议上,显卡解决方案巨头nvidia发表了基于nvidia gpu的实时光线跟踪加速器optix。
从功能上讲,optix引擎与前面介绍的openrt相似,都是一组光线跟踪的函数库。 nvidia在介绍中表示,optix引擎基于cuda架构,开发者可以用c语言编程,创建基于gpu运算的光线跟踪APP。 optix使用的光线跟踪模型与saarcor的openrt引擎相同,或者有充分的理由相信optix不过是openrt的nvidia商用化版本。 但是,光线跟踪算法与以前传入的光栅化算法有很大不同,因此现有simd架构的gpu内核在计算光线跟踪算法时效率很低,完全使用以前传入的gpu进行光线跟踪
另外,nvidia现在已经有了虚拟gpu技术,类似于云计算,不需要本地gpu,但是这个技术要进入大众市场需要花费应该还有很长的路要走。
很多人可能不知道,另一个在移动gpu行业呼风唤雨的隐形巨头imagination,其实正在努力拿起这张3d图像来解决皇冠上的珍珠。 但其方法出乎意料,年底突然收购了前面介绍的创业企业caustic graphics,年初推出了光线跟踪专用加速器卡,该产品仅与专业市场进行对比,并未引起业界关注,但在去年3月的gdc游戏开发者会议上, 据说imagination正式推出了新的“powervr wizard”GPU系列,能够为移动、嵌入式APP提供功耗级的高性能光线跟踪、图形和计算能力,但这次真的震撼了业界。 (
新系列的第一个成员是powervr gr6500,基于最新一代4阵列移动GPU电源日志设计,而powervr series则是
硬件优化可以分为使用gpu和simd的优化和专用的光线跟踪硬件。 前者是将软件算法与gpu和simd进行比较的优化,一些并行环境下的数学库函数和排序等其他基本算法也间接起到了加速的作用。 后者是利用专用硬件对光线跟踪中的独自的交叉检测、场景分割等部分进行优化,而g6500是采用后者的优化。 这些专用加速电路包括以下内容。
/ S2/]灯光数据主( ray data master )/s2/) :向主调度器提供灯光交互数据,准备着色器执行该数据,并确定灯光的最终数据属性。
/s2/]光线跟踪单元( ray tracing unit )/s2/] (固定函数)不可编程)执行光线跟踪队列,以统一光线的一致性和降低对带宽的要求。
/ S2/]场景级别生成器( scene hierarchy生成器) )/S2/) :加速动态物体的更新。
/ S2/]帧聚集缓存(帧缓存)/s2/) :提供对帧缓冲区的写入合并稀疏访问。
从芯片架构图中可以看到,这些设计都与gpu架构的其他模块有效集成、完美通信,生成实时、交互式的光线跟踪画面,不仅是移动、嵌入式平台 更重要的是,这些模块不会影响以前传递的图形管线的着色性能。 这是因为光线跟踪并不依赖着色器的浮点性能,它的效率是纯gpu计算或软件算法的高达100倍。
那么,powervr gr6500的光线跟踪性能如何?
imagination声称,以600mhz的频率每秒最多跟踪3亿束光线,进行240亿次节点测试,可以生成1亿个动态三角形。 因为还没有实体的芯片出现了,所以现在只有理论数值。 当时caustic graphics预测,完全光线跟踪的游戏引擎还需要等好几年,至少4、5年后,1920×1080的分辨率才能达到60fps的相对有效帧率。
当时是2009年,这两年正好是这个时期,相信凭借imagination的支持,性能将达到当时caustic graphics的预测水平,达到主流游戏的运行要求。
imagination还开发了跨平台openrl api,并发布了sdk以供开发人员参与。
据悉,openrl还在申请成为国际标准,希望成为像opengl这样的跨平台标准api。 当然,这个api也来自原来的caustic gl软件开发层caustic gl,由于创始人有非常强的opengl专业背景,caustic并不是独自开发专用的api套装,而是opengl,
openrl的最大特征允许开发人员像常规着色程序一样创建新的光线跟踪着色程序。 这样可以减轻程序员的负担,提高硬件效率。
开发者可以将openrl和其他图形api (如opengl3/3.1 )组合在一起,将来也可以与dx混合调用。 另一个感兴趣的特点是,openrl不专用于光线跟踪硬件加速电路,也支持gpu,因此在没有硬件加速电路的系统中,光线跟踪计算也可以交给gpu。 当然,效率和预想的大不相同。
从以上介绍可以看出,imagination将causticgraphics的硬件和软件技术完全集成到自己的gpu中,从而提供了具有竞争力的实时光线跟踪性能。 在保持低功耗和低价格特点的同时,对整个图形市场产生非凡的影响。
移动gpu首次走在桌面gpu的前面。 我相信这将对imagination扩大整体gpu市场占有率产生巨大的推动作用。 imagination还可以利用这一点进入被nv和amd把持的台式机和专业图形市场。
当时,arm解决方案由于性能较差,只能退出深耕移动和嵌入式市场,但出乎意料地取得了巨大成功,成为现代最具影响力的解决方案指令集架构,进入台式机和服务器市场,imagination也开始了这一逆袭。
来源:UI科技日报
标题:“视觉技术的圣杯:光线追踪怎么再现真实世界?”
地址:http://www.ulahighschool.com/uiitzx/1489.html