本发明涉及VR渲染引擎技术领域,具体是一种高效的VR场景绘画方法。
背景技术:
在VR场景中,为了实现左右眼睛不同的效果,需要同时渲染两张图,分别为左眼视图和右眼视图,为了更好的体现3D效果,左右眼视图的Camera位置是不同的,这样就导致了一个问题,由于Camera的移动,会导致整个场景的重新绘制,这样会极大的降低渲染效率。现有的VR场景绘画方法为:首先模拟左眼进行场景渲染,1.确定Camera1的位置,2.对所有物体进行z排序,3.依次渲染所有的物体;之后模拟右眼进行场景渲染,1.确定Camera2的位置,2.对所有物体进行z排序,3.依次渲染所有的物体。现有的VR场景绘画方法性能较差,在手机这种设备中很难做到特别高的帧率,给用户的体验不好。
由于VR是一种比较新的交互场景,所以其渲染方式也不完全相同,首先就是其左右眼的渲染方式会引起Camer位置的变化,这样就会使得渲染速度减半。为了提高渲染速度,定义了一种全新的渲染方式-远近分层渲染。
技术实现要素:
本发明的目的在于提供一种高效的VR场景绘画方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种高效的VR场景绘画方法,包括以下步骤:
(1)对场景进行远近层次的区分:首先得到左右camera的中间位置,然后依次计算场景中所有物体距离这个中间位置的距离,当距离大于指定的值的时候,就认为这个物体属于较远层次的那个物体,当距离小于指定值的时候,认为它属于较近的层次;在左右camera的渲染过程中,对于较远层次的物体,只渲染一次,对于较近的物体,渲染两次;
(2)对远处物体只进行一次渲染:首先创建一个公共的纹理A,纹理A用来保存远端物体的渲染结果,之后使用两个camera中间的位置虚拟出来一个新的camera’,以该camera’来进行远端物体的渲染,并将渲染结果保存到纹理A中,当渲染真实的左眼视图时,首先将纹理A绘画到屏幕之上,然后再将近处的物体按照左眼camera依次绘画到屏幕上,渲染真实的右眼视图同理,最后合并左右眼的渲染结果,就能够将最终的物体渲染出来;
(3)确定远近的层次分界线:通过一个公式来进行远近的区分,设左右眼睛的距离为x,远近的区分距离为y,y=Ax+B,A和B为一个常数,通过调整A和B的值在效果和性能上找到一个平衡点。
作为本发明进一步的方案:步骤(1)中较近的物体之右小于整体的50%,渲染性能也能够提升。
作为本发明再进一步的方案:步骤(2)中所述纹理A和屏幕大小相等。
与现有技术相比,本发明的有益效果是:渲染效率会有较大的提升,在相同的场景下(10000个顶点,纹理大小1024×10240),当分界面选择左右camera距离×100左右时,性能提升60%以上(之前为32fps,修改后提升到50fps)。
附图说明
图1为高效的VR场景绘画方法中步骤(1)的技术原理图。
图2为高效的VR场景绘画方法中步骤(1)的技术流程图。
图3为高效的VR场景绘画方法中步骤(2)的技术原理图。
图4为高效的VR场景绘画方法中步骤(2)的技术流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1~4,本发明实施例中,一种高效的VR场景绘画方法,包括以下步骤:
(1)如何对场景进行远近层次的区分;
由于VR的特殊情况,左右眼(左右camera)的位置实际上是非常近的,也就是说,通过两个camer渲染出来的内容是比较接近的,而且越远的物体也就越一致,在无限远处的物体实际上是一模一样的,然而传统的方案中却仍然需要渲染两次。也可以这么认为,在一定距离以外的物体,可以认为其是一样的,至少这么渲染出来的效果是用户完全可以接受的;
那么对场景进行远近层次的区分的模块就比较清晰了,首先得到左右camera的中间位置,然后依次计算场景中所有物体距离这个中间位置的距离,当距离大于指定的值的时候,就认为这个物体属于较远层次的那个物体,如果小于指定值的时候,认为它属于较近的层次。在左右camera的渲染过程中,对于较远层次的物体,只渲染一次,对于较近的物体,渲染两次,一般情况下较近的物体之右整体的50%不到,那么渲染性能也能够提升很多。如图1所示,物体A是分界面之前的物体,也就是说数据近处的物体,需要渲染两次,而物体B和物体C是分界面之后的图提,只需要渲染一次就可以了。
(2)如何对远处物体只进行一次渲染;
如图3-4所示,首先创建一个和屏幕一样大的公共的纹理(纹理A),这个纹理用来保存远端物体的渲染结果,之后使用两个camera中间的位置虚拟出来一个新的camera’,以这个camera’来进行远端物体的渲染,并将渲染结果保存到纹理A中,当渲染真实的左眼视图时,首先将纹理A绘画到屏幕之上,然后再将近处的物体按照左眼camera依次绘画到屏幕上,右眼也是类似的过程,这样就能够将最终的物体渲染出来了。
(3)如何确定远近的层次分界线;
这个是和左右眼的距离有关系的,通过一个简单的公式来进行远近的区分,假设左右眼睛的距离为x,远近的区分距离为y,那么y=Ax+B,A和B为一个常数,通过调整A和B的值可以在效果和性能上找到一个很好的平衡点。
本发明的渲染效率会有较大的提升,在相同的场景下(10000个顶点,纹理大小1024×10240),当分界面选择左右camera距离×100左右时,性能提升60%以上(之前为32fps,修改后提升到50fps)。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。