通过现有的编解码器深度stream媒体的最佳途径

我正在开发旨在用于主要以静态第三人称视角设置的游戏的开发系统(和游戏)。 我们用CG和摄影技术来制作我们的风景。 我们的背景技术由生产级渲染器脱机。

为了允许运行时图像与背景技术进行适当的交互,我编写了一个程序,将Mental Ray的深度输出转换为纹理,像素着色器绘制四边形以使Z数据来自纹理。

这种技术工作得很好,但是现在我们已经决定了一些场景之间的摄像机角度变化应该是animation的。 animation本身很容易从我们的CG模型产生。 我们打算将它编码为一些高清video编解码器,如H.264。

问题在于,为了在屏幕上保留我们的运行时图像,需要为每个video帧加载深度缓冲区。 由于带宽,video的深度数据将需要被有效压缩。

我研究了执行深度信息的时间压缩的方法,并在这里find一个有趣的研究论文:

http://web4.cs.ucl.ac.uk/staff/j.kautz/publications/depth-streaming.pdf

该方法建立了16位深度值和YCbCr值之间的映射。 映射被调整为现有video编解码器的属性,以便在YCbCr经历video压缩之后最大化解码深度的精度。 它允许在后端使用现有的,未修改的video编解码器。

我正在研究如何用尽可能less的工作来解决这个问题。 (我们的游戏引擎本身就是原生的C ++,目前用于Win32和DirectX,尽管我们已经努力保持平台依赖性,因为我们打算使用其他端口。

我们在引擎中还没有运动video设备,但是最终还是会需要电影的。 我打算使用一些现成的运动video解决scheme,我们可以插入到我们的引擎,并没有select一个。 这个新增加的要求使得select一个更困难,因为我们现在需要绕过其中一个stream的色彩空间转换,还需要以锁步方式同时播放两个stream,在某些情况下,audio打开其中之一(用于电影)。

我也想知道是否有可能(或者甚至是有用的)在像素着色器中从YCbCr转换为深度,或者如果最好在CPU中完成,并将产生的深度值分别加载到locking的tex中。 不幸的是,转换涉及每个像素的分支逻辑。 (有更多天真的映射,不需要分支,但他们产生较差的结果。)它可以减less到一个表查找,但表是32MB。

编程对我来说是第二性质的,但是我对pix着色器并不熟悉,并且对现成的video解决scheme没有什么了解。

因此,我会对其他可能涉及深度数据stream,像素着色器和/或现成编解码器的人的建议感兴趣,关于建议的应用程序的可行性和现成的video系统将最好的相处与这个用例。