admin管理员组文章数量:1567522
2024年6月7日发(作者:)
在移动VR中加速修正GPU桶形失真在上一篇文章中,我讨论了一个解决方案,
即通过使用单个缓冲带渲染减少VR中的延迟。我提到,VR对图像质量的要求相
当高,因为GPU相比传统的移动应用程序需要做更多的工作。
工作负载增加的其中一个原因是对象内容需要进行两次渲染(每单位矩阵渲染一
次)。另一个原因是GPU最后一次渲染使用了桶形失真过滤(每单位矩阵再渲染
一次)。这使得图像处理器的工作负荷特别大,因此我们需要思考良策以降低负
荷。
为何使用透镜?
您可能会有疑惑:当今的移动设备功能已十分强大,为什么我们还需要这些学校
里习得的老旧的光学技巧?
VR耳机使用透镜有两大主要原因:
1 .透镜可以拓宽视野
2 .透镜可以使屏幕与你的眼睛离得更近
例如,如果您的手机屏幕是I15cmX6.5cm,那么每只眼睛水平位置可视的屏幕宽
度为5.75cm。由于屏幕与人脸非常靠近,因此相比人眼实际可视的宽度,这个宽
度还远远不够。在两个屏幕之间放置一块透镜,那么不管是水平视角还是垂直视
角,可视范围均会增加。
使用透镜,我们可以使虚拟世界比实际世界看起来大很多。
其次,有了透镜,即使用户的眼睛与屏幕非常接近,但其看到的屏幕效果比实际
上的却远很多,这样使得用户体验更为轻松。
显然,也存在一些缺陷。由于失真,图像的某些部分将被压缩,从而将失去一些
信息;而剩下的部分则意味着要用更高的分辨率进行填充。同时,透镜导致的一
些色差也需要被修正。
桶形失真
由于存在桶形失真,我们需要应用反向转换,这样屏幕发出的光线才比较适宜。
而这种转换的完成主要取决于物理透镜的设计。
在VR中,透镜设计相当复杂。Ocu1usRiftCV1是一款做的非常好的VR案例。显
然,所有这些设计的决策都会影响到修正图像所需的算法。
桶形失真最常见的方法是使用。当然,还有很多其他可用的失真模型一一如使用
多项式函数或曲线。一个常见的问题是创建的是非零逆函数(non-triva1)O为
简单起见,我们将使用以下模型用于桶形失真,其逆函数可以进行计算:
α定义了我们想要应用的失真量,而α由理论透镜设计进行界定。P中的输入
值X和y在[-1,+1]之间是标准化的。
p(x,0)的正向和反向失真函数,α=0.3
-1.0 -0.5 0.0 0.5 1.0
Q呈增长态势的桶形失真图
基于像素的修正VS基于网格的修正
一个方法便是,在显示最后图像之前,在后期处理片段着色器中进行最后渲染
的修正。假设将VR内容渲染至每矩阵的帧缓冲对象(FBO)中。使用OPenG1
ES3.0,顶点着色器和片段着色器便如下所示:
Aversion300es
inhighpvec4posVtx;
uniformmat4mvpM;
voidmain(void)
(
g1_Position=mvpM*posVtx;
}
Aversion300es
inhighpvec2texFrg;
outhighpvec4frgCo1;
uniformhighpvec2centre;
uniformhighpsampIer2DtexSamp1er;
voidmain(void)
(
highpvec4co1=vec4(0.0,0.0,0.0,1.0);∕*baseco1our*/
highpf1oata1pha=0.2;∕*1ensparameter*/
∕*1eft/Righteyeares1ight1yoffcentre*/
∕*Norma1izeto[-1,1]andputthecentreto“centre"*/
highpvec2p1=vec2(2.0*texFrg-1.0)-centre;
∕*Transform*/
highpvec2p2=p1/(1.0-a1pha*1ength(p1));
∕*Backto[0,1]*/
p2=(p2+centre+1.0)*0.5;
if(a11(greaterThanEqua1(p2,vec2(0.0)))&&
a11(IessThanEqua1(p2,vec2(1.0))))
(
co1=texture(texSamp1er,p2);
}
frgCo1=co1;
)
centre允许将失真集中的部分稍微移出FBO的中间位置,通常透镜并不完全集
中到屏幕的左边或右边。
这是我们可以使用的用来计算失真的最准确的方法。不过就GPU的使用而言,
这种方法的成本也非常高。由于我们仅处理6个点(两个三角形到输出一个矩
形),因此顶点着色器运行很快。另外,片段着色器需要在屏幕上为每个像素进
行转换。所以对于1920X1080像素的显示,要进行2073600次运算及纹理查
找。
当然,我们可以做得更好!每个程序员都知道,良好性能的关键在于预计算和近
似值。如果观察游戏的对象内容,可以看到这些对象中有很多近似值。像级联
阴影贴图那样进行阴影计算。不过在未来有了光线追踪,这将得到极大的改
金
「O
版权声明:本文标题:在移动VR中加速修正GPU桶形失真 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/shuma/1717719870a602318.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论