APP下载

基于纹理渲染与纹理映射的实时球幕图像生成方法

2014-03-31柳喆俊

艺术与设计·理论 2014年1期
关键词:虚拟现实

柳喆俊

摘 要:大多数影像设备与3D API都是基于平面影像设计的,因此,一般而言实时渲染图像并不能直接运用于球幕显示,必须通过称为“几何校正”(Geometric Correction)的运算才能产生正确的最终结果。目前主流的几何校正方法或者依赖昂贵的硬件设备完成,或者需要通过复杂的算法实现,对于缺少程序设计背景的创作者来说无法自由掌控。文章介绍了一种利用3D API中成熟的纹理渲染(RTT)与纹理映射(Texture Mapping)技术生成球幕图像的方法,不涉及任何C++或HLSL编程,在任何支持RTT的三维引擎上均可实现。

关键词:实时纹理渲染 纹理映射 球幕 虚拟现实 交互艺术

一、研究背景

如何在球幕上根据需求产生无变形的图像已经有了成熟的解决方案。但根据作者的调研,其中绝大部分解决方案所针对的都是预渲染电影而非实时图像。即使有少量针对实时图像的解决方案通常也需要创作者具有丰富的编程经验才能将之与常用的实时三维引擎嫁接起来,而这对于许多非程序员背景的虚拟现实创作者或交互艺术家来说显然是难度过高了。因此,本文将介绍一种简单、通用,并且运行效率令人满意的方法生成实时球幕三维影像,以帮助不具备编程经验的创作者更方便、更自由地创作球幕互动作品。

二、研究案例

(一)案例概述

为了便于陈述,本文将以笔者创作的球幕互动作品《入侵》为原型进行分析(图1)。《入侵》是一款互动装置作品,利用投影机在悬挂于半空的球幕上投射出一派生机盎然的自然美景。当观众进入球幕下方以后,其运动会被球幕顶部的传感器捕获,并被“解读”为人类对于自然的入侵。观众人数越多,动作越剧烈,对于自然的破坏就越严重:环境的恶化会实时地反应在球幕影像之上。自然资源日益枯竭便会引发战争,如果观众不及时停止运动(意即停止对于自然的“破坏”),最终将会导致“核子末日”的来临。

(二)硬件系统

球幕:直径为3.5米,圆心角为180°,是一个标准的半球体。本文所介绍的方法适用但不仅适用于180°的半球体,也可以用小于180°的球冠甚至是非标准的椭球体。

投影机:工程投影机,分辨率为1024x768,亮度为4500流明。投影机镜头采用了视场角为180°的数字鱼眼镜头。

(三)软件工具

三维动画软件:笔者选用的是3ds Max这款三维动画软件。事实上你可以选择包括Maya、Softimage在内的任何一款主流三维软件,只要确保渲染器支持自定义相机镜头即可。

三维引擎:笔者选用的是Quest3D这款三维引擎,同样,你可以选择Unity 3D、Torque 3D等各种不同的三维引擎,只需确保它支持RTT(Render To Texture)功能即可。

三、实时球幕图像生成方法

(一)问题分析与解决思路

要生成实时球幕图像,至少需要解决以下三方面的问题:第一、获得实时三维渲染结果;第二、对三维渲染结果进行几何校正;第三,将经过几何校正的图像投影至球幕,并得到与预期一致的最终画面。

先分析第三个问题。假设球幕球心角与镜头视场角均为180°,且镜头光学中心处于球心的位置,那么根据鱼眼镜头的光学特性可以知道,对于一幅4:3的图像而言最终将被映射到球幕上的部分是其中央的内切正圆形区域。在这个正圆形区域内,与圆周平行的同心圆将会成为球幕上的纬线,而从圆心引向圆周的半径则会成为球幕上的经线,这是数字鱼眼镜头成像的基本特点。

然后,我们分析一下前两个问题,如何利用三维引擎产生合适球幕投影的图像。Mental Ray这样的渲染器大都支持针对球幕设计的镜头着色器(Lens Shader),这类着色器利用光线跟踪算法可以产生直接能够用于数字鱼眼镜头的图像。但包括Direct3D、OpenGL在内的实时3D API中均只支持标准摄像机,也就是说它们严格遵循理想化针孔相机的成像规律,所以,三维引擎中不可能仅通过一个摄像机来实现球幕图像的输出。可行的办法是摆放多个摄像机将完整的场景记录为多幅平面图像,然后通过拼接与几何校正生成一幅完整的、可用于球幕投影的图像。

