当前位置: 首页 > 专利查询>北京大学专利>正文

基于共享显存优化的光子收集方法和光子映射渲染方法技术

技术编号:29215413 阅读:17 留言:0更新日期:2021-07-10 00:53
本发明专利技术公开了一种基于共享显存优化的光子收集方法和光子映射渲染方法。本发明专利技术的光子收集方法,其步骤包括:1)将整个待渲染三维场景划分为哈希网格;2)光源发射光子,当光子与场景中的漫反射表面相交时,记录该光子的位置、能量、入射方向信息;3)根据记录中光子的位置,计算对应的哈希值,按照哈希值从小到大的顺序将光子重新排序并生成一个索引数组;4)从视点出发,向每一个像素发射光线,计算路径上首个与场景漫反射表面的交点p并记录交点p的位置、入射方向;5)将需要计算的像素划分成组并为每一像素分配一线程;6)判断一个组内像素的命中点是否位于同一个栅格内,如果位于同一栅格内,则使用共享显存进行加速。则使用共享显存进行加速。则使用共享显存进行加速。

【技术实现步骤摘要】
基于共享显存优化的光子收集方法和光子映射渲染方法


[0001]本专利技术属于软件
,涉及一种光子映射中基于共享显存优化的光子收集方法和光子映射渲染方法。

技术介绍

[0002]光线追踪是解决高逼真度渲染中的求解全局光照明问题的一种方案,但是其与生俱来的计算复杂度,要求必须采用蒙特卡洛方法才能对复杂的表面材质的光照进行模拟。而蒙特卡洛方法具有的缺陷是当采样数不足时的噪点问题,即使使用强大的神经网络降噪模型,仍然会由于信息量不足而直接难以获得很好的效果。
[0003]光子映射算法是光线追踪算法诸多变种中的一种。最早来源于反向光线追踪,然后Jensen使用k最近邻估计对算法进行了改进(Jensen H.W.:Global illumination using photon maps.In Rendering Techniques 96.Springer,1996,pp.21

30)。光子映射是一种双通道方法(two pass),第一个通道称为光子追踪通道(photontracingpass),此通道中光源向场景发射携带有能量(也称为光通量)的光子,然后这些光子在场景中与表面进行发生相互作用。光子会以一定的概率在相交的非光滑的表面上停留并被记录,并存储在被称为光子图的数据结构中。第二个通道称为渲染通道,从摄像机向场景中发射光线,在交点处使用光子图中邻近的光子来进行亮度的估算(这个过程被称为光子密度估计)。与蒙特卡罗光线追踪的缺陷不同,光子映射方法容易产生偏差,也就是一种模糊的现象。但是在一些对速度要求更高的应用中,例如面向沉浸式虚拟现实(VR)的应用中,由于虚拟现实头盔中的显示眼镜距离眼睛非常近(也就是属于一种近眼显示设备),人眼的视觉系统对噪声的敏感度高于对模糊的敏感度。因此传统的光子映射方法虽然也是一种离线的渲染方法,但是该方法在降低渲染质量的条件下(引入一定的模糊),具有显著提升速度的潜力,因此可应用于那些对速度要求高但是却允许一定程度的画质模糊的应用系统。针对这种对渲染速度上的应用需求,本专利技术采用光子映射这种真实感渲染的方式来避免像素级别的噪点,获得全局光照明渲染的并提升视觉效果,同时获得较优的渲染速度。

技术实现思路

