一种基于GPU的光线跟踪方法与流程

文档序号:12463673阅读:来源:国知局

技术特征:

1.一种基于GPU的光线跟踪方法,其特征在于,包括:

步骤1:CPU端加载场景模型,解析得到三角片元信息、材质信息、光源信息后打包发送给GPU端;

步骤2:GPU端得到三角片元信息、材质信息、光源信息,分别存储到对应的全局存储器和常量存储器;

步骤3:GPU端建立以整个3D场景的场景模型为根节点的Kd-Tree;

步骤4:GPU端进行光线跟踪操作;

步骤5:CPU端进行后期图像处理:CPU端读取图像缓存区的像素信息,显示到屏幕,完成渲染。

2.根据权利要求1所述的基于GPU的光线跟踪方法,其特征在于,所述步骤1,包括:

步骤1.1:CPU端开辟内存或显存空间,将场景模型加载到内存或显存空间中;

步骤1.2:CPU端对场景模型进行解析,得到三角片元信息、材质信息、光源信息;

步骤1.3:将解析好的三角片元信息、材质信息、光源信息分别打包发送到GPU端。

3.根据权利要求1所述的基于GPU的光线跟踪方法,其特征在于,所述步骤3,包括:

步骤3.1:建立3D场景中的各个场景模型的包围盒及整个3D场景模型的包围盒;

步骤3.2:以整个3D场景模型的包围盒为根节点,自上而下进行分割,建立以Kd-Tree。

4.根据权利要求3所述的基于GPU的光线跟踪方法,其特征在于,所述步骤3.2,包括:

步骤3.2.1:分别将整个3D场景模型的包围盒沿着不同轴向分割成两个子空间即得到左孩子节点、右孩子节点,分别划入左子树、右子树;

步骤3.2.2:计算不同轴向的分割成本C(V)≈Kt+Ki(PL Nl+ PR Nr),Nl,Nr为左孩子节点、右孩子节点中的场景模型包围盒数量,Kt、Ki为常数,PL、PR为光线进入左子树、右子树的概率,PL=SA(VL)/SA(V),SA(VL)表示左孩子节点中的场景模型包围盒的表面积和,SA(V) 表示3D场景中的所有场景模型包围盒的表面积和,PR=SA(VR)/SA(V),SA(VR)表示右孩子节点中的场景模型包围盒的表面积和;

步骤3.2.3:选择最小的分割成本对应的轴向分割平面,将整个3D场景模型的包围盒分割为左孩子节点、右孩子节点;

步骤3.2.4:对步骤3.2.3中分割得到的左孩子节点、右孩子节点均执行步骤3.2.1~3.2.3;

步骤3.2.5:判断是否到达最大分割深度或左孩子节点、右孩子节点内部三角片元数均小于指定阈值,是则停止继续分割,当前的分割结果即建立的Kd-Tree;否则执行步骤3.2.1。

5.根据权利要求1所述的基于GPU的光线跟踪方法,其特征在于,所述步骤4,包括:

步骤4.1:初始化光线簇:根据3D场景中的相机位置生成光线,作为光线簇,存储在光线簇缓存区;

步骤4.2:判定当前光线是否与Kd-Tree的包围盒相交:如果相交,则进行包围盒内部的场景模型与当前光线的相交测试,执行步骤4.3;否则当前光线不与Kd-Tree的包围盒内部的场景模型相交,将该场景模型作为背景信息填充到图像缓存区;

步骤4.3:如果当前光线与包围盒内部的场景模型相交,则根据光源位置判断交点的可见性:如果光源被遮挡,则交点不可见,如果光源未被遮挡,则记录该交点处为光照处,并将该交点填充到图像缓存区;如果当前光线与包围盒内部的场景模型不相交,则将该场景模型作为背景信息填充到图像缓存区;

步骤4.4:根据交点处场景模型的光线信息计算反射光线,并将反射光线设为当前光线,继续跟踪;

步骤4.5:当前光线簇缓存区非空且未到达最大遍历深度,返回步骤4.2,对光线簇缓存区中的下一条光线进行跟踪;否则停止跟踪。

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