我们总共需要5台摄像机并根据图2所示的方式进行摆放,获得分别表示前、后、左、右、顶的渲染画面。理想情况下,在使用光学特征相同的鱼眼镜头时,通过镜头投影和通过镜头拍摄是一个可以互逆的过程,也就是说通过鱼眼镜头拍摄的图像可以通过相同规格的鱼眼镜头还原。现已确定最终将采用视场角为180°的鱼眼镜头进行投影,那么假如采用同样为180°的鱼眼镜头拍摄,结果获得的图像应该可以直接在球幕上正确还原。

除了这个结论以外,还有另外一个结论也至关重要,它可由Cubemap的原理推导得出:如果将Cubemap按照正确的角度赋予给一个法线指向内部的正方体,当摄像机位于该正方体中央时,摄像机拍摄Cubemap所获结果与拍摄Cubemap对应环境所获的结果完全一致。

将以上两个结论(第一,投影与拍摄过程可互逆;第二,Cubemap可以取代三维场景)结合起来,可以得出:以180°鱼眼镜头拍摄的真实场景与(以其为中心的)Cubemap完全一致,并且所获图像可以直接用于球幕投影。最终这个结论建立起了Cubemap与投影图像之间的对应关系,这就意味着可以利用纹理映射的方法来重构Cubemap表面与投影图象表面每一个点之间的对应关系,并在此基础上将5个独立画面拼合、校正为可用于球幕投影的单一画面。

(二)具体实现步骤

1.步骤一:设置RTT摄像机

进入三维引擎,在场景中选取任一坐标位置作为代表观众视点的观测点,在这一位置重合摆放5个摄像机,并将它们的旋转角度分别设为(0,0,0)、(π/2,0,0)、(π,0,0)、(3π/2,0,0)、(3π/2, π/2,0)。此外,为了保证每个相机的视野(FOV)恰能相交,应将其投影矩阵设为:endprint

然后,为这5个摄像机分别设立5个Render Target,如此便能将实时地将其渲染结果记录为5张贴图。

2.步骤二:制作校正模型

根据上节的思路,只要能够推算出鱼眼镜头所拍摄的画面中Cubemap立方体表面每一点的位置,就能以此为依据生成校正模型。显然,我们可以利用数学公式推导出顶点位置并通过编写脚本自动生成校正模型,但为了避免复杂的编程工作,本文将另辟蹊径采用一种更简单的方法来实现:在三维软件中利用球幕鱼眼镜头渲染立方体表面的网格结构,并且根据渲染结果重置顶点位置,这样做同样能够达到目的。

首先,应在三维软件中建立5个正方形平面,并将之摆放成立方体的前、后、左、右、顶5个表面。这5个正方形平面的纵、横细分数量将决定最终几何校正的精确度,细分越多则校正结果越精确,但是手工摆放顶点的工作量也会增加。

然后,在立方体中央位置摆放摄像机,并使镜头指向正上方。由于投影使用的球幕只是半球体,所以应将前、后、左、右4个平面位于镜头以下的部分删除。(图3)

接下去,将5个平面的材质设为线框模式,并选择180°的球幕鱼眼镜头进行渲染,这样便能得到如图4所示的结果。

可以看到,渲染结果明确反映了立方体与投影图像之间的一一对应关系,只需以此渲染结果为依据(可将之设为视窗背景)编辑三维空间中的构成半立方体各个表面的顶点,使所有顶点与参考图中相应的顶点位置相重合,这样形成的圆形三维模型就是我们所需要的校正模型。

3.步骤三:完成纹理映射实现球幕图像输出

最后,将步骤二获得的校正模型导入引擎,然后将步骤一中生成的5张贴图按照正确的顺序赋予给校正模型的五个部分,便能产生如图5所示可以用于球幕投影的实时图像。

四、本文方法的优势与局限性

本文所介绍的实时球幕图像生成方法,其优势与局限性都非常明显。这种方法的优势在于:

