用于流式渲染的实时潜在可见集合的制作方法

文档序号:21367782发布日期:2020-07-04 04:43阅读:336来源:国知局
用于流式渲染的实时潜在可见集合的制作方法

本发明涉及用于流式渲染(streamingrendering)的方法和装置。



背景技术:

实时图形需要日益增长的处理能力。虚拟现实(vr)的最近繁荣已经扩大了这个需求。为了在vr中提供沉浸式体验,在使用头戴式显示器(hmd)时,应用必须为双眼提供高分辨率的、非常高帧率的高视觉保真。即使是最近的高端图形处理单元(gpu)也不能满足这个需求。

尽管系留式hmd系统在连接到高端计算机时支持高质量图形和响应性,但是流畅的用户体验需要用于避免视觉颤抖的方法。异步空间扭曲[http://developer.oculus.com/blog/asynchronous-spacewarp]是这样的技术:该技术在呈现时间更新当前帧,从而根据最近的头部移动变换最后的深度和颜色缓冲器,以便掩蔽小的移动并使用户体验更流畅。然而,该技术只对旋转是正确的,如果图像没有被明显过采样,则遭受质量损失,并且由于平移移动导致的去遮挡引入撕裂伪像。

并发趋势围绕使用容易买到的移动装置(诸如移动电话)直接作为非系留式hdm发展。虽然在hmd上直接计算渲染具有优势,诸如传感器数据的可用性,但是移动芯片提供的渲染能力对于高质量内容是不足的。由于散热约束和有限的蓄电池电源,移动gpu将与台式gpu达到同等水平是不大可能的。作为补救,非系留式hmd可以(例如,在云或wi-fi连接的台式计算机中)与远程服务器组合为渲染装置。然而,wi-fi连接使渲染延时增加长达100ms,并且广域连接使渲染延时增加长达200ms。为了通过移除有线连接来提高移动性并且使游戏系统的成本保持较低,用于降低远程渲染期间的这种高延时的负面影响的各种方法已经被提出。

独立于设立强大的服务器并且使用另一装置(即,客户端)显示的确切的场景,前面提出的系统采用类似的构思。在核心方面,它们使用如最近的调查[shushi和cheng-hsinhsu.2015年.asurveyofinteractiveremoterenderingsystems.acmcomput.surv.47,4,article57(2015年5月),29页.h.ps://doi.org/10.1145/2719921]所概述的基于图像的渲染技术。服务器将为前一视图、推测的新视图或近距离视图创建的任何数量的图像递送给客户端;客户端拾取一个或多个视图,并且根据中间的相机移动来扭曲它们。取决于扭曲技术,所产生的新视图可以考虑深度信息和去遮挡,并且甚至可以用想象的内容来推测地填满未被覆盖的场景区域。

基于图像的方法总是伴随有如下缺点:与大深度不连续共存的精细场景结构和高频信息造成难以克服的问题。虽然在正常渲染期间欠采样的高频内容将“仅”导致混叠伪像,但是扭曲技术将明显使这些问题更糟,因为它们将已经未充分表示的信息重新投影到新的采样网格上。此外,当传输或恢复深度信息时,对象的少量采样在重新投影之后将导致断开的部分。类似地,当大深度不连续存在于场景中时,去遮挡后的区域通常将导致清楚可见的伪像。



技术实现要素:

因此本发明的目的是提出实时地提供高质量流式渲染的方法和装置。

通过根据独立权利要求的方法和装置来实现该目的。从属权利要求中限定了有利的实施例。

根据本发明的一个方面,提出了在客户端上从3d数据的基于图像的方法切换到前向渲染技术。代替扭曲来自前一帧的像素,客户端简单地渲染多边形,例如,三角形,很像传统的渲染系统。

为了减轻客户端上的渲染负担,三角形数据在服务器上被预先处理并被描影(shade),并且只有渲染潜在需要的那些多边形必须在需要它们之前被递送给客户端。

为此,本发明引入了相机偏移空间,所述相机偏移空间对于像面上的给定的点或采样位置,提供该点在哪个相机偏移下被给定多边形覆盖的信息。通过对每一个像素位置构造相机偏移空间,示出了针对平移相机移动、可以如何计算光栅化的图像的整个pvs。通过将相机偏移空间升高另两个维度,示出了它可以如何被用于针对任意的采样位置和旋转相机移动来计算pvs。通过使用渲染流水线级和计算模式执行的组合来提供对于当前的gpu的整个pvs计算的实现。

与现有技术相比,本发明方法对于去遮挡没有任何问题,因为整个pvs被传输给客户端。客户端上的渲染不涉及从深度缓冲器的复杂几何构造、单步遍历深度图像、或代理几何体的要求。利用深度缓冲,就多边形而言,pvs被简单地渲染。

附图说明

当结合附图研究以下详细描述时,本发明的这些及其他方面将变得更加清楚,在附图中

图1a示出根据本发明的第一实施例的用于在服务器上实现的流式渲染的方法。

图1b示出用于渲染从服务器接收的流化的图形数据的方法。

图2示出一些三角形星座和相机偏移空间星座的例子。

图3示出可以如何在旋转角度减小的情况下,对于所有的边、通过2d区域来计算用于3d区域的潜在可见集合(来自上方的视图)。

图4示出所提出的渐进可见性解析算法的示例步骤。

图5用伪代码示出根据本发明的实施例的用于渐进可见性解析的方法,其中示例步骤是针对图4中的一些三角形。

图6示出没有轮廓交点的六种可能的情况。

图7示出在服务器上实现的根据本发明的另一实施例的用于流式渲染的方法。

图8示出在不同的使用情况场景期间记录的大的户外场景(4.6m三角形)的示例视图。

具体实施方式

图1a示出根据本发明的第一实施例的用于在服务器上实现的流式渲染的方法。在步骤110中,使用包括多边形(三角形)的图形数据和当前相机视图作为输入来实时地确定多边形(三角形)的潜在可见集合(pvs)。

根据本发明,在给定潜在相机视图或移动集合的情况下,所述方法确定对象是否可以在屏幕上的给定位置处被采样。通过将该方法扩展到屏幕上的所有采样位置、并且进一步扩展到之间的所有位置,在所有的相机移动下,所有对象的可见性都可以相对于所有的其他对象被确定。

在步骤120中,用描影数据来扩增多边形的潜在可见集合。在步骤130中,所得的图形数据被编码,并且被发送或传输给客户端。

图1b示出用于渲染从服务器接收的流化的图形数据的方法。在步骤140中,对图形数据进行解码。在步骤150中,使用例如从其更新用户的当前视图透视图的表示用户的头部移动的信息来渲染解码的图形数据。

为了示出如何在没有连接或者与对象的对应关系作为输入的情况下获取三角形的渲染流并且仅从该数据流构造pvs,裁剪空间中的单个三角形t=(p0;p1;p2),其中pi=[xiyiziwi]t,并且三维立方体区域内的相机移动被认为是第一个例子。令支持的相机移动是围绕当前相机位置定义的,并且描述在相机空间中定义为0±c的立方体,其中c对应于应对其计算pvs的相机偏移。

三角形的投影被描述为该三角形的边的投影,该投影对应于裁剪空间的(x,y,w)子空间中的平面。t的边ei的平面由顶点的x、y和w坐标的成对交叉乘积给出:

其中对于规范化的装置坐标中的采样位置[xsys]t,可以测试该采样位置是否被三角形覆盖,从而确定其相对于所有三个侧平面的位置。如果

则三角形覆盖采样。点·指示矢量的点积。

考虑到潜在相机移动相机(视图)矩阵被改变。对于前一个视图矩阵v,改变的视图矩阵v’由以下方程给出:

对象空间p0中的点通过使用模型(m)、视图(v)和投影矩阵(p)被转移到其裁剪空间:

p=p·v·m·p0

对于潜在相机移动和透视投影,其中近平面距离为n、远平面距离为f和近平面尺寸为(2r,2t),裁剪空间中的点的位置由以下给出:

考虑到前面的讨论,只有点的x、y和w坐标是相关的,因此被用于调整投影的点的深度范围的zz和zw可以被忽视:

对于c内的任何相机偏移,令

不失一般性地,考虑相机移动对e12的影响。通过两个点p1′和p2′的边e1′2的平面方程如下演变:

给定的采样s=[sxsy1]t(相对于移动的相机)到边e′12的距离因此由以下方程给出:

对于作为屏幕上的采样位置的s,边e′12与碎片s重合的偏移δ由限定。换句话说,碎片在三角形边的外部移动的那些相机偏移。可以清楚地观察到,对于给定的三角形t和给定的点s,对应于δ上的三维空间中的平面。该空间是相机偏移空间。

其中

如果只有二维相机偏移被允许,△w=0,即,从平面的可见性,则偏移空间变为2d,并且对应于线。

不仅考虑一个边e12,而且还考虑所有的三个三角形边,变得显而易见的是,的组合在3d偏移空间中形成四面体,并且在2d偏移空间中形成三角形。令四面体的体积/三角形的覆盖面积被表示为tδ。tδ描述对于哪些相机偏移,碎片s将被三角形t覆盖。

类似于将三角形转移到相机偏移空间中,还可以考虑cos中的点,即,计算顶点的投影在哪些偏移下准确地与采样位置重合。为了计算裁剪空间中的点的规范化的装置坐标(ndc)表示,只需要执行透视划分:

与方程2和δ的组合得到:

对于考虑从立方体区域的可见性的3d偏移空间,这两个方程描述线。对于从平面区域的可见性,即,△w=0,方程描述单个点。

虽然相机偏移空间提供关于碎片在哪些偏移下被三角形覆盖或者正好符合顶点的投影的信息,但是它不考虑最大支持的相机移动。相机移动简单地是3d偏移空间中的立方体和2d偏移空间中的矩形,它们均由最大偏移±c限定。因此,给定的相机偏移下的可见性考虑应限于±c。

通过分析推导的方程,可以得出关于cos的以下结论:首先,离相机越远的三角形覆盖cos中的越大的体积/面积。这并不令人惊讶,因为当相机移动时,远离相机的对象移动的少。这与当三角形被投影在屏幕上时三角形覆盖的面积正好相反。第二,相同距离处的较大的三角形覆盖比较小的三角形更大的面积/体积。这也是直观的,因为较大的三角形在比较小的三角形更大的相机移动下覆盖采样位置。第三,沿着δw步进,具有x/y平面的截面在cos中的尺寸增大。该效果描述了随着相机更靠近三角形,该三角形的投影变得更大,并且在x/y中更大的偏移下覆盖采样位置。

图2示出一些三角形星座和相机偏移空间星座的例子。关于cos的最重要的事实是,三角形的体积/面积对应于它覆盖给定碎片的最大相机偏移,不管三角形的投影尺寸如何。同时,最大支持的相机偏移对应于简单的矩形/立方体。这些事实的组合允许在cos中进行高效的可见性计算。

更具体地说,图2a示出在视图空间大小相等的情况下投影两个三角形t1和t2的例子。在(b)中,示出了越靠近的三角形在投影之后将越大。在(c)中,示出了当针对标记的采样点计算2dcos时,关系是反过来的,因为远处的三角形覆盖对于更大偏移的采样。矩形示出最大支持的相机偏移,对于该相机偏移,三角形t1完全覆盖三角形t2。

相机偏移空间还有助于对于单个采样位置计算三角形之间的可见性。为了评估在可能的相机偏移δ下两个三角形t和q在碎片s处的潜在可见性,确定tδ和qδ,即,将tδ和qδ嵌入到相机偏移空间中。通过在±c(其在偏移空间中的体积/面积应被表示为cδ)内使tδ与qδ相交,可以区分三种情况:

(1)t△∩q△∩c△=t△∩c△

(2)t△∩q△∩c△=q△∩c△

(3)非以上两种情况。

在(1)的情况下,tδ在±c内部的部分与qδ重叠,即,对于采样t的每一个相机偏移,q也将被采样。因此,如果q对于所有的那些采样都更靠近相机,则t在采样s处将永远不可见。在(2)的情况下,三角形的关系是反过来的,并且如果t更靠近,则q将永远不可见。在情况(3)下,两个三角形都可以在不同的相机偏移下在s处产生可见的采样。

显然,这已经指向以下事实:当在cos中考虑可见性时,不需要明确地区分遮挡物和前面的被遮挡物,因为cos中的被覆盖空间的关系允许被认为要么是遮挡物、要么是被遮挡物。

确定三角形在cos中是否在另一个三角形的前面对应于确定三角形在所有的相机偏移下、对于像面上的固定采样将生成的准确的深度值。为了计算该深度值,考虑均匀光栅化中描述的公式[marcolano和treygreer.1997年.trianglescanconversionusing2dhomogeneouscoordinates,收录于关于图形硬件的acmsiggraph/eurographics研讨会的文集,acm、89-95]。对于采样位置s处的三角形,内插的1/w分量(其可解释为深度的倒数)为:

考虑到相机偏移,所述公式扩展为:

通过使用转置伴随矩阵和行列式计算倒数来对该方程求解ws,许多项抵消以得到:

dx、dy、dw和dadj全都是(p0,p1,p2,s)的函数,因此对于给定的三角形和某个采样位置是恒定的。所述结构示出通过添加深度信息将3dcos扩展到4d并且将2dcos扩展到3d,三角形/四面体被嵌入在相应的空间中的平坦的超平面上。该结果允许得出两个结论。首先,对于cos中的每一个点,在2d和3dcos(δw=0)这两者中,可以使用方程9来高效地计算对应的深度值。第二,2dcos可以看作是来自第三维度对应于深度的3d空间的三角形的正交投影。确定在±c内的该正交投影中的可见性导致给定的采样位置下所涉及的三角形的可见性。尽管更难想象,但是同样的考虑适用于其中深度形成第四维度的3dcos,其中降至3d的正交投影导致可见性。

通过将对于单个采样推导的考虑应用于渲染的图像的所有像素,可以计算针对围绕当前相机位置的移动、考虑到三角形对之间的遮挡的pvs。在任何采样位置下潜在可见的所有的三角形的简单并集将得到整个pvs。

为了还考虑到旋转移动,第一步是增大视野(fov)。因此,在当前视图左/右和上/下的采样位置也被考虑。然而,当用旋转的相机渲染时,采样位置将不与用更广的fov选择的采样重合。虽然三角形在参考视图中的两个相邻的采样位置处可能永远不会变为可见,但是旋转将拾取它们之间的采样,并且可能揭示考虑中的三角形。当计算pvs时,可以考虑更高的采样密度,从而得到pvs的良好逼近。

许多四面体的交点可能太耗时,尤其是当考虑到由于旋转而导致的附加采样时。类似于先前的工作[durand等人.2000年.conservativevisibilitypreprocessingusingextendedprojections.收录于关于计算机图形和交互技术的第27届年度会议的文集,acmpress/addison-wesleypublishingco.,239-248],用于3d区域的pvs也可以从多个2d区域计算得到,尤其是当考虑到相机旋转时:对于立方体基元,通过将相机放置在每个侧平面的中心并且将其维度与δ匹配,可以对所有的六个边界平面构造可见性。

图3示出可以如何在旋转角度减小的情况下对于所有的边、通过2d区域来计算用于3d区域的潜在可见集合(来自上方的视图)。具体地说,评估的相机位置对应于所有的侧平面位置。

通过附加地考虑接近180°fov,不仅考虑立方体基元上的所有的相机位置,而且考虑从该基元的所有的查看方向。整个侧平面pvs的并集pvs因此将用于立方体基元的pvs与360°fov匹配(这也将需要多遍)。使用基于侧平面的方法允许针对在hmd场景中更有可能的移动(比如,例如,前向、侧向平移和90°滚动)调整fov。设想的算法因此将多遍渲染整个场景(拟合期望的视图基元),并且递送pvs。

对于在光栅化期间使用cos的、pvs的实际实现,用于每个像素的cos必须被构造和解析。为了在每个像素位置处构造cos,满足的所有的三角形ti都需要被考虑,即,任何支持的相机偏移下的所有三角形都可以覆盖像素。为了对每个像素采集所有那些三角形,在渲染期间可以构造列表,类似于用于次序独立的透明性的方法[yang等人.2010年]。为了能够将可以覆盖像素的所有三角形都添加到列表,它们需要在光栅化之前被扩大尺寸。该扩大显然取决于最大相机偏移c,并且可能大于一个像素的尺寸。然而,可以使用与在gpu提供硬件支持的保守性光栅化之前采用的工作区类似的方法[hasselgren等人,conservativerasterization.gpugems2(2005年),677-690]。

将关于可能覆盖每个像素的碎片的每个三角形的信息存储在列表中允许按以下步骤对每个像素构造cos。作为围绕深度关系展开的可见性考虑,可能有益的是对这些列表进行排序(同样类似于次序独立的透明性)。碎片列表条目表示整个三角形,因此需要存储所有的顶点位置,以使得该三角形可以被变换到cos,并且其深度方程可以被计算。这还意味着,没有单个深度值可以与碎片列表中的条目相关联,并且条目的cos深度范围可能重叠。因此,排序可以仅被近似地完成,以使得所述列表被按准前后(quasi-front-to-back)方式处理。所描述的实现根据在每个列表中早早放置潜在遮挡物的最小顶点深度进行排序。

前面描述的步骤确保了所有的三角形和只有影响给定像素位置处的可见性的那些三角形最终在相应的列表中。如前所述,解析三角形对之间的可见性远远不够,因为只有前面的许多三角形的组合可以形成更远的三角形的遮挡物。

因此,在cos中的可见性解析期间采用遮挡物融合。遮挡物融合的想法常用于pvs构造期间的整个对象。本发明提出了适用于cos的对于三角形的高效版本,即,将三角形合并到cos中更大的相连接的多边形。遮挡物融合的益处是双重的。首先,考虑多边形和三角形的重叠可能比考虑许多三角形与一个三角形的重叠更高效。第二,融合的遮挡物可以作为整体遮挡三角形,而其个体部分可能是不够的。为了不用遮挡物融合得到相同的遮挡信息,cos中的被遮挡物的表示将必须针对所有的遮挡物三角形被单独裁剪以,而非实现相同的结果。

利用遮挡物融合,所述处理在数学上对应于

t△fused=t△0∪t△1∪t△2

o=q△∩t△fused∩c△.

其中tδi形成融合的遮挡物,并且o得到关于潜在可见性的信息。在没有遮挡物融合的情况下,所述处理对应于

q'△=q△\t△0\t△1\t△2

0=q′△∩c△.

第一个版本更快(如果tδfused可以被重复使用),计算效率高,并且允许对照qδ进行高效的测试。第二种方法的主要问题是,所有的中间的qδ\tδi的形状都可以变得任意地复杂,而融合的遮挡可以以其形状允许高效测试的方式构造。

通过将所述方法限于2dcos(如前面概述的),可以选择第一种策略,并且可以将三角形融合为更大的遮挡物,如果它们共享cos中的边的话。两个三角形共享cos中的边,如果它们还共享世界空间中的边的话。遵从该策略,闭合的表面是形成更大的遮挡物的唯一对象。

图4示出所提出的渐进可见性解析算法的示例步骤。活动的边被画地更粗,并且参考点被指示。活动的遮挡物轮廓总是对应于活动的边,外部的活动的边的交点被忽视。

更具体地说,第一个三角形qδ被转移到cos(a),并且被保存为潜在遮挡物oδ,0(b)。外部的三角形qδ被立即丢弃(c)。另一个三角形qδ被处理(d),并且形成第二个遮挡物oδ,1(e)。下一个三角形qδ是不可见的(情况b)(f)。共享两个边的三角形qδ(g)将遮挡物oδ,0和oδ,1融合为大的遮挡物oδ,0(h)。与轮廓相交的三角形oδ被保存(i)。

图5用伪代码示出根据本发明的实施例的用于渐进可见性解析的方法,其中示例步骤是针对图4中的一些三角形。所述方法遍历大致排序的三角形的列表(行2-47),并且确定一个三角形在其他三角形之后的可见性。先前检查的三角形被保存为潜在遮挡物,并且被合并为更大的遮挡物,如果它们共享边的话。

对于每一个三角形,确定其cos表示(行3)。所述方法然后计算其与cδ的重叠,丢弃可能已经在列表中但实际上在支持的相机偏移下不可见的三角形。这给予了列表构造方法保守地工作的能力,由于浮点不准确,该能力是必要的。为了确定在qδ和cδ之间是否存在重叠,所述方法将三角形的边与cδ相交(行5)。虽然存在执行该检查的更高效的方式,但是获得关于三角形边的附加信息,该信息被用于所述算法的后续阶段中的更高效的测试。边被分类为要么是在内部、不准确的,要么是交叉的。内部的边完全被包含在cδ中,交叉的边从cδ外部到达。完全在cδ的外部的边被标记为不活动,并且在所述算法期间被忽视。如果所有的边都是不活动的(行10),则三角形要么完全在cδ的外部,并且在该采样位置处将是不可见的,要么完全覆盖cδ。为了检查后者,可以简单地将o插入到三角形的边方程中以确定它是否覆盖cos的原点,类似于gpu上的光栅化利用三角形边方程的方式。

如果三角形在第一步期间没有被丢弃,则设置关于该三角形的元信息(行11-12)。这包括三角形的既在qδ内部、又在cδ内部的一个或三个点,这些点被称为三角形的参考点。如果三角形整个覆盖cδ,则选择原点。否则,对于被标记为在内部或交叉的每个边,我们选择一个代表点。这是边的端点(q0,q1或q2)中的任一个,取决于哪些点位于cδ的内部。如果两个端点都在cδ的外部(即,我们正在选择交叉的边的参考点),则计算与cδ的准确交点。此外,评估cos中的深度函数所需的系数被计算,并被存储以供稍后使用。

在手边有该信息的情况下,可以运行实际的可见性测试(行14-35)。对于每一个三角形,假定它最初是可见的。它只有在确定它被任何遮挡物隐藏时才被丢弃,所述方法遍历此迭代(行15)。对于每个遮挡物,它是否覆盖cδ的信息被存储,并且在它覆盖cδ的情况下,跳过所述方法的大部分(行15-30),因为在遮挡物和cδ内的三角形之间肯定完全重叠,并且以上情况(2)适用。

如果遮挡物不覆盖cδ,则需要确定occluder△∩q△∩c△=q△∩c△,,即,qδ是否完全在cδ内的融合的遮挡物的内部。为此,首先确定在三角形和cδ内的遮挡物的轮廓之间是否存在重叠。该步骤在依赖于边状态时明显变得高效很多。代替明确地保存周围的轮廓,所述方法在所有的遮挡物三角形tδ上进行迭代(行18),并且对照qδ的所有边测试所有的遮挡物三角形边。如果任一边是不活动的,则测试被简单地跳过。这不仅包括cδ外部的边,而且还包括遮挡物内部的边,遮挡物内部的边在融合三角形时被设置为不活动(行28)。由于不是明确地存储遮挡物的轮廓,所述方法在该步骤中可能做附加工作。然而,考虑到gpu实现,该选择是明智的,因为它显著地减少了动态数据管理、存储开销和间接性。

为了计算两个边之间的关系,首先测试它们是否相同(行23),如果它们相同,则所述方法存储用于稍后融合三角形与正被测试的遮挡物的信息。否则,检查在边之间是否存在交点(行25-26),并且检查它是否在cδ的内部。如果所述边中的任一边被标记为在内部,则所述方法实际上不需要计算准确的交点i,因为然后知道交点必须在内部。只有在两个边交叉时,所述方法才继续验证交点是在内部、还是在外部。在交点在外部的情况下,它被忽视,因为它不影响occluder△∩q△∩c△。如果它在内部,则知道qδ到达tδ的外部和cδ内的occluder△的外部。因此,三角形在所有的相机偏移下都不被occluder△遮挡,并且所述方法继续至下一个遮挡物(行27)。

在所述算法的此时,如果在遮挡物的轮廓和正被测试的三角形之间没有发现重叠,则要考虑六种可能的情况。

更具体地说,图6示出cδ内的没有轮廓交点的六种可能的情况。(a,b)、(c,d)和(e,f)可以基于它们各自的参考点位置区分开:

(a)qδ完全在occluder△的内部

(b)qδ仅在cδ内在occluder△的内部

(c)occluder△完全在qδ的内部

(d)occluder△仅在cδ内在qδ的内部

(e)occluder△和qδ完全不相交

(f)occluder△和qδ仅在cδ内不相交

为了区分这些情况,所述方法使用qδ的参考点以及为每个遮挡物保存的参考点(所述算法中的occluder.ref),这些参考点必须是cδ内部的遮挡物轮廓上的点。如果occluder.ref在qδ内部(这可以同样通过使用边方程进行普通测试),则要么是情况(c),要么是情况(d)。然后,遮挡物不覆盖qδ,并且所述方法可以继续至下一个遮挡物(行17)。遮挡物的参考点在三角形与遮挡物融合或者作为新的遮挡物被插入之后更新(行47)。此外,遮挡物的参考点必须是遮挡物的轮廓上的点,否则所述方法可能无法区分情况(a,b)和(c,d)。该测试背后的基本原理是,如果在遮挡物的轮廓和qδ(在cδ的内部)之间没有交点,并且轮廓(在cδ的内部)上的点在qδ的内部,则整个遮挡物轮廓(在cδ的内部)必须包含在qδ中。

为了区分(a)、(b)(这二者都导致q不可见)和(e)、(f)(这二者都导致q不被遮挡),所述方法测试三角形参考点是否在occluder△∩c△的内部。基本原理同样与前一种情况下的基本原理相同,只是反过来。然而,因为已经排除遮挡物包含在qδ中,所以所述方法可以选择∈q△的任何点作为参考点。因为参考点被选择位于cδ的内部,所以所述方法只需要确定它是否在occluder△的内部。然而,遮挡物可能具有凹形形状,因此测试比在第一种情况下涉及得更多,并且它被计算作为最终检查(行32)。为此,所述方法再次在所有的遮挡物三角形上迭代,并且普通地检查点是否在它们中的任何一个的内部。在是的情况下,已经验证了q△∩c△在occluder△的内部。然而,为使q被遮挡,q必须在遮挡物的后面,这在参考点处使用遮挡物三角形的深度方程被验证(行34)。这只有在三角形不穿透时才是足够的。为了支持该情形,将必须计算qδ和所有的遮挡物三角形之间的cos中的准确的3d星座。

如果所有的测试都得到q是可见的,则将qδ添加到遮挡物,并且更新它们的状态(行47-37)。如果三角形与其他遮挡物共享一个或多个边,则它被附连到那些遮挡物,从而创建更大的融合的遮挡物。该步骤还可以合并多达三个遮挡物。此外,所述方法将共享的边设置为不活动的,以使得它们不被针对边重叠进行测试。另外,检查遮挡物边中的任何一个是否仍是活动的或交叉的。如果都不是,则遮挡物覆盖cδ,并且所述方法设置全覆盖(coverall)标志以加速对遮挡物的测试。

在所有的三角形都已经被处理之后,所有的潜在可见三角形都已经作为遮挡物被插入,并且它们可以直接被输出作为用于采样s的pvs。当所述方法正在根据最小深度对列表进行排序时,应首先对潜在遮挡物进行处理。然而,因为在三角形之间可能存在深度重叠,所以稍后到达的三角形可以覆盖已经被标记为cδ内部的遮挡物的三角形。为了测试该情形,所述方法可以再次对照整个遮挡物列表测试每个三角形。然而,在发明人进行的实验中,额外被丢弃的三角形的数量变得可以忽略。

到目前为止的所有考虑都只考虑了单独的采样位置。然而,对于旋转,有必要针对之间的位置来考虑cos。此外,如果采样之间的位置被处理,则以降低的分辨率运行可见性一遍处理。就该目标而言,分别用另两个维度(即,x和y中的采样偏移δx和δy)来扩展cos。它们对于采样位置s形成线性偏移,而±pixelsize/2的最大偏移确保图5所示的方法考虑视口上的所有可能的采样。对于点,用于2dcos的方程(8)扩展为:

这对应于4d空间中的线。这还意味着,三角形边在沿着δx和δy维度移动时滑动并旋转。

虽然该扩展使cos明显更复杂,但是图5所示的方法的改变是可管理的。主要改变涉及边相交。代替确定三角形边是否与cδ相交(行5),修改的方法需要确定它在任何δ下是否与cδ相交。同样适用于边-边相交(行27)。

所有的其他的计算在以下假定下都可以保持相同:首先,三角形和遮挡物的深度关系在任何δ下保持相同。已经被排除该假定适用的穿透的三角形。第二,对于δ=0,遮挡物和三角形之间的内部-外部测试延续到所有的采样偏移。如果轮廓-三角形交点算法报告在任何采样偏移下是否存在交点,则该假定适用。如果不存在任何交点,则可以利用δ=0来运行遮挡物参考点检查(行17)和三角形参考点检查(行32)以对所有的δ得出结论。

采样偏移下的边-cδ交点和边-边交点的问题基本上是相同的问题,其中第一个不将任何偏移应用于cδ的边界边。因为只对是否存在交点、而非相交的准确位置感兴趣(除非两个边都被标记为交叉),所以可以使用对于线段交点检测的简单测试。计算所有组的点三元组的方位形成这样的高效测试(忽视采样偏移):

0=(y1-y0)·(x2-x1)-(x1-x0)·(y2-y1),

其中[xiyi]t是点i的坐标。

通过对于所有点插入方程10,这些计算容易扩展到采样偏移维度。对所得方程求解δ得到线,该线描述在步进遍历采样偏移维度的同时所述三个点的方位何时改变。对于所有四组方位计算该线得到具有不同方位的区域。更经常的是,区域改变发生±pixelsize/2,因此不需要考虑。如果它们在内部发生,则所述方法可以简单地计算所述线的交点,即,两个方位改变的点。通过在忽视翻转的那些方位的同时评估这些点下的线段交点的检测,允许高效地测试在任何采样偏移下是否存在线段交点。

唯一剩下的问题是确定检测到的被标记为交叉的两个边的交点在所有的采样偏移下是否在cδ的外部。不幸的是,描述准确的交点的函数在δ中是非线性的,并且不允许高效的计算。然而,通过将一个边的无参数直线方程插入到另一个边的参数化方程来表达交点导致δ中的双曲线。计算该函数的一阶导数并且将它设置为零导致用于参数化的边(在其下可能出现交点)的最大参数范围。通过额外考虑±pixelsize/2处的相交参数和由边本身引入的边界(0,1),结果得到在其下可能出现交点的参数范围。另外,由于边是线性构造,所以每个边点的最大位移由其端点的最大位移给出,其端点本身由方程10给出。评估用于参数范围的极值的直线方程并且用δ下的最大端点位移扩展所得的δ范围给出cos中的边的交点可能在哪里出现的保守估计。如果该保守估计不与cδ相交,则边交点肯定在cδ的外部。使用保守估计在这里导致pvs可能增大,但是永远不会移除必要的三角形。

图7示出在服务器上实现的根据本发明的另一实施例的用于流式渲染的方法。

在步骤610中,通过使用大量潜在相机/视图偏移,基于包括多边形(三角形)和当前相机视图的图形数据来构造多边形的潜在可见集合。cospvs算法在gpu上、通过使用opengl和cuda的组合来实现。相同的功能性和类似的性能也可以通过使用任何其他的图形api和计算模式描影器执行来实现。

从简单的几何结构输入开始,计算pvs,这得到三角形列表。

pvs的创建涉及对于多达六个光栅化视图的多个2dcos评估的组合。对于支持360°旋转的立方体视图基元,六个视图需要被光栅化。通过使旋转限于围绕y轴的180°,三个视图就足够了。

在步骤611中,对于这些视图中的每个,扩大每一个输入的三角形以覆盖在任何支持的相机偏移下可能被它碰到的所有碎片。为此,在几何结构描影器中采用与保守光栅化类似的方法[durand等人.2000年]。围绕每个顶点的三角形扩大必须既考虑采样之间的距离、又考虑入方程10中所示的以1/wp缩放的最大相机偏移。该事实略微使所述方法复杂化,因为计算三角形的边方程并且将它们移开的常见方法是不可能的,因为如果顶点具有不同的w分量,则边将受旋转的约束。因此,计算所有的四个最大顶点偏移位置,并且选择离初始边最远的顶点偏移位置来构造三角形覆盖范围的保守估计。如果顶点在相机的后面,即,如果它们的w坐标是负的,则所讨论的方法可能失败。在这些情况下,边在相应地移动它们之前被裁剪到附近平面。当使用裁剪矩形法来构造输出几何结构时,仅创建单个三角形仍是足够的。

在步骤612中,在碎片描影器中进行碎片列表构造,其中原始的三角形坐标被插入到碎片列表中。它们被简单地从几何结构描影器传递。对于碎片列表构造,使用具有头指针和用于每个列表的计数器的单链接列表。用于构造这些列表的成本略高于仅考虑透明性时,因为几何结构已经被扩大。为了减少存储在列表中的元素的数量,可以将早期z丢弃值与每个列表一起存储:在检测到覆盖整个cos的三角形的情况下,可以使用利用三角形最大深度的原子最小指令来更新早期z。将其他三角形最小深度值与存储的早期z值进行比较(在它们被添加到列表之前)允许我们丢弃它们,因为它们在给定采样下可能永远不能被看见。

接下来的步骤涉及划区间(binning)和排序。当用于所有的渲染的视图的所有碎片的pvs将被合并时,所有的列表都可以被存储在单个缓冲器中,并且在单个步骤中被解析。在不同的列表尺寸上工作涉及迥然相异的步骤数。对于短的列表,将想要使用单个线程,中间尺寸的列表可以在小的线程组中(例如,在扭曲内)处理,长的列表应被许多线程进行工作。

为此,首先在步骤613中根据列表的长度来对这些列表划区间,列表的长度连同列表的头指针一起存储。这利用使用原子操作的简单的cuda内核来进行。目前,区间被用于2一直到256的长度的所有的功率,区间尺寸然后被增大128,一直到达到15616并且大于该长度的所有长度都被同样地处理为止。

在步骤614中,根据所有三角形的最小顶点深度来对所有的列表进行排序。非常短的列表(<8个元素)被以每个列表一个线程进行排序。对于列表尺寸<64,使用根据列表长度的、按子扭曲(sub-warp)尺寸的组的双调排序。对于具有<4096个元素的列表,使用块内的基数排序[merrill.2015年.cubv1.5.3:cudaunbound,alibraryofwarp-wide,block-wide,anddevice-widegpuparallelprimitives.(2015年)],对于更大的列表,使用全装置基数排序。排序内核不仅对列表进行排序,而且还从链接的列表表示将它们提取到平坦化阵列表示中以用于在解析步骤期间更快速地访问。不同的排序内核可以在不同的流中执行,并且可以在gpu上并行运行。

在步骤615中,在给定的大量不同的可能的相机视图下,对单个的三角形的可见性进行解析。解析步骤还区分不同的列表尺寸。非常小的列表再次用直接实现图5所示的方法的单个线程运行。小的列表利用子扭曲组来执行。为了使所述算法并行化,首先对于所有的qδ并行执行遮挡物融合,然后对照融合的三角形对每个三角形进行测试。三角形融合法可以依赖于高效的全扭曲通信原语,诸如寄存器重组指令和扭曲投票。三角形数据被存储在共享存储器中。对于更大的列表,相同的步骤被执行,但是依赖于共享存储器进行通信。随着列表增长地更大,由于共享存储器约束,并不是所有的三角形都在解析之前是可融合的。在这些情况下,所述方法在批次的基础上工作,其中每个线程装载一个三角形,执行与所有其他同时传入的三角形和来自先前的迭代的存储的三角形的遮挡物融合,计算其可见性,并且只有在三角形可见时才将该三角形添加到存储的遮挡物。该处理继续进行,直到整个列表被处理为止。在所述方法用完共享存储器存储中间结果的情况下,遮挡物集合不变,三角形被标记为可见,但是不被添加到共享存储器中的遮挡物。由于列表的排序,最重要的遮挡物无论如何都应被第一个构造。

如果三角形是可见的,则在全局存储器中设置指示它需要被描影并且被传输给客户端的标志。

为了确保当构造该三角形列表时基元次序不变,在步骤616中使用前缀和(prefixsum)来压缩加标志的三角形的数组。

为了在步骤620中的对象空间描影,计算对于每个三角形的所需采样和描影的大致数量,将该数量存储在在步骤630中压缩的纹理中,并且将该数量传输给客户端。

在客户端端,根据当前视图执行传输的三角形的简单的纹理化渲染。

如果客户端的视图到达支持边界的外部,则情况可能是客户端将不能从它从服务器接收的几何结构构造完全正确的视图。错误的去遮挡可能出现,或者几何结构可能完全缺失。

所需视图的预测可以缓解该情况。可以训练深度神经网络以在场景特性给定的情况下预测用户移动。这将根据使用情况、对场景的不同部分得到就平移和旋转而言所需的相机边界。

缓解边界外视图渲染的感知到的不正确(当这种情况被客户端检测到时)的另一方法可以是修补错误的场景区域(patel等人,reviewofdifferentinpaintingalgorithms;internationaljournalofcomputerapplications,2012年,vol.59,no.18,p.30-34)或者利用基于图像的渲染(ibr)方法中的一种。然而,这些方法引入了它们自己的伪像集合,所以所述方法不能保证在支持的边界外部构造完全正确的视图。诸如以下的方法可以被用于该目的:异步空间扭曲、前向扭曲技术[georgewolberg.1998年.imagemorphing:asurvey..evisualcomputer14,8-9(1998年),360-372.h.ps://doi.org/10.1007/s003710050148],诸如通过网格[piotrdidyk,tobiasritschel,elmareisemann,karolmyszkowski,andhans-peterseidel.2010b.adaptiveimage-spacestereoviewsynthesis.invision,modelingandvisualizationworkshop.siegen,germany,299–306.;kyungminlee,davidchu,eduardocuervo,johanneskopf,alecwolman,yurydegtyarev,sergeygrizan,andjasonflinn.2015.outatime:usingspeculationtoenablelow-latencycontinuousinteractionformobilecloudgaming.getmobile:mobilecomp.andcomm.19,3(dec.2015),14–17.h.ps://doi.org/10.1145/2867070.2867076;marcolanoandtreygreer.1997.trianglescanconversionusing2dhomogeneouscoordinates.收录于关于图形硬件的acmsiggraph/eurographics研讨会的文集.acm,89–95.]或射线追踪[svenwidmer,dpajak,andr′eschulz,karipulli,jankautz,michaelgoesele,anddavidluebke.2015.anadaptiveaccelerationstructureforscreen-spaceraytracing.收录于关于高性能图形的第7届会议的文集(hpg’15).acm,newyork,ny,usa,67–76.h.ps://doi.org/10.1145/2790060.2790069]或后向扭曲法[huwbowles,kennymitchell,robertw.sumner,jeremymoore,andmarkusgross.2012.iterativeimagewarping.computergraphicsforum31,2(may2012),237–246.;diegonehab,pedrov.sander,jasonlawrence,natalyatatarchuk,andjohnr.isidoro.2007.acceleratingreal-timeshadingwithreversereprojectioncaching.inproceedingsofthe22ndacmsiggraph/eurographicssymposiumongraphicshardware(gh’07).eurographicsassociation,aire-la-ville,switzerland,switzerland,25–35.h.p://dl.acm.org/citation.cfm?id=1280094.1280098;leiyang,yu-chiutse,pedrov.sander,jasonlawrence,diegonehab,hugueshoppe,andclaral.wilkins.2011.image-basedbidirectionalscenereprojection.acmtrans.graph.30,6,article150(dec.2011),10pages.h.ps://doi.org/10.1145/2070781.2024184]改进的点溅射[shenchangericchenandlancewilliams.1993.viewinterpolationforimagesynthesis.收录于关于计算机图形和交互技术的第20届年度会议的文集(siggraph’93).acm,newyork,ny,usa,279–288.h.ps://doi.org/10.1145/166117.166153]。

存在在客户端上计算用于pvs几何结构的正确的描影数据的多种方式。最简单的方式是,客户端存储计算真实描影所需的所有数据,并且针对从服务器接收的减小的几何结构集合计算它。因为这可能占据客户端上的大量资源,或者甚至跨出客户端的可能性,所以服务器可以预先计算描影数据,并且将它连同pvs几何结构数据一起发送给客户端。描影可以被划分为视图相关的部分和视图无关的部分。两个部分都可以在服务器上计算,或者视图相关的部分可以在给定准确视图的情况下额外在客户端上计算,然后被正确地与从服务器接收的视图无关的部分合并。

描影数据可以是每个三角形、每个视图、每个像素或每个任意采样地采集的。该描影数据可以被存储在颜色缓冲器或纹理中以允许快速解释。它然后将在服务器上被编码,连同pvs几何结构数据一起被发送给客户端,然后被客户端解码并且被用于渲染。

预测的移动也可以被直接包括到cos中,并且被传输给客户端。

为了评估本发明方法,针对具有各种特性的3d场景,对它进行测试。所提出的pvs算法在具有16gb的ram和nvidiatitanx(pascal)的intelxeoncpu3.5ghz上运行。对于所有的测试,考虑5至10cm和±30度的旋转的头部移动。相机fov为60度。

图8示出在不同的使用情况场景期间记录的大户外场景(4.6m三角形)的示例视图。所述场景对于本发明方法提出了各种挑战,包括长碎片列表、小斜角和多层略微偏移的结构。

从参考视图(a)开始,对于围绕相机的区域确定潜在可见集合(pvs)(b)。为了构造pvs,收集可以覆盖不同尺寸的每个碎片列表中的碎片并且解析所提出的相机偏移空间中的可见性的所有三角形(c)。利用用于围绕参考位置的视点的pvs渲染的新颖视图是完整的且没有孔的(d)-(f)。

所述方法清楚地得到当前可见的三角形和对象,这些三角形和对象在头部移动下可能变得可见。特别地,屋顶遮挡场景的大部分,屋顶后面没有几何结构被分类为可见的。当视点在屋顶的右边时,向右的轻微移动或旋转使视图开放到后面的山脉。相应的三角形被清楚地分类为潜在可见。这指示遮挡物融合和潜在可见性这二者都正确地工作。

下表示出pvs的尺寸、各个步骤的计算时间、以及用于测试场景的区间分布:

对于被测试的排练的平均的测试场景,pvs算法使三角形的数量从4.6m减少到480至590k。在移动hmd场景中,这样的减少将导致客户端上巨大的带宽减小和渲染时间节省。

可以看出,对于小分辨率的计算pvs已经涉及需要被解析的多个数百万个条目。尽管我们的实现只是具有大规模优化潜能的原型,但是它每一秒可以确定多达2千5百万个列表条目的可见性。对于vikingvillage,列表永远不会长于大约15000个,并且平均来说在40到100个之间。另外,热图示出最常见的是几个集中区域有非常长的列表长度,而大多数列表只示出低等至中等计数。显然,可见性解析步骤主导性能,接着是快5倍到10倍之间的排序步骤。三角形扩大与碎片列表创建、区间和压缩对性能具有可以忽略不计的影响。

测量还示出利用400x200的低分辨率工作是合理的。本发明算法保证对于可见性,采样之间的位置也被考虑。分辨率的提高导致性能的准线性降低。然而,当进一步降低分辨率时,性能变糟,这指示400x200对于被测试的场景似乎是甜蜜点。显而易见地,随着相机偏移增大,三角形被进一步扩大。因此,碎片列表变得更长,并且所述算法需要更多时间。然而,支持的相机移动中的翻倍不导致两倍的放慢,这指示所提出的算法可以针对较大的相机偏移很好地缩放。

从关于三角形在哪些相机偏移下覆盖某个像素的考虑开始,本发明引入了相机偏移空间(cos)。在cos中,该覆盖范围是简单的几何形状。通过包括描述对于不同的相机移动、在采样位置处的三角形的深度的函数,可以对于各种相机偏移确定一个三角形是否将被另一个三角形覆盖。通过将该方法扩展到渲染场景的所有采样和采样之间的位置,示出整个潜在可见集合(pvs)可以被构造。与所有的pvs算法一样,被整合用于闭合表面的遮挡物融合是非常重要的,对于所述闭合表面,来自三角形数据的连接信息被飞速地提取。

通过识别遮挡物和传入的三角形的潜在星座,提供了用于确定三角形相对于融合的遮挡物的可见性的高效算法。通过用opengl和cuda的组合实现所述算法,本发明为在线pvs算法提供了近乎实时的速率。在各种场景上测试指示本发明方法工作非常可靠并且适用于用于头戴式显示器的流式渲染场景。

总的来说,本发明方法提供了飞速地工作并且没有预处理的第一pvs算法。它甚至不需要三角形连接信息或关于哪些三角形构成对象的信息。因为所述方法逐帧地工作,所以动态对象自然被支持。所有的信息都是直接从输入的三角形计算的。

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