基于Metal 的实时光线追踪研究

2022-06-23 06:09彭浩宇廖文诗
无线互联科技 2022年8期
关键词:缓冲区离线内核

彭浩宇,廖文诗,陈 超

(重庆科技学院智能技术与工程学院,重庆 401331)

0 引言

渲染的研究目标是对渲染方程进行近似求解,近似求解所得到的结果分为有偏差和无偏差,因此也产生了两种不同的研究方向。 其中,无偏差的近似求解被称作离线渲染,有偏差的近似求解被称作实时渲染。在实时渲染领域常用封装好的图形API 或图形引擎实现,将离线渲染算法结合至实时渲染下的图形API 中,是真实感图形学目前一个热门的研究方向。

1 渲染技术背景介绍

1.1 离线渲染

离线渲染中最常使用的全局光照模型最早起源于1968 年,Arthur[1]在他的文章中提出了光线投射(Ray Casting)算法,其具体思路是从摄像机出发,连接屏幕上的一个像素构成光线,与场景中第一个挡住光线的物体相交,它表面的颜色即为像素的颜色。 由于该算法没有将反射、折射等多光源反馈信息吸收进来,于是在1979 年,Whitted[2]提出了经典的光线追踪方法,在光线投射的基础上让光线与物体继续交互,进一步产生反射、折射以及散射等效果,直到光线强度减弱到一定程度或光线逃逸出场景。 该算法极大地提高了光照模型的真实感,为后续真实感图形学的研究奠定了基础。

1.2 实时渲染

实时渲染中需要考虑到渲染的实时性,受制于硬件的性能,离线渲染常用的众多算法无法运用在实时渲染领域当中。 同时,实时渲染的操作都是基于光栅化的前提下对光照方程进行求解,并且将场景内的间接光照放在预计算模块,所以很难实时的渲染出高精度的光照模型。 但实时渲染的应用多数存在于游戏公司当中,如国外的Epic 和EA,国内的网易、米哈游等。在游戏开发领域,常常使用例如Unity3D 之类的游戏引擎进行实时渲染,一方面降低了图形程序的编程难度,同时也封装了接触底层图形所需要控制的内存管理系统。

1.3 图形API

图形API 的本质是一套对接硬件底层的图形封装接口函数库,目的是直接调用显卡驱动使显卡能够渲染出用户可见的应用程序。 图形程序员无须考虑底层的硬件需求,如寄存器的操作,可以直接使用特定平台的API 进行图形编程。 常见的图形API 包含:多平台的OpenGL,最初由 Silicon Graphics Inc(SGI)发布,后由非盈利团队Khronos 维护;微软发布的DirectX 仅限于Windows 环境下,目前已推出DirectX12,在英伟达显卡的加持下支持高效率的实时光线追踪[3];基于OpenGL 的OpenGL ES,最初为了嵌入式设备而推出,现大量用于安卓平台;基于OpenGL ES 的WebGL,主要用于网页 Web 端;苹果公司推出的 Metal,在 WWDC 2015 上,苹果首次提出了Metal,目的是一套图形接口可用于苹果的多设备平台(包含iPhone,iPad,Mac,Apple TV,Apple Watch),打造无缝切换的生态体验。在WWDC2020 上,苹果也提出了实时光线追踪的概念,并且支持Metal 的使用。

2 基于Metal 的光线追踪实验

2.1 光线追踪算法

光线追踪算法是真实感图形学当中最常用的算法之一,它用于模拟每一道光线从而能产生反射、柔化阴影和间接光照等效果。 光线追踪的原理是模拟一个摄像机,通过摄像机发射的光源射线来获取场景信息,每一束光线从摄像机发射到场景内,发射的光线与场景内的几何物体相交从而得到的交点均代表光线经过一个表面后反弹的结果,光线反弹的数量和方向则决定了物体的外观。 同时,光线在经过反弹操作后可以生成额外的光线,能够进一步渲染更加逼真的场景(见图1)。

图1 光线追踪原理

2.2 基于Metal 图形API

在Metal Performance Shaders(MPS)框架下,首先启动一个内核函数用于生成光线的初始集,并且将这些数据集写入光线缓冲区内,再利用MPSRayIntersector类使光线与场景相交产生交点。 其中,Metal 采用求交器记录这些交点,通过求交器将求交结果写入下一个内存缓冲区,之后便可以启用着色器内核函数读取求交数据并进行着色操作。 额外的光线可以写回光线缓冲区,再反复循环这两个内核函数以模拟光线反弹,最后输出场景图像。

通过图2 可以看出,在MPS 框架内,会把代码拆分为单独的内核函数,同时还需要经由内存传递光线和求交数据。 但是在Metal 实时光线追踪框架下,求交器的对象可以直接在着色语言中使用,通过将图2 上方的内核函数模块组合成一个Metal 内核函数,并且不需要将光线传递的光源信息在内核函数之间传输,省去了光线及求交数据的缓冲区,即不需要靠读写内存来传递光线和求交数据。 图2 上方的外层循环便可以用图3 当中Metal 内核函数的简单循环来代替。

图2 基础光线追踪MPS

图3 实时光线追踪

2.3 实验效果实现

以WWDC20 为例,本文在MacOS 操作系统 Metal和Xcode13 开发环境下对基础的光照模型进行了实验。 实验对基础光照模型采取了9 种不同类型的光照模拟,每种光照条件下所渲染出的模型都具有不同的渲染效果,并且渲染所需的时间极短及所渲染的效果精度极高,从而验证了本设计能够很好地完成实时光线追踪模拟。

3 结语

该实验由基础模型至基本完成渲染的时间不足0.5 秒,通过对比渲染了5 分钟的离线渲染模型,即得出能够以较短的时间实时地渲染出接近高精度光照模型的结论。 通过实验的结果可以看出,基于Metal 实时光线追踪下的模型场景具备较高真实度的还原效果。

猜你喜欢
缓冲区离线内核
异步电机离线参数辨识方法
强化『高新』内核 打造农业『硅谷』
呼吸阀离线检验工艺与评定探讨
浅谈ATC离线基础数据的准备
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
离线富集-HPLC法同时测定氨咖黄敏胶囊中5种合成色素
嫩江重要省界缓冲区水质单因子评价法研究
关键链技术缓冲区的确定方法研究
地理信息系统绘图缓冲区技术设计与实现