一种gpu加速的实时立体渲染方法

文档序号:6436243阅读:265来源:国知局
专利名称:一种gpu加速的实时立体渲染方法
技术领域
本发明涉及计算机图形学领域,特别是涉及一种GPU加速的实时立体渲染方法。
背景技术
立体视觉是三维场景渲染的一个重要部分,目前对于立体像对压缩,立体知觉的舒适感和立体显示设备增强的研究比较多,对立体渲染加速的研究则较少。立体视觉技术, 大大增加了沉浸感,涉及到渲染场景两次,即对每只眼睛渲染一次,因此,渲染的时间增加
了一倍。传统的立体渲染方法针对复杂的场景,进行渲染需要的时间很长,这是因为针对给定左视点的场景,需要重新计算右视点的顶点属性,才能得到相对应与左视点的右视点的场景。渲染复杂场景所需要的渲染时间长,这是现有立体渲染方法的缺陷。因而,目前需要本领域技术人员迫切解决的一个技术问题就是如何找到一种新型的立体渲染方法,该方法针对复杂的渲染场景,可以实现实时的立体渲染,大大地缩短了针对复杂场景进行立体渲染所需要的渲染时间。

发明内容
本发明所要解决的一个技术问题是提供一种GPU加速的实时立体渲染方法,该方法针对复杂的渲染场景,可以实现实时的立体渲染,大大地缩短了针对复杂场景进行立体渲染所需要的渲染时间。为了解决上述问题,本发明公开了一种GPU加速的实时立体渲染方法,包括分别建立渲染场景的左模型及渲染场景的右模型,获得渲染场景的左模型及渲染场景的右模型;计算渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵,获得渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵;执行渲染场景的顶点处理操作,获得渲染场景的顶点处理结果;在几何着色器中接收顶点着色器传送的基元,获得相应的基元的变换结果;使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果;将每个渲染目标的渲染结果存入两个独立的缓存中,获得在两个独立缓存中分别存储的每个渲染目标的渲染结果;针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复方法,进行相应的显示立体像对,获得每个渲染目标的渲染结果的立体像对。优选的,所述在几何着色器中接收顶点着色器传送的基元,获得相应的基元的变换结果的步骤,包括在几何着色器中接收顶点着色器传送的基元,获得初始传送基元;针对初始传送基元进行克隆,获得初始传送基元的克隆信息;针对初始传送基元的左、右视点执行相应模型视图变换及投影变换,获得初始传
4送基元的左、右视点执行相应模型视图变换的变换结果及投影变换的变换结果;执行完第一轮初始传送基元的变换过程,获得第一轮初始传送基元的变换结果;发送新的基元到片段着色器中,执行第二轮新的基元的变换过程,获得相应的基元的变换结果。优选的,所述针对初始传送基元的左、右视点执行相应模型视图变换及投影变换, 获得初始传送基元的左、右视点执行相应模型视图变换的变换结果及投影变换的变换结果的步骤,包括针对初始传送基元的左、右视点执行相应模型视图变换,获得左、右视点执行相应模型视图变换的变换结果;针对初始传送基元的左、右视点执行相应模型投影变换,获得左、右视点执行相应模型投影变换的变换结果。优选的,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果的步骤,包括在使用渲染器对多个渲染目标进行渲染的过程中,依据几何着色器中的设置的变量整理进入的渲染片段,获得渲染片段的渲染结果;其中,若所述渲染片段是左视点,则将该渲染片段的标志设置为零;若所述渲染片段不是左视点,则将该渲染片段的标志设置为非零。优选的,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果的步骤,包括所述多个渲染目标中的每个片段必须在两个不同的缓存区分别进行绘制,获得多个渲染目标中的每个片段在两个不同的缓存区的绘制结果。优选的,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果的步骤,包括若多个渲染目标中的每个片段的缓冲区标志位指示不正确时,则多个渲染目标中的每个片段会被消除。优选的,所述若多个渲染目标中的每个片段的缓冲区标志位指示不正确时,则多个渲染目标中的每个片段会被消除的步骤,包括设置消除不需要的片段的颜色为黑色及设置消除不需要的片段的透明度值为零, 则多个渲染目标中的每个片段会被消除。优选的,所述针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复方法,进行相应的显示立体像对,获得每个渲染目标的渲染结果的立体像对的步骤,包括在几何着色器中,传送左视点基元转换后的顶点坐标到片段着色器中;如果片段属于右视点,则执行读取几何着色器中的坐标值,进行视口裁剪变换的操作过程;如果坐标存在于深度图中,则执行比较深度图值和片段深度值及根据获得的深度值测试结果作出接受或丢弃片段相应操作的连续操作过程;如果坐标不存在于深度图中,则执行接收送入的片段的操作过程;执行完上述操作过程,获得每个渲染目标的渲染结果的立体像对。
与现有技术相比,本发明具有以下优点1、针对传统的立体渲染方法,该方法的渲染时间大大缩短,实现了对复杂场景的实时立体渲染。2、本发明实现了以高的细节层次渲染场景立体像对,而由此导致的帧率下降可以忽略不计。总之,本发明提供了一种GPU加速的实时立体渲染方法,该方法针对复杂的渲染场景,可以实现实时的立体渲染;大大地缩短了针对复杂场景进行立体渲染所需要的渲染时间。


