基于VR硬件架构的实时全局光照解决方法与流程

文档序号:18002115发布日期:2019-06-25 22:58阅读:665来源:国知局
基于VR硬件架构的实时全局光照解决方法与流程

本发明涉及一种vr架构技术,更具体的说,它涉及一种基于vr硬件架构的实时全局光照解决方法。



背景技术:

3d图形和可视化应用程序中的全局光照对于画面的表现力非常重要,全局光照效果一般包括环境光遮蔽,反射,色溢等等,由于全局光照需要计算光线的多次反弹,对于实时应用来说计算负担很大,因此大部分程序使用的是光照贴图,反射球等静态的全局光照效果近似。而实时全局光照算法目前主流的方法如ssao(屏幕空间环境遮蔽)等只能实现很少的一部分全局光照效果、

当前在实时领域能够应用的算法主要是通过屏幕空间的方法,减少计算量,将3d空间的光线反弹和求交问题简化为2d,但是这些算法往往十分不精确并且需要大量的调参技巧,相比于所得到的效果来看,开销不低。并且基于屏幕空间,很难模拟出准确的漫反射反弹的色溢效果。

因为真正的全局光照太难计算,所以很多方法抛弃了真正实时计算全局光照的方法,转而求解某些限制条件下的光照,例如业界比较著名的englighten中间件,就是通过假设应用程序运行时场景不变,在离线时运算好场景几何体相互之前的可见性系数,然后在在线时通过辐射度算法求解,从而实现在光源可以移动的情况下的漫反射全局光照,但是该方法不能针对动态场景进行应用,同时无法处理镜面反射,高光反射的情况。

2012年,nvdia和法国inria提出了基于体素的全局光照方案,该方案基于动态的将几何场景转化为体素,然后在屏幕空间通过对体素进行conetracing(光锥追踪)的方法实现全局光照。该方法能够实时的响应光源和几何的动态切换,同时由于最后的conetracing是在屏幕空间完成,因此速度可以做到实时,并且能够同时实现漫反射全局光照和镜面反射的全局光照,但是该方法需要在gpu中存储场景的体素纹理,同时要实时的对全场景几何做处理,对于gpu的压力非常大,在渲染任务本身就很重的vr系统中几乎很难做到实际应用。



技术实现要素:

针对现有技术存在的不足,本发明的目的在于提供一种大幅度的提高vr应用的画面物理真实感的基于vr硬件架构的实时全局光照解决方法。

为实现上述目的,本发明提供了如下技术方案:一种基于vr硬件架构的实时全局光照解决方法,其特征在于:其步骤为:

(1)cpu体素化过程,将场景面片进行体素化,同时将体素信息构造为八叉树;

(2)光照注入过程,将场景光照信息注入处理;

(3)conetracing过程,将包含光照信息的3d纹理,进行conetracing计算得到全局光照结果。

本发明进一步设置为:cpu体素化过程的步骤为:

1、在cpu上通过光栅化进行体素化,并进行八叉树构建;

2、通过构建的八叉树,进行内存中建立节点列表;

3、在八叉树的节点中,存放当前的物体网格颜色和法向量。

本发明进一步设置为:光照注入过程的步骤为:

1、通过shadowmap阴影贴图绘制流程,进行灯光视角绘制场景;

2、记录每个阴影贴图像素的世界空间坐标;

3、使用computershader,根据世界坐标将辐照度值写入到已经构建的八叉树数据结构中的每个子节点;

4、通过八叉树的数据结构以纹理的形式由cpu传到gpu。

本发明进一步设置为:conetracing过程的步骤为:

1、接收包含光照信息的3d纹理;

2、通过反算,计算出信息中的像素世界空间坐标;

3、通过像素世界空间坐标,找到相应的体素,进行conetracing的计算;

本发明进一步设置为:conetracing包括diffuse和specular两种。

本发明进一步设置为:对于全局光照中的漫反射全局光照,通过沿着半球空间均匀发射若干个cone,

每个cone根据自身的方向采样3d纹理,根据八叉树数据结构,得到一个当前像素的辐照度均值。

本发明进一步设置为:对于镜面反射或者高光反射的cone,根据物体表面的材质属性,选择一个方向反射一个specularcone,cone的范围要比diffusecone小。

本发明具有下述优点:解决了vr系统的3d图形应用渲染中的全局光照实时运算问题,通过本发明所提供的解决方案,vr应用可以实现基于实时全局光照的一系列更具真实感的效果,动态的柔和环境光遮蔽,镜面和高光反射,昼夜动态切换等,可以大幅度的提高vr应用的画面物理真实感;

基于体素化场景和conetracing技术在屏幕空间模拟实时的全局光照效果,同时,考虑vr硬件的性能要求特性做了多处优化,使得算法方案运行时负载较小。

附图说明

图1为本发明的体素化节点的数据结构示意图;

