公开/公告号CN102509336A
专利类型发明专利
公开/公告日2012-06-20
原文格式PDF
申请/专利权人 克拉玛依红有软件有限责任公司;
申请/专利号CN201110325099.9
发明设计人 平红燕;
申请日2011-10-24
分类号G06T15/00(20060101);
代理机构11337 北京市盛峰律师事务所;
代理人赵建刚
地址 834000 新疆维吾尔自治区克拉玛依市长征路22号
入库时间 2023-12-18 05:34:25
法律状态公告日
法律状态信息
法律状态
2015-09-02
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06T15/00 变更前: 变更后: 申请日:20111024
专利权人的姓名或者名称、地址的变更
2014-07-09
著录事项变更 IPC(主分类):G06T15/00 变更前: 变更后: 申请日:20111024
著录事项变更
2014-06-18
授权
授权
2012-09-05
实质审查的生效 IPC(主分类):G06T15/00 申请日:20111024
实质审查的生效
2012-06-20
公开
公开
技术领域
本发明涉及计算机图形学领域,特别是涉及一种GPU加速的实时立体渲染方法。
背景技术
立体视觉是三维场景渲染的一个重要部分,目前对于立体像对压缩,立体知觉的舒适感 和立体显示设备增强的研究比较多,对立体渲染加速的研究则较少。立体视觉技术,大大增 加了沉浸感,涉及到渲染场景两次,即对每只眼睛渲染一次,因此,渲染的时间增加了一倍。
传统的立体渲染方法针对复杂的场景,进行渲染需要的时间很长,这是因为针对给定左 视点的场景,需要重新计算右视点的顶点属性,才能得到相对应与左视点的右视点的场景。 渲染复杂场景所需要的渲染时间长,这是现有立体渲染方法的缺陷。
因而,目前需要本领域技术人员迫切解决的一个技术问题就是:如何找到一种新型的立 体渲染方法,该方法针对复杂的渲染场景,可以实现实时的立体渲染,大大地缩短了针对复 杂场景进行立体渲染所需要的渲染时间。
发明内容
本发明所要解决的一个技术问题是提供一种GPU加速的实时立体渲染方法,该方法针 对复杂的渲染场景,可以实现实时的立体渲染,大大地缩短了针对复杂场景进行立体渲染所 需要的渲染时间。
为了解决上述问题,本发明公开了一种GPU加速的实时立体渲染方法,包括:
分别建立渲染场景的左模型及渲染场景的右模型,获得渲染场景的左模型及渲染场景的 右模型;
计算渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵,获得渲染场 景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵;
执行渲染场景的顶点处理操作,获得渲染场景的顶点处理结果;
在几何着色器中接收顶点着色器传送的基元,获得相应的基元的变换结果;
使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果;
将每个渲染目标的渲染结果存入两个独立的缓存中,获得在两个独立缓存中分别存储的 每个渲染目标的渲染结果;
针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复方法,进行 相应的显示立体像对,获得每个渲染目标的渲染结果的立体像对。
优选的,所述在几何着色器中接收顶点着色器传送的基元,获得相应的基元的变换结果 的步骤,包括:
在几何着色器中接收顶点着色器传送的基元,获得初始传送基元;
针对初始传送基元进行克隆,获得初始传送基元的克隆信息;
针对初始传送基元的左、右视点执行相应模型视图变换及投影变换,获得初始传送基元 的左、右视点执行相应模型视图变换的变换结果及投影变换的变换结果;
执行完第一轮初始传送基元的变换过程,获得第一轮初始传送基元的变换结果;
发送新的基元到片段着色器中,执行第二轮新的基元的变换过程,获得相应的基元的变 换结果。
优选的,所述针对初始传送基元的左、右视点执行相应模型视图变换及投影变换,获得 初始传送基元的左、右视点执行相应模型视图变换的变换结果及投影变换的变换结果的步骤, 包括:
针对初始传送基元的左、右视点执行相应模型视图变换,获得左、右视点执行相应模型 视图变换的变换结果;
针对初始传送基元的左、右视点执行相应模型投影变换,获得左、右视点执行相应模型 投影变换的变换结果。
优选的,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结 果的步骤,包括:
在使用渲染器对多个渲染目标进行渲染的过程中,依据几何着色器中的设置的变量整理 进入的渲染片段,获得渲染片段的渲染结果;
其中,若所述渲染片段是左视点,则将该渲染片段的标志设置为零;若所述渲染片段不 是左视点,则将该渲染片段的标志设置为非零。
优选的,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结 果的步骤,包括:
所述多个渲染目标中的每个片段必须在两个不同的缓存区分别进行绘制,获得多个渲染 目标中的每个片段在两个不同的缓存区的绘制结果。
优选的,所述使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结 果的步骤,包括:
若多个渲染目标中的每个片段的缓冲区标志位指示不正确时,则多个渲染目标中的每个 片段会被消除。
优选的,所述若多个渲染目标中的每个片段的缓冲区标志位指示不正确时,则多个渲染 目标中的每个片段会被消除的步骤,包括:
设置消除不需要的片段的颜色为黑色及设置消除不需要的片段的透明度值为零,则多个 渲染目标中的每个片段会被消除。
优选的,所述针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢 复方法,进行相应的显示立体像对,获得每个渲染目标的渲染结果的立体像对的步骤,包括:
在几何着色器中,传送左视点基元转换后的顶点坐标到片段着色器中;
如果片段属于右视点,则执行读取几何着色器中的坐标值,进行视口裁剪变换的操作过 程;
如果坐标存在于深度图中,则执行比较深度图值和片段深度值及根据获得的深度值测试 结果作出接受或丢弃片段相应操作的连续操作过程;
如果坐标不存在于深度图中,则执行接收送入的片段的操作过程;
执行完上述操作过程,获得每个渲染目标的渲染结果的立体像对。
与现有技术相比,本发明具有以下优点:
1、针对传统的立体渲染方法,该方法的渲染时间大大缩短,实现了对复杂场景的实时立 体渲染。
2、本发明实现了以高的细节层次渲染场景立体像对,而由此导致的帧率下降可以忽略不 计。
总之,本发明提供了一种GPU加速的实时立体渲染方法,该方法针对复杂的渲染场景, 可以实现实时的立体渲染;大大地缩短了针对复杂场景进行立体渲染所需要的渲染时间。
附图说明
图1是本发明一种GPU加速的实时立体渲染方法实施例的步骤流程图;
图2是本发明一种GPU加速的实时立体渲染方法中的算法流程示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式 对本发明作进一步详细的说明。
本发明的核心思想之一是提供了一种GPU(Graphic Processing Unit中文翻译为“图形处 理器”,GPU是相对于CPU的一个概念,由于在现代的计算机中,特别是家用系统,游戏的 发烧友,图形的处理变得越来越重要,需要一个专门的图形的核心处理器)加速的实时立体 渲染方法,包括:分别建立渲染场景的左模型及渲染场景的右模型;计算渲染场景的左模型 视图矩阵、渲染场景的右模型视图矩阵及投影矩阵;执行渲染场景的顶点处理操作;在几何 着色器中接收顶点着色器传送的基元;使用渲染器对多个渲染目标进行渲染;将每个渲染目 标的渲染结果存入两个独立的缓存中;针对在两个独立缓存中分别存储的每个渲染目标的渲 染结果,采用立体恢复方法,进行相应的显示立体像对;该方法针对复杂的渲染场景,可以 实现实时的立体渲染,大大地缩短了针对复杂场景进行立体渲染所需要的渲染时间。
参照图1,示出了本发明一种GPU加速的实时立体渲染方法实施例的步骤流程图,具 体可以包括:
步骤101、分别建立渲染场景的左模型及渲染场景的右模型,获得渲染场景的左模型及 渲染场景的右模型。
步骤102、计算渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵, 获得渲染场景的左模型视图矩阵、渲染场景的右模型视图矩阵及投影矩阵。
步骤103、执行渲染场景的顶点处理操作,获得渲染场景的顶点处理结果。
步骤104、在几何着色器中接收顶点着色器传送的基元,获得相应的基元的变换结果。
为了使本领域的技术人员更好地理解本发明,在本发明的一个优选实施例中,所述步骤 104,具体可以包括:
子步骤A1、在几何着色器中接收顶点着色器传送的基元,获得初始传送基元。
子步骤A2、针对初始传送基元进行克隆,获得初始传送基元的克隆信息。
在针对初始传送基元进行克隆,获得初始传送基元的克隆信息的过程中,关键的阶段是 几何着色器执行的复制阶段。几何着色器从左视点到右视点克隆了指定基元。当初始顶点在 左缓存投影的同时,复制的顶点在右缓存进行转换和投影。
在此过程中,一致变量matrix对应于右图像变换矩阵,该变换矩阵是由右视点的模型视 图矩阵和投影矩阵乘积产生。模型视图矩阵和投影矩阵的乘积产生的左图像变换矩阵作为主 程序里的一致变量可被直接读入。变量flag指示创建的顶点是属于左视图还是右视图。因为 每一个基元重复执行相同的指令,由当前模型视图矩阵乘以每个基元视点分离变换矢量形成 的投影矩阵,将消耗额外计算时间。
子步骤A3、针对初始传送基元的左、右视点执行相应模型视图变换及投影变换,获得 初始传送基元的左、右视点执行相应模型视图变换的变换结果及投影变换的变换结果。
其中,所述子步骤A3具体可以包括:
子步骤B1、针对初始传送基元的左、右视点执行相应模型视图变换,获得左、右视点 执行相应模型视图变换的变换结果。
子步骤B2、针对初始传送基元的左、右视点执行相应模型投影变换,获得左、右视点 执行相应模型投影变换的变换结果。
子步骤A4、执行完第一轮初始传送基元的变换过程,获得第一轮初始传送基元的变换 结果。
子步骤A5、发送新的基元到片段着色器中,执行第二轮新的基元的变换过程,获得相 应的基元的变换结果。
步骤105、使用渲染器对多个渲染目标进行渲染,获得相应的每个渲染目标的渲染结果。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中,所述步 骤105,具体可以包括:
子步骤C1、在使用渲染器对多个渲染目标进行渲染的过程中,依据几何着色器中的设 置的变量整理进入的渲染片段,获得渲染片段的渲染结果;
其中,若所述渲染片段是左视点,则将该渲染片段的标志设置为零;若所述渲染片段不 是左视点,则将该渲染片段的标志设置为非零。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中,所述步 骤105,具体可以包括:
子步骤D1、所述多个渲染目标中的每个片段必须在两个不同的缓存区分别进行绘制, 获得多个渲染目标中的每个片段在两个不同的缓存区的绘制结果。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中,所述步 骤105,具体可以包括:
子步骤E1、若多个渲染目标中的每个片段的缓冲区标志位指示不正确时,则多个渲染目 标中的每个片段会被消除。
其中,所述子步骤E1具体可以包括:
子步骤F1、设置消除不需要的片段的颜色为黑色及设置消除不需要的片段的透明度值 为零,则多个渲染目标中的每个片段会被消除。
在渲染过程中的关键阶段是片段着色阶段。在片段着色阶段,要依据几何着色器中设置 的变量flag整理进入的片段。如果片段属于左视点,此标志设置为零,否则就设置为非零。
执行对应于左、右图像片段着色操作阶段的操作过程,本发明同时使用多渲染目标技术 和帧缓存对象技术。多渲染目标渲染场景到多个缓冲区,帧缓存对象可以在直接渲染结果到 一张纹理。
然而使用多渲染目标和帧缓存对象涉及一些制约因素:
帧缓存对象和多渲染目标渲染测试时,例如深度测试和透明度alpha测试,尽管有多个 颜色缓存目标,共享通用缓存。
多渲染目标涉及到每个片段都在两个缓存里渲染。然而,结果却是不确定的。
左右视点渲染时共用深度缓存,这是第一个约束的结果,当片段不符合时意味着一些片 段可能被抛弃。本发明通过禁用深度测试来解决这个问题。本发明使用画家算法作为深度测 试的替代方法来解决可见度问题。第二个评语说明几何着色器创建两个基元是独立的。使用 多渲染目标涉及到每个片段必须在两个缓冲区绘制。因此片段不属于正确的缓冲区标志位指 示就会被丢弃。消除不需要的片段可以由设置其颜色为黑色,其透明度alpha值为零实现。 在主程序中应该启用混合功能,禁用深度测试,这样片段就无法显示。
用于混合的函数:
红色=Rsrc×Asrc+Rdest×(1-Asrc)
绿色=Gsrc×Asrc+Gdest×(1-Asrc)
蓝色=Bsrc×Asrc+Bdest×(1-Asrc)
Alpha=Asrc×Asrc+Adest×(1-Asrc)
步骤106、将每个渲染目标的渲染结果存入两个独立的缓存中,获得在两个独立缓存中 分别存储的每个渲染目标的渲染结果。
步骤107、针对在两个独立缓存中分别存储的每个渲染目标的渲染结果,采用立体恢复 方法,进行相应的显示立体像对,获得每个渲染目标的渲染结果的立体像对。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中,所述步 骤107,具体可以包括:
子步骤G1、在几何着色器中,传送左视点基元转换后的顶点坐标到片段着色器中。
子步骤G2、如果片段属于右视点,则执行读取几何着色器中的坐标值,进行视口裁剪 变换的操作过程。
子步骤G3、如果坐标存在于深度图中,则执行比较深度图值和片段深度值及根据获得 的深度值测试结果作出接受或丢弃片段相应操作的连续操作过程。
子步骤G4、如果坐标不存在于深度图中,则执行接收送入的片段的操作过程。
子步骤G5、执行完上述操作过程,获得每个渲染目标的渲染结果的立体像对。
在显示立体像对的过程中,对应于左视点和右视点,渲染过程中产生两个相应的独立的 纹理。立体装置使用过程中,用户应最终能修改立体像对。例如,使用立体眼镜混合红/青色 滤波图像,如下面的伪代码所述:
禁止深度测试;
利用加函数启用混合;
设置颜色掩码为红色;
渲染左边纹理;
设置颜色掩码为青色;
渲染右边纹理;
偏振或主动立体系统则不需要这个过程,图像通过合适视频输出。
为了证明本发明是一种可以大大地提高渲染立体场景时间的渲染方法,本发明做了如下 的试验来验证,试验结果具体如表1所述:
表1效率比较表
从表1中可以看出:
1)表1显示在各种情况下本发明都非常有效,尤其是需要对大量顶点进行处理操作时。
2)表1表明,当场景中包含有相当数量的顶点时,本发明在着色光照方面得到95%到 100%的涨幅。
虽然本发明在复杂几何体时实时渲染立体像对是有效的,但是还是存在一些不足。针对 多渲染目标的每个渲染缓存要等待单独的深度缓存,本发明采用了画家算法来对本发明做进 一步的改进,使其适合更多的渲染场景。
下面详细介绍画家算法,具体如下所述:
根据场景中摄像机的位置,以从后往前的顺序整理和绘制所有物体。然而,凹对象将会 出现一些深度伪差。这些凹对象用深度纹理渲染左视点场景可以正确的显示出来。在片段着 色阶段,从深度纹理中读入的深度值决定是否丢弃这个片段。正确的深度值计算是基于这样 一个事实,左右摄像机共享同一图像平面。因此两视点的深度值应保持不变。
基于深度图方法如下所述:
●在几何着色器中,传送左视点基元转换后的顶点坐标到片段着色器
●如果片段属于右视点
○读取几何着色器中的坐标值
○进行视口裁剪变换
○如果坐标存在于深度图中
●比较深度图值和片段深度Z值
●根据这次深度Z测试,接受或丢弃片段
○否则接收送入的片段
然而,右视点在一些特定配置的从深度图中读取的深度值并不像预期那样与深度Z值保 持一致,这也会导致右视图渲染显示中出现伪差。
表2示出了使用深度图的效率比较情况,具体如下所述:
表2使用深度图的效率比较
从表2中可以看出:尽管深度图非常耗时,本发明仍快于或最少是与传统渲染方法速度 相同,比传统渲染方法速度快20%-30%。然而,若顶点着色器计算能力有大的提高,本发 明将会变的非常有效。
参照图2,示出了本发明一种GPU加速的实时立体渲染方法中的算法流程示意图。
从图2中可以看出具体的算法步骤如下:
1)计算左、右模型视图矩阵和投影矩阵;
2)从左视点渲染场景;
3)执行顶点处理;
4)在几何着色器中接收顶点着色器传送的基元;
a.克隆基元;
b.为左、右视点执行相应模型视图变换和投影变换;
c.发送新的基元到片段着色器。
5)使用多渲染目标渲染,结果存入两个独立的缓存;
6)根据立体恢复方法显示立体像对。
为了使普通技术人员更好地理解本发明,下面将计算过程中涉及的关键算法的代码公 开,具体如下所述:
总之,本发明提供了一种GPU加速的实时立体渲染方法,该方法针对复杂的渲染场景, 可以实现实时的立体渲染,大大地缩短了针对复杂场景进行立体渲染所需要的渲染时间。
以上对本发明所提供的一种GPU加速的实时立体渲染方法进行了详细介绍,本文中应用 了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本 发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体 实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限 制。
机译: 通过使用实时渲染引擎执行3D立体渲染并存储其结果以用于电影制作的装置和方法
机译: 用于渲染立体全景图像的实时系统和方法
机译: 可实时生成右眼图像和左眼图像的能够生成3d图像的3d图形模型立体图像渲染装置及其方法