首先,它具有很高的普适性。本文所介绍的方法中,除了RTT以外其余使用的都是每一款三维引擎必须具备的基本功能,而时至今日RTT在三维引擎中也极为常见,所以本文所介绍的方法具有很高的普适性,几乎可以在任何平台上运用。

其次,这种方法的执行效率令人满意。由于纹理映射是最基本的三维渲染功能,所有的显卡、三维引擎都对其提供了最底层、最优化的支持,所以纹理映射所耗费的运算资源几乎可以忽略不计,所以其执行效率相当令人满意的。

最后,这种方法所提供的思路具有良好的扩展性。基于本文所介绍的纹理映射的思路,我们不仅可以生成用于180°半球型银幕的图像,也可以生成用于小于180°球冠型银幕的图像,甚至可以将之延用到环形、柱型等曲面银幕上,具有良好的扩展空间。

这种方法的局限性在于:首先,虽然球幕上的影像是实时运算的,但是对于影像的调整却不能实时进行。其次,本方法不适用于多通道拼接式球幕图像的生成。由于多通道拼接的过程中通常要对几何校正进行实时调节,并且需要依赖几何校正的信息进行边缘融合运算,所以本方法不适用于此类应用场合。最后,本方法不宜用于成像精确性要求苛刻的场合。纹理映射的基础是三角面顶点UV坐标插值运算,因此本文所介绍的方法是一种“近似”而非精确的几何校正方法。即使不考虑手工设定顶点位置可能引起的误差,其精确程度还是会受到校正模型顶点数量的限制:顶点越多,则结果越接近理论值,顶点越少,则偏差越大。但是,如果顶点过多、整理UV的工作量过大,这种方法就失去了其简便易行的优势,所以一般而言它更适用于以视觉表现而非科学研究为主要目的应用领域。

五、结束语

本文介绍了一种简单易行的实时球幕图像生成方法,并且经过作者实践检验行之有效,希望能够为不具备丰富程序编写经验的虚拟现实与交互艺术创作者提供一些有益的借鉴。当然,这种方法也存在不少局限,希望各位同仁与专家能够不吝赐教,进一步改良这种方法,使之具有更广阔的应用前景。

参考文献

1 陈琛,王宝琦,李臣友.鱼眼镜头在数字电影和数字投影中的应用[J].现代电影技术,2008,(1).

2 薛军涛,贺怀清.一种采用纹理映射技术实现鱼眼镜头快速校正的方法[J].电子技术应用,2008,(8).

3 英向华,胡占义.一种基于球面透视投影约束的鱼眼镜头校正方法[J].计算机学报,2003.(12).

4 袁辉.鱼眼镜头视频图像实时校正算法研究与实现[D].广州:中山大学,2007.endprint

然后,为这5个摄像机分别设立5个Render Target,如此便能将实时地将其渲染结果记录为5张贴图。

2.步骤二:制作校正模型

根据上节的思路,只要能够推算出鱼眼镜头所拍摄的画面中Cubemap立方体表面每一点的位置,就能以此为依据生成校正模型。显然,我们可以利用数学公式推导出顶点位置并通过编写脚本自动生成校正模型,但为了避免复杂的编程工作,本文将另辟蹊径采用一种更简单的方法来实现:在三维软件中利用球幕鱼眼镜头渲染立方体表面的网格结构,并且根据渲染结果重置顶点位置,这样做同样能够达到目的。

首先,应在三维软件中建立5个正方形平面,并将之摆放成立方体的前、后、左、右、顶5个表面。这5个正方形平面的纵、横细分数量将决定最终几何校正的精确度,细分越多则校正结果越精确,但是手工摆放顶点的工作量也会增加。

然后,在立方体中央位置摆放摄像机,并使镜头指向正上方。由于投影使用的球幕只是半球体,所以应将前、后、左、右4个平面位于镜头以下的部分删除。(图3)

接下去,将5个平面的材质设为线框模式,并选择180°的球幕鱼眼镜头进行渲染,这样便能得到如图4所示的结果。

