预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号CN113096248A(43)申请公布日2021.07.09(21)申请号202110339915.5(22)申请日2021.03.30(71)申请人北京大学地址100871北京市海淀区颐和园路5号北京大学(72)发明人周闻达段元兴李胜(74)专利代理机构北京君尚知识产权代理有限公司11200代理人司立彬(51)Int.Cl.G06T17/20(2006.01)G06T15/20(2011.01)G06T1/60(2006.01)权利要求书2页说明书9页附图2页(54)发明名称基于共享显存优化的光子收集方法和光子映射渲染方法(57)摘要本发明公开了一种基于共享显存优化的光子收集方法和光子映射渲染方法。本发明的光子收集方法,其步骤包括:1)将整个待渲染三维场景划分为哈希网格;2)光源发射光子,当光子与场景中的漫反射表面相交时,记录该光子的位置、能量、入射方向信息;3)根据记录中光子的位置,计算对应的哈希值,按照哈希值从小到大的顺序将光子重新排序并生成一个索引数组;4)从视点出发,向每一个像素发射光线,计算路径上首个与场景漫反射表面的交点p并记录交点p的位置、入射方向;5)将需要计算的像素划分成组并为每一像素分配一线程;6)判断一个组内像素的命中点是否位于同一个栅格内,如果位于同一栅格内,则使用共享显存进行加速。CN113096248ACN113096248A权利要求书1/2页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个光子到共享显存中,在各线程完成同步操作之后,线程访问共享显存中的光子;其中线程组中一共groupsize个线程,共享显存的大小为能够容纳m*groupsize个光子;62)每个线程维护一个大小为k的堆,用于保存距离当前线程对应像素的命中点最近的k个光子;每次当线程从共享显存中获取一个光子的时候,如果当前堆中光子的数量不到k,那么将新访问到的光子插入堆中;如果堆中已经包含了k个光子,并且新访问到的光子比堆中距离最远的光子要近,则删除堆中最远的光子,然后将新访问到的光子插入堆中;63)所有批次加载完成后,该线程组内各线程的堆中保存的光子集合为对应像素的光子集合。5.如权利要求1所述的方法,其特征在于,将整个待渲染三维场景划分为哈希网格的方法为:首先生成待渲染三维场景的包围盒,将栅格网的原点设定为该包围盒的在各个维度坐标最小的顶点,记为gridOrigin,栅格网的大小设定成包围盒的大小;然后将场景的大小除以栅格的边长并向上取整,获得网格各个维度的栅格数量,记为gridsize;然后将该包围2CN113096248A权利要求书2/2页盒中的任一个给定点p在世界坐标系下的坐标(p.x,p.y,p.z)映射到其所属的栅格的编号。6.如权利要求