图1是本发明一种GPU加速的实时立体渲染方法实施例的步骤流程图;图2是本发明一种GPU加速的实时立体渲染方法中的算法流程示意图。
具体实施例方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。本发明的核心思想之一是提供了一种GPU (Graphic Processing Unit中文翻译为 “图形处理器”,GPU是相对于CPU的一个概念,由于在现代的计算机中,特别是家用系统,游戏的发烧友,图形的处理变得越来越重要,需要一个专门的图形的核心处理器)加速的实时立体渲染方法,包括分别建立渲染场景的左模型及渲染场景的右模型;计算渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵;执行渲染场景的顶点处理操作;在几何着色器中接收顶点着色器传送的基元;使用渲染器对多个渲染目标进行渲染; 将每个渲染目标的渲染结果存入两个独立的缓存中;针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复方法,进行相应的显示立体像对;该方法针对复杂的渲染场景,可以实现实时的立体渲染,大大地缩短了针对复杂场景进行立体渲染所需要的渲染时间。参照图1,示出了本发明一种GPU加速的实时立体渲染方法实施例的步骤流程图, 具体可以包括步骤101、分别建立渲染场景的左模型及渲染场景的右模型,获得渲染场景的左模型及渲染场景的右模型。步骤102、计算渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵,获得渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵。步骤103、执行渲染场景的顶点处理操作,获得渲染场景的顶点处理结果。步骤104、在几何着色器中接收顶点着色器传送的基元,获得相应的基元的变换结果。为了使本领域的技术人员更好地理解本发明,在本发明的一个优选实施例中,所述步骤104,具体可以包括子步骤Al、在几何着色器中接收顶点着色器传送的基元,获得初始传送基元。子步骤A2、针对初始传送基元进行克隆,获得初始传送基元的克隆信息。
在针对初始传送基元进行克隆,获得初始传送基元的克隆信息的过程中,关键的阶段是几何着色器执行的复制阶段。几何着色器从左视点到右视点克隆了指定基元。当初始顶点在左缓存投影的同时,复制的顶点在右缓存进行转换和投影。在此过程中,一致变量matrix对应于右图像变换矩阵,该变换矩阵是由右视点的模型视图矩阵和投影矩阵乘积产生。模型视图矩阵和投影矩阵的乘积产生的左图像变换矩阵作为主程序里的一致变量可被直接读入。变量flag指示创建的顶点是属于左视图还是右视图。因为每一个基元重复执行相同的指令,由当前模型视图矩阵乘以每个基元视点分离变换矢量形成的投影矩阵,将消耗额外计算时间。子步骤A3、针对初始传送基元的左、右视点执行相应模型视图变换及投影变换,获得初始传送基元的左、右视点执行相应模型视图变换的变换结果及投影变换的变换结果。其中,所述子步骤A3具体可以包括子步骤Bi、针对初始传送基元的左、右视点执行相应模型视图变换,获得左、右视点执行相应模型视图变换的变换结果。子步骤B2、针对初始传送基元的左、右视点执行相应模型投影变换,获得左、右视点执行相应模型投影变换的变换结果。子步骤A4、执行完第一轮初始传送基元的变换过程,获得第一轮初始传送基元的变换结果。子步骤A5、发送新的基元到片段着色器中,执行第二轮新的基元的变换过程,获得相应的基元的变换结果。步骤105、使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果。为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中, 所述步骤105,具体可以包括子步骤Cl、在使用渲染器对多个渲染目标进行渲染的过程中,依据几何着色器中的设置的变量整理进入的渲染片段,获得渲染片段的渲染结果;其中,若所述渲染片段是左视点,则将该渲染片段的标志设置为零;若所述渲染片段不是左视点,则将该渲染片段的标志设置为非零。为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中, 所述步骤105,具体可以包括子步骤D1、所述多个渲染目标中的每个片段必须在两个不同的缓存区分别进行绘制,获得多个渲染目标中的每个片段在两个不同的缓存区的绘制结果。为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中, 所述步骤105,具体可以包括子步骤E1、若多个渲染目标中的每个片段的缓冲区标志位指示不正确时,则多个渲染目标中的每个片段会被消除。其中,所述子步骤El具体可以包括子步骤F1、设置消除不需要的片段的颜色为黑色及设置消除不需要的片段的透明度值为零,则多个渲染目标中的每个片段会被消除。在渲染过程中的关键阶段是片段着色阶段。在片段着色阶段,要依据几何着色器中设置的变量flag整理进入的片段。如果片段属于左视点,此标志设置为零,否则就设置为非零。
执行对应于左、右图像片段着色操作阶段的操作过程,本发明同时使用多渲染目标技术和帧缓存对象技术。多渲染目标渲染场景到多个缓冲区,帧缓存对象可以在直接渲染结果到一张纹理。
然而使用多渲染目标和帧缓存对象涉及一些制约因素
帧缓存对象和多渲染目标渲染测试时,例如深度测试和透明度alpha测试,尽管有多个颜色缓存目标,共享通用缓存。
多渲染目标涉及到每个片段都在两个缓存里渲染。然而,结果却是不确定的。
左右视点渲染时共用深度缓存,这是第一个约束的结果,当片段不符合时意味着一些片段可能被抛弃。本发明通过禁用深度测试来解决这个问题。本发明使用画家算法作为深度测试的替代方法来解决可见度问题。第二个评语说明几何着色器创建两个基元是独立的。使用多渲染目标涉及到每个片段必须在两个缓冲区绘制。因此片段不属于正确的缓冲区标志位指示就会被丢弃。消除不需要的片段可以由设置其颜色为黑色,其透明度alpha 值为零实现。在主程序中应该启用混合功能,禁用深度测试,这样片段就无法显示。
用于混合的函数
红色=RsrcXAsrc+RdestX (I-Asrc)
绿色=GsrcXAsrc+GdestX (I-Asrc)
蓝色=BsrcXAsrc+BdestX (I-Asrc)
Alpha = AsrcXAsrc+AdestX (I-Asrc)
步骤106、将每个渲染目标的渲染结果存入两个独立的缓存中,获得在两个独立缓存中分别存储的每个渲染目标的渲染结果。
步骤107、针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复方法,进行相应的显示立体像对,获得每个渲染目标的渲染结果的立体像对。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中, 所述步骤107,具体可以包括
子步骤G1、在几何着色器中,传送左视点基元转换后的顶点坐标到片段着色器中。
子步骤G2、如果片段属于右视点,则执行读取几何着色器中的坐标值,进行视口裁剪变换的操作过程。
子步骤G3、如果坐标存在于深度图中,则执行比较深度图值和片段深度值及根据获得的深度值测试结果作出接受或丢弃片段相应操作的连续操作过程。
子步骤G4、如果坐标不存在于深度图中,则执行接收送入的片段的操作过程。
子步骤G5、执行完上述操作过程,获得每个渲染目标的渲染结果的立体像对。
在显示立体像对的过程中,对应于左视点和右视点,渲染过程中产生两个相应的独立的纹理。立体装置使用过程中,用户应最终能修改立体像对。例如,使用立体眼镜混合红/青色滤波图像,如下面的伪代码所述
禁止深度测试;
利用加函数启用混合;
设置颜色掩码为红色;8
渲染左边纹理;
设置颜色掩码为青色;
渲染右边纹理;
偏振或主动立体系统则不需要这个过程,图像通过合适视频输出。
为了证明本发明是一种可以大大地提高渲染立体场景时间的渲染方法,本发明做了如下的试验来验证,试验结果具体如表1所述
表1效率比较表
权利要求
1.一种GPU加速的实时立体渲染方法,其特征在于,包括分别建立渲染场景的左模型及渲染场景的右模型,获得渲染场景的左模型及渲染场景的右模型;计算渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵,获得渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵; 执行渲染场景的顶点处理操作,获得渲染场景的顶点处理结果; 在几何着色器中接收顶点着色器传送的基元,获得相应的基元的变换结果; 使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果; 将每个渲染目标的渲染结果存入两个独立的缓存中,获得在两个独立缓存中分别存储的每个渲染目标的渲染结果;针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复方法,进行相应的显示立体像对,获得每个渲染目标的渲染结果的立体像对。
2.根据权利要求1所述的方法,其特征在于,所述在几何着色器中接收顶点着色器传送的基元,获得相应的基元的变换结果的步骤,包括在几何着色器中接收顶点着色器传送的基元,获得初始传送基元; 针对初始传送基元进行克隆,获得初始传送基元的克隆信息; 针对初始传送基元的左、右视点执行相应模型视图变换及投影变换,获得初始传送基元的左、右视点执行相应模型视图变换的变换结果及投影变换的变换结果;执行完第一轮初始传送基元的变换过程,获得第一轮初始传送基元的变换结果; 发送新的基元到片段着色器中,执行第二轮新的基元的变换过程,获得相应的基元的变换结果。
3.根据权利要求2所述的方法,其特征在于,所述针对初始传送基元的左、右视点执行相应模型视图变换及投影变换,获得初始传送基元的左、右视点执行相应模型视图变换的变换结果及投影变换的变换结果的步骤,包括针对初始传送基元的左、右视点执行相应模型视图变换,获得左、右视点执行相应模型视图变换的变换结果;针对初始传送基元的左、右视点执行相应模型投影变换,获得左、右视点执行相应模型投影变换的变换结果。
4.根据权利要求1所述的方法,其特征在于,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果的步骤,包括在使用渲染器对多个渲染目标进行渲染的过程中,依据几何着色器中的设置的变量整理进入的渲染片段,获得渲染片段的渲染结果;其中,若所述渲染片段是左视点,则将该渲染片段的标志设置为零;若所述渲染片段不是左视点,则将该渲染片段的标志设置为非零。
5.根据权利要求1所述的方法,其特征在于,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果的步骤,包括所述多个渲染目标中的每个片段必须在两个不同的缓存区分别进行绘制,获得多个渲染目标中的每个片段在两个不同的缓存区的绘制结果。
6.根据权利要求1所述的方法,其特征在于,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果的步骤,包括若多个渲染目标中的每个片段的缓冲区标志位指示不正确时,则多个渲染目标中的每个片段会被消除。
7.根据权利要求6所述的方法,其特征在于,所述若多个渲染目标中的每个片段的缓冲区标志位指示不正确时,则多个渲染目标中的每个片段会被消除的步骤,包括设置消除不需要的片段的颜色为黑色及设置消除不需要的片段的透明度值为零,则多个渲染目标中的每个片段会被消除。
8.根据权利要求1所述的方法,其特征在于,所述针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复方法,进行相应的显示立体像对,获得每个渲染目标的渲染结果的立体像对的步骤,包括在几何着色器中,传送左视点基元转换后的顶点坐标到片段着色器中;如果片段属于右视点,则执行读取几何着色器中的坐标值,进行视口裁剪变换的操作过程;如果坐标存在于深度图中,则执行比较深度图值和片段深度值及根据获得的深度值测试结果作出接受或丢弃片段相应操作的连续操作过程;如果坐标不存在于深度图中,则执行接收送入的片段的操作过程;执行完上述操作过程,获得每个渲染目标的渲染结果的立体像对。
全文摘要
本发明提供了一种GPU加速的实时立体渲染方法,包括分别建立渲染场景的左模型及渲染场景的右模型;计算渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵;执行渲染场景的顶点处理操作;在几何着色器中接收顶点着色器传送的基元;使用渲染器对多个渲染目标进行渲染;将每个渲染目标的渲染结果存入两个独立的缓存中;针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复方法,进行相应的显示立体像对;该方法针对复杂的渲染场景,可以实现实时的立体渲染,大大地缩短了针对复杂场景进行立体渲染所需要的渲染时间。
文档编号G06T15/00GK102509336SQ201110325099
公开日2012年6月20日 申请日期2011年10月24日 优先权日2011年10月24日
发明者平红燕 申请人:克拉玛依红有软件有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1