可以看到,渲染结果明确反映了立方体与投影图像之间的一一对应关系,只需以此渲染结果为依据(可将之设为视窗背景)编辑三维空间中的构成半立方体各个表面的顶点,使所有顶点与参考图中相应的顶点位置相重合,这样形成的圆形三维模型就是我们所需要的校正模型。

3.步骤三:完成纹理映射实现球幕图像输出

最后,将步骤二获得的校正模型导入引擎,然后将步骤一中生成的5张贴图按照正确的顺序赋予给校正模型的五个部分,便能产生如图5所示可以用于球幕投影的实时图像。

四、本文方法的优势与局限性

本文所介绍的实时球幕图像生成方法,其优势与局限性都非常明显。这种方法的优势在于:

首先,它具有很高的普适性。本文所介绍的方法中,除了RTT以外其余使用的都是每一款三维引擎必须具备的基本功能,而时至今日RTT在三维引擎中也极为常见,所以本文所介绍的方法具有很高的普适性,几乎可以在任何平台上运用。

其次,这种方法的执行效率令人满意。由于纹理映射是最基本的三维渲染功能,所有的显卡、三维引擎都对其提供了最底层、最优化的支持,所以纹理映射所耗费的运算资源几乎可以忽略不计,所以其执行效率相当令人满意的。

最后,这种方法所提供的思路具有良好的扩展性。基于本文所介绍的纹理映射的思路,我们不仅可以生成用于180°半球型银幕的图像,也可以生成用于小于180°球冠型银幕的图像,甚至可以将之延用到环形、柱型等曲面银幕上,具有良好的扩展空间。

这种方法的局限性在于:首先,虽然球幕上的影像是实时运算的,但是对于影像的调整却不能实时进行。其次,本方法不适用于多通道拼接式球幕图像的生成。由于多通道拼接的过程中通常要对几何校正进行实时调节,并且需要依赖几何校正的信息进行边缘融合运算,所以本方法不适用于此类应用场合。最后,本方法不宜用于成像精确性要求苛刻的场合。纹理映射的基础是三角面顶点UV坐标插值运算,因此本文所介绍的方法是一种“近似”而非精确的几何校正方法。即使不考虑手工设定顶点位置可能引起的误差,其精确程度还是会受到校正模型顶点数量的限制:顶点越多,则结果越接近理论值,顶点越少,则偏差越大。但是,如果顶点过多、整理UV的工作量过大,这种方法就失去了其简便易行的优势,所以一般而言它更适用于以视觉表现而非科学研究为主要目的应用领域。

五、结束语

本文介绍了一种简单易行的实时球幕图像生成方法,并且经过作者实践检验行之有效,希望能够为不具备丰富程序编写经验的虚拟现实与交互艺术创作者提供一些有益的借鉴。当然,这种方法也存在不少局限,希望各位同仁与专家能够不吝赐教,进一步改良这种方法,使之具有更广阔的应用前景。

参考文献

1 陈琛,王宝琦,李臣友.鱼眼镜头在数字电影和数字投影中的应用[J].现代电影技术,2008,(1).

2 薛军涛,贺怀清.一种采用纹理映射技术实现鱼眼镜头快速校正的方法[J].电子技术应用,2008,(8).

3 英向华,胡占义.一种基于球面透视投影约束的鱼眼镜头校正方法[J].计算机学报,2003.(12).

4 袁辉.鱼眼镜头视频图像实时校正算法研究与实现[D].广州:中山大学,2007.endprint

然后,为这5个摄像机分别设立5个Render Target,如此便能将实时地将其渲染结果记录为5张贴图。

2.步骤二:制作校正模型

根据上节的思路,只要能够推算出鱼眼镜头所拍摄的画面中Cubemap立方体表面每一点的位置,就能以此为依据生成校正模型。显然,我们可以利用数学公式推导出顶点位置并通过编写脚本自动生成校正模型,但为了避免复杂的编程工作,本文将另辟蹊径采用一种更简单的方法来实现:在三维软件中利用球幕鱼眼镜头渲染立方体表面的网格结构,并且根据渲染结果重置顶点位置,这样做同样能够达到目的。

首先,应在三维软件中建立5个正方形平面,并将之摆放成立方体的前、后、左、右、顶5个表面。这5个正方形平面的纵、横细分数量将决定最终几何校正的精确度,细分越多则校正结果越精确,但是手工摆放顶点的工作量也会增加。