图2为本发明的半球空间示意图;

图3为本发明的体素化构建算法过程图;

图4为本发明的conetracing算法示意图;

图5为本发明的算法总体示意图。

具体实施方式

参照图1至5所示,本实施例的一种基于vr硬件架构的实时全局光照解决方法,其步骤为:

(1)cpu体素化过程,将场景面片进行体素化,同时将体素信息构造为八叉树;

(2)光照注入过程,将场景光照信息注入处理;

(3)conetracing过程,将包含光照信息的3d纹理,进行conetracing计算得到全局光照结果。

cpu体素化过程的步骤为:

1、在cpu上通过光栅化进行体素化,并进行八叉树构建;

2、通过构建的八叉树,进行内存中建立节点列表;

3、在八叉树的节点中,存放当前的物体网格颜色和法向量。

光照注入过程的步骤为:

1、通过shadowmap阴影贴图绘制流程,进行灯光视角绘制场景;

2、记录每个阴影贴图像素的世界空间坐标;

3、使用computershader,根据世界坐标将辐照度值写入到已经构建的八叉树数据结构中的每个子节点;

4、通过八叉树的数据结构以纹理的形式由cpu传到gpu。

conetracing过程的步骤为:

1、接收包含光照信息的3d纹理;

2、通过反算,计算出信息中的像素世界空间坐标;

3、通过像素世界空间坐标,找到相应的体素,进行conetracing的计算;

conetracing包括diffuse和specular两种。

对于全局光照中的漫反射全局光照,通过沿着半球空间均匀发射若干个cone,

每个cone根据自身的方向采样3d纹理,根据八叉树数据结构,得到一个当前像素的辐照度均值。

对于镜面反射或者高光反射的cone,根据物体表面的材质属性,选择一个方向反射一个specularcone,cone的范围要比diffusecone小。

通过采用上述技术方案,分为两部分实现,既cpu实现代码和gpu实现代码,其中cpu部分代码负责场景面片的体素化过程,同时将体素信息构造为八叉树,gpu部分负责灯光信息注入,和conetracing出最后结果部分

详细步骤:将体素化和八叉树构建的过程放在cpu端,八叉树的构建目标是最终在内存中建立一个节点的列表,一个节点的数据结构示意如图1;

在一个八叉树的节点中,一般会存放当前的物体网格颜色和法向量,这样可以便于之后计算光照信息。使用八叉树存储体素信息可以节省大量的存储空间,由于光照计算和体素化一个在cpu进行一个在gpu进行,因此体素化可以和渲染异步进行,一般情况下体素化只有在场景几何发生变化,或者加载/卸载场景时进行,从而最大程度上避免了因为体素化过程造成的app本身的卡顿问题。

光照注入过程:在这部分中需要存储和计算的是从灯光视角的场景光照信息,这个过程本方案使用的是显卡gpu的通用计算管线完成,首先从灯光视角绘制场景,也就是通常的shadowmap阴影贴图绘制流程,但是区别在于记录下每个阴影贴图像素的世界空间坐标,之后,本方案会使用一个computershader,根据世界坐标将辐照度值去写入到已经构建好的八叉树数据结构中的每个叶子节点,这个八叉树的数据结构会以纹理的形式由cpu传到gpu。由于通用计算管线和传统的渲染流水线在大部分当今显卡上都是异步进行的,因此光照注入也可以和渲染异步进行。

conetracing过程:当拿到包含光照信息的3d纹理,就可以进行conetracing计算最后的全局光照结果了,conetracing实质上是一个全屏幕的后处理过程,对于屏幕上的每一个像素,可以通过反算,或者在之前的渲染过程中记录等方法,计算出它的世界空间坐标,然后找到相应的体素,进行conetracing的计算,cone一般分为diffuse和specular两种,对于全局光照通常需要的漫反射全局光照来说,会沿着半球空间均匀发射若干个cone(如图2),每个cone都会根据自身的方向去采样3d纹理,也就是的八叉树数据结构,实际上就是一个mip/map采样的过程,最后得到一个当前像素的辐照度均值。

对于镜面反射或者高光反射的cone,根据物体表面的材质属性,也就是brdf(双向反射分布函数)选择一个方向反射一个specularcone,这个cone的范围要比diffusecone小的多,实验表明一个specularcone,就能得到非常好的效果。

此外,为了优化算法方案本身的性能,由于全局光照本身的低频特性,本方案在进行conetrace的时候不需要对整个屏幕进行计算,实验表明,只需要对1/4屏幕分辨率的像素进行计算,然后扩大到全屏幕,一样可以得到非常好的效果。

本技术方案实现之后可以实时计算昼夜切换等的全局光照效果,同时本方案在次高端显卡上只需要3-5ms的gpu时间,对于当前的vr硬件架构来说完全实时可用,并且有多种参数可以调节,可以很好的实现性能和效率上的平衡。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1