在渲染VR(立体视图)环境时,你们是否建议仅进行2个视锥检查,以确定在视锥剔除过程中要绘制的内容,或者是否有其他一些检查方法可以将两个视锥相结合?

#1 楼

如Oculus的Cass Everitt创建的这张图所示,创建一个包含两个单独的眼睛视锥细胞的视锥面非常容易。您只需要将该平截头体的顶点放在眼睛之间,然后放在眼睛后面一点。您还可以增加近平面距离以匹配眼睛的视锥细胞的原始近平面。原来的两个平底锅。两只眼睛之间水平方向上有一小部分。同样,该图未显示垂直尺寸,但是将视锥的顶点向后拉使其在原始视锥的上方和下方包含一定的空间。但是,出于实际淘汰目的,这可能并不重要。平截锥体的选择通常还是保守的,多余的空间只有几厘米的厚度。

也可以简单地剔除原始的平截锥体的顶部和底部平面(在眼睛之间共享),以及外侧平面。从技术上讲,这些平面并不构成一个平截头体,但是,如果使用一次同时针对一个平面进行测试的“常规”剔除算法,该算法将可以在您希望提供的任何一组平面上愉快地工作。
<最好在眼睛之间共享平截头锥体剔除,LOD选择等,而不是每帧重做两次,这是一种优化立体渲染的CPU成本的好方法。如果要使用一次绘制双眼的渲染方法(例如实例立体渲染),这也是前提条件。

评论


$ \ begingroup $
感谢Nathan,这正是我所追求的,我想问一下您从哪里得到的这张图,在oculus的任何公共文档中都有吗?
$ \ endgroup $
–加里·沃利斯(Garry Wallis)
2015年11月19日下午5:34

$ \ begingroup $
@GarryWallis Cass在几个月前发布了推文。
$ \ endgroup $
–内森·里德(Nathan Reed)
2015年11月19日下午5:37

#2 楼

如果需要的话,我已概括了Everitt的结果。



作为奖励,从眼睛透视矩阵中提取left0 / right0的一种方法是:

left0   = n0 * (Mle13 - 1) / Mle11;
right1  = n1 * (Mre13 + 1) / Mre11;


如果您有行专业。转置为专栏专业。 c.f.这个答案

#3 楼

请注意,仅当眼睛的组合视场小于180度时,才使用单个视锥进行剔除。现在有VR头显,即Pimax 5k +和StarVR在200度左右具有较大的视野。无法为180度以上的视场构造传统的视锥台或单个投影矩阵。

这些头戴式耳机使用成角度的屏幕,因此投影平面和视空间中的前向矢量不平行。此处其他答案的方程式假定它们是平行的,并且当该假设错误时将产生错误的结果。

单个组合视图视锥仍可能有用,但是您的代码应该准备处理在某些情况下,如果无法构建此结构以确保其将来可用。另外,也可以考虑按每个眼睛的角度进行剔除,或切换到可以表示大于180度FOV的基于角度的剔除。