[0004]针对现有技术中存在的技术问题,本专利技术的目的在于提供一种光子映射中基于共享显存优化的光子收集方法。
[0005]面向光子映射方法中的光子追踪(photon tracing)和光子收集(photon collection)等步骤,本专利技术提出了一种显存中基于哈希网格的光子数据的存储结构、索引和相应的基于共享显存的相邻像素快速KNN搜索光子的方法。本专利技术设计了一种基于共享显存的快速光子数据访问方法以利于在进行KNN搜索方法时的光子快速收集,本专利技术方法基于如下两个事实:第一,相邻像素的光子收集过程可能会访问相同的区域;第二,硬件设备上的共享显存的访问比全局显存要快得多。方法的主要思路是将所有的渲染成像平面上的像素划分成组,判断属于同一个组的像素是否会访问相同的区域,如果是,这些像素会分
工,将全局显存中的一部分光子加载到共享显存中,然后各自访问共享显存进行计算,整个过程将持续多次直到区域内所有的光子都被加载过。
[0006]本专利技术的主要流程为:
[0007]1)将整个待渲染三维场景划分为哈希网格;
[0008]2)光源发射光子,追踪光子在场景中的遍历过程,当光子与场景中的漫反射表面相交的时候,记录下光子的位置、能量、入射方向等信息;
[0009]3)根据记录中光子的位置,计算对应的哈希值,按照哈希值从小到大的顺序将光子重新排序,同时生成一个索引数组;
[0010]4)从视点发射光线,追踪它在场景中的遍历过程,计算路径上首个和场景漫反射表面的交点p;
[0011]5)将像素划分成组,组内进行基于共享显存的密度估计,最终计算每个像素对应的辐射亮度(光照计算)并得到渲染的图像。
[0012]本专利技术的技术方案为:
[0013]一种光子映射中基于共享显存优化的光子收集方法,其步骤包括:
[0014]1)将整个待渲染三维场景划分为哈希网格;
[0015]2)光源发射光子,追踪光子在场景中的遍历过程,当光子与场景中的漫反射表面相交时,记录该光子的位置、能量、入射方向信息;
[0016]3)根据记录中光子的位置,计算对应的哈希值,按照哈希值从小到大的顺序将光子重新排序并生成一个索引数组;
[0017]4)从视点出发,向每一个像素发射光线,追踪该光线在场景中的遍历过程,计算路径上首个与场景漫反射表面的交点p并记录交点p的位置、入射方向;
[0018]5)将需要计算的像素划分成组并为每一像素分配一线程;
[0019]6)判断一个组内像素的命中点是否位于同一个栅格内,如果位于同一栅格内,则该组对应的线程组访问相同的显存区间,使用共享显存进行加速:将全局显存中的光子信息加载到共享显存内,在加载完毕后进行一次线程的同步操作,然后每个线程以循环的方式遍历访问位于共享显存内的所有光子,完成光子收集。
[0020]进一步的,步骤6)中,如果一个组内像素的命中点不位于同一栅格内,则该组对应的线程组中各线程按照传统流程进行对应像素的计算,完成光子收集。
[0021]进一步的,判断一个组内像素的命中点是否位于同一个栅格内的方法为:首先设置两个共享变量hashValue和flag;hashValue由该组对应的线程组内的0号线程进行初始化,其值为0号线程所对应像素的命中点所处的栅格编号;flag由0号线程进行初始化,其值为0;在初始化结束后,对该线程组内的线程进行一次同步;然后该线程组内每个线程计算自己所对应像素的命中点所处的栅格编号,并与hashValue进行比较,如果二者不相等,则判定当前线程和0号线程命中的是两个不同的栅格,将flag设置为1进行标记。
[0022]进一步的,步骤6)中,使用共享显存进行加速,完成光子收集的方法为:
[0023]61)将全局显存中的光子信息分批加载到共享显存内;在每一批次加载过程中,每一个线程从全局显存中加载m个光子到共享显存中,在各线程完成同步操作之后,线程访问共享显存中的光子;其中线程组中一共group size个线程,共享显存的大小为能够容纳m*group size个光子;
[0024]62)每个线程维护一个大小为k的堆,用于保存距离当前线程对应像素的命中点最近的k个光子;每次当线程从共享显存中获取一个光子的时候,如果当前堆中光子的数量不到k,那么将新访问到的光子插入堆中;如果堆中已经包含了k个光子,并且新访问到的光子比堆中距离最远的光子要近,则删除堆中最远的光子,然后将新访问到的光子插入堆中;
[0025]63)所有批次加载完成后,该线程组内各线程的堆中保存的光子集合为对应像素的光子集合。
[0026]进一步的,将整个待渲染三维场景划分为哈希网格的方法为:首先生成待渲染三维场景的包围盒,将栅格网的原本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种光子映射中基于共享显存优化的光子收集方法,其步骤包括:1)将整个待渲染三维场景划分为哈希网格;2)光源发射光子,追踪光子在场景中的遍历过程,当光子与场景中的漫反射表面相交时,记录该光子的位置、能量、入射方向信息;3)根据记录中光子的位置,计算对应的哈希值,按照哈希值从小到大的顺序将光子重新排序并生成一个索引数组;4)从视点出发,向每一个像素发射光线,追踪该光线在场景中的遍历过程,计算路径上首个与场景漫反射表面的交点p并记录交点p的位置、入射方向;5)将需要计算的像素划分成组并为每一像素分配一线程;6)判断一个组内像素的命中点是否位于同一个栅格内,如果位于同一栅格内,则该组对应的线程组访问相同的显存区间,使用共享显存进行加速:将全局显存中的光子信息加载到共享显存内,在加载完毕后进行一次线程的同步操作,然后每个线程以循环的方式遍历访问位于共享显存内的所有光子,完成光子收集。2.如权利要求1所述的方法,其特征在于,步骤6)中,如果一个组内像素的命中点不位于同一栅格内,则该组对应的线程组中各线程按照传统流程进行对应像素的计算,完成光子收集。3.如权利要求1或2所述的方法,其特征在于,判断一个组内像素的命中点是否位于同一个栅格内的方法为:首先设置两个共享变量hashValue和flag;hashValue由该组对应的线程组内的0号线程进行初始化,其值为0号线程所对应像素的命中点所处的栅格编号;flag由0号线程进行初始化,其值为0;在初始化结束后,对该线程组内的线程进行一次同步;然后该线程组内每个线程计算自己所对应像素的命中点所处的栅格编号,并与hashValue进行比较,如果二者不相等,则判定当前线程和0号线程命中的是两个不同的栅格,将flag设置为1进行标记。4.如权利要求1所述的方法,其特征在于,步骤6)中,使用共享显存进行加速,完成光子收集的方法为:61)将全局显存中的光子信息分批加载到共享显存内;在每一批次加载过程中,每一个线程从全局显存中加载m个光子到共享显存中,在各线程完成同步操作之后,线程访问共享显存中的光子;其中线程组中一共group size个线程,共享显存的大小为能够容纳m*group size个光子;62)每个线程维护一个大小为k的堆,用于保存距离当前线程对...

【专利技术属性】
技术研发人员:周闻达段元兴李胜
申请(专利权)人:北京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1