然后,在立方体中央位置摆放摄像机,并使镜头指向正上方。由于投影使用的球幕只是半球体,所以应将前、后、左、右4个平面位于镜头以下的部分删除。(图3)

接下去,将5个平面的材质设为线框模式,并选择180°的球幕鱼眼镜头进行渲染,这样便能得到如图4所示的结果。

可以看到,渲染结果明确反映了立方体与投影图像之间的一一对应关系,只需以此渲染结果为依据(可将之设为视窗背景)编辑三维空间中的构成半立方体各个表面的顶点,使所有顶点与参考图中相应的顶点位置相重合,这样形成的圆形三维模型就是我们所需要的校正模型。

3.步骤三:完成纹理映射实现球幕图像输出

最后,将步骤二获得的校正模型导入引擎,然后将步骤一中生成的5张贴图按照正确的顺序赋予给校正模型的五个部分,便能产生如图5所示可以用于球幕投影的实时图像。

四、本文方法的优势与局限性

本文所介绍的实时球幕图像生成方法,其优势与局限性都非常明显。这种方法的优势在于:

首先,它具有很高的普适性。本文所介绍的方法中,除了RTT以外其余使用的都是每一款三维引擎必须具备的基本功能,而时至今日RTT在三维引擎中也极为常见,所以本文所介绍的方法具有很高的普适性,几乎可以在任何平台上运用。

其次,这种方法的执行效率令人满意。由于纹理映射是最基本的三维渲染功能,所有的显卡、三维引擎都对其提供了最底层、最优化的支持,所以纹理映射所耗费的运算资源几乎可以忽略不计,所以其执行效率相当令人满意的。

最后,这种方法所提供的思路具有良好的扩展性。基于本文所介绍的纹理映射的思路,我们不仅可以生成用于180°半球型银幕的图像,也可以生成用于小于180°球冠型银幕的图像,甚至可以将之延用到环形、柱型等曲面银幕上,具有良好的扩展空间。

这种方法的局限性在于:首先,虽然球幕上的影像是实时运算的,但是对于影像的调整却不能实时进行。其次,本方法不适用于多通道拼接式球幕图像的生成。由于多通道拼接的过程中通常要对几何校正进行实时调节,并且需要依赖几何校正的信息进行边缘融合运算,所以本方法不适用于此类应用场合。最后,本方法不宜用于成像精确性要求苛刻的场合。纹理映射的基础是三角面顶点UV坐标插值运算,因此本文所介绍的方法是一种“近似”而非精确的几何校正方法。即使不考虑手工设定顶点位置可能引起的误差,其精确程度还是会受到校正模型顶点数量的限制:顶点越多,则结果越接近理论值,顶点越少,则偏差越大。但是,如果顶点过多、整理UV的工作量过大,这种方法就失去了其简便易行的优势,所以一般而言它更适用于以视觉表现而非科学研究为主要目的应用领域。

五、结束语

本文介绍了一种简单易行的实时球幕图像生成方法,并且经过作者实践检验行之有效,希望能够为不具备丰富程序编写经验的虚拟现实与交互艺术创作者提供一些有益的借鉴。当然,这种方法也存在不少局限,希望各位同仁与专家能够不吝赐教,进一步改良这种方法,使之具有更广阔的应用前景。

参考文献

1 陈琛,王宝琦,李臣友.鱼眼镜头在数字电影和数字投影中的应用[J].现代电影技术,2008,(1).

2 薛军涛,贺怀清.一种采用纹理映射技术实现鱼眼镜头快速校正的方法[J].电子技术应用,2008,(8).

3 英向华,胡占义.一种基于球面透视投影约束的鱼眼镜头校正方法[J].计算机学报,2003.(12).

4 袁辉.鱼眼镜头视频图像实时校正算法研究与实现[D].广州:中山大学,2007.endprint

猜你喜欢

虚拟现实
在虚拟现实中体验上课 Experiencing a class in VR
移动VR正照进现实
虚拟现实,让学习更“沉浸”
培训新势力从人工智能到虚拟现实
虚拟现实LG 360 VR眼镜
Facebook组建虚拟现实社交团队
View Master虚拟现实显示器