《1 引言》

1 引言

由多台投影机拼接显示的多投影面虚拟环境系统具有宽视场角、高分辨率的特点, 在虚拟设计、产品展示、规划与仿真等领域有着独特的应用价值。对于此类系统的构建, 基于联网PC驱动的构建方法逐渐取代了以往基于专业图形工作站或并行机的系统构建方法, 成为未来多投影面虚拟环境系统的发展趋势。基于PC的多投影面虚拟环境系统具有成本低、扩展灵活的优势, 它是目前国内外学者研究的热点 [1] 。在设计此类多投影面沉浸式虚拟环境系统时, 主要存在以下问题:a. 系统底层软件结构的设计;b. 几何校正;c. 颜色校正。目前, 系统的底层软件结构主要有主从式和同步执行式两种 [2] ;几何校正主要有硬件校正、软件校正、软件自动校正三种方法, 目前的研究主要集中在如何快速地实现自动几何校正 [3] ;对于颜色校正, 主要有LAM (luminance attenuation map) 方法 [4] 、色域匹配法 [5] 和基于视觉均匀的亮度均衡法 [6] 。LAM方法比较简单, 但降低了系统的整体动态范围;色域匹配法则很难求得多个投影机的共同色域, 基于视觉均匀的亮度均衡法计算复杂, 采用的分光仪价格昂贵, 很难推广。目前颜色的校正问题是多投影面系统构建中的一个难题。

笔者从系统造价低、扩展灵活的角度出发, 采用组件技术设计了同步执行式的系统底层软件体系结构, 对系统的几何校正和颜色校正问题采用了软件校正和人工交互调整相结合的校正方法, 使得系统的构建简单, 接口和扩展性更加灵活。系统通过在220度的大型环形屏幕上的实验表明, 其几何校正和颜色校正的的效果很好, 整个虚拟环境给人一种高度的临场感。

《2 系统的总体设计》

2 系统的总体设计

笔者提出的高临场感多投影面虚拟环境系统要求其基于廉价PC和低端投影机而构建, 能够运行于低性能网络之上, 其目的在于为虚拟设计、虚拟样机工程研究等提供一个具有高度沉浸感的、支持多用户的宽视场角、高分辨率的实时虚拟环境, 要求能够支持各种基于OpenGL或OpenGL以上3D图形API的应用程序的运行。为此, 笔者设计的系统采用了图像显示质量较好的被动立体显示方式, 扩展灵活、基于组件的同步执行式软件体系结构, 以及简单实用的几何校正和颜色校正方法。系统的总体构成如图1所示, 其主要功能模块包括投影系统、图形生成系统、网络同步和通信模块、中央控制系统及人机交互等五部分。

各个模块所完成的功能如下:

《图1》

图1 高临场感多投影面虚拟环境系统结构
Fig.1 The framework of highly immersive multi-projection virtual environment systems

图1 高临场感多投影面虚拟环境系统结构 Fig.1 The framework of highly immersive multi-projection virtual environment systems  

 

1) 投影系统

利用偏振光立体显示原理对各个通道投影面的图像进行被动式立体显示。

2) 图形分割生成模块

由5个图形绘制服务节点 (server node, SN) 组成, 用来进行视锥的分割, 分别实时生成5个通道的投影面图像;对各个SN的投影面图像进行相应的几何校正和颜色校正。

3) 网络同步

通信模块 负责客户节点 (client node, CN) 和各个SN之间的数据通信, 它包括I/O指令等用户交互信息以及各SN之间的同步控制指令;实现各SN之间的帧缓存交换同步、数据同步。

4) 人机交互

让用户通过各种虚拟现实交互设备与系统应用程序之间进行自然、直接地的交互。

5) 中央控制系统

通过中央控制软件及相应的支持硬件, 管理、调控系统的各种设备和应用软件, 如调节投影机亮度等;方便地设置、修改系统的各种参数如各Server Node节点的配置文件等, 优化提高系统性能。

《3 技术要点与功能实现》

3 技术要点与功能实现

为了保证高临场感多投影面虚拟环境系统具有高清晰的立体显示效果, 实时流畅、逻辑统一的投影画面, 几何、颜色一致浑然一体的整体效果, 立体显示、图形分割、画面同步、几何校正和颜色校正是需要解决的几个关键问题。

《3.1立体显示》

3.1立体显示

立体显示的实现通常可以采用主动立体显示方式或被动立体显示方式。但主动式立体显示的实现一般需要高刷新频率 (120 Hz以上) 的高端投影机, 因此笔者采用被动式立体显示的实现方式以降低系统的成本。利用偏振光立体显示原理, 分别为每个投影通道生成立体图像, 如图2所示, 在系统中每个SN负责生成每个通道的图像。为了形成被动立体显示, 每个SN用两台PC机分别生成具有一定视差的左右眼图像, 然后经过放置在两台投影机前的两个起偏镜片W1, W2 (其中W1, W2偏振方向相互正交) 偏振后投影在屏幕上, 观看者通过配戴一组相互正交且分别与W1, W2偏振方向一致的检偏镜片眼镜观看立体图像。

《图2》

图2 一个Server Node的被动立体显示实现
Fig.2 The passive stereo display of one Server Node

图2 一个Server Node的被动立体显示实现 Fig.2 The passive stereo display of one Server Node  

 

《3.2 图形分割》

3.2 图形分割

高临场感多投影面虚拟环境系统经常需要绘制的是较大规模的复杂场景。为了保证系统的绘制刷新频率满足系统的实时交互性要求, 笔者采用分布式并行绘制的策略, 每一个SN负责绘制整个场景的相应部分的立体显示图像, 即一个SN绘制一个通道的立体图像, 然后各个通道的立体图像最终拼接显示在投影屏幕上, 形成一个逻辑统一的图形。

根据计算机图形学原理, 对于多投影面虚拟环境系统拼接形成的整个场景而言, 存在一个总透视投影空间。因此, 可以对该总透视投影空间进行分割 (如图3所示) , 每个SN负责一个子透视投影空间内的场景绘制。透视投影空间的设置利用OpenGL中的glFrustum 透视投影函数, 其函数形式为:void glFrustum (GLdouble left, GLdouble right, GLdouble top, GLdouble znear, GLdouble zfar) ;glFrustum定义的透视投影空间为四棱平头锥体, 其前截面为参数left, right, bottom, top定义的修剪平面, 后截面由视点位置、前截面以及参数znear、zfar的值决定。

《图3》

图3 透视投影空间的分割
Fig.3 Perspective projection space partition

图3 透视投影空间的分割 Fig.3 Perspective projection space partition  

 

系统运行时, 每帧画面中的物体模型在总透视投影空间中的位姿唯一确定。只要投影空间拼接正确, 各通道渲染出的二维图像就能够实现完整的拼接。

《3.3 画面同步》

3.3 画面同步

《图4》

图4 帧缓存交换同步过程
Fig.4 Synchronization process of frame buffer swap

图4 帧缓存交换同步过程 Fig.4 Synchronization process of frame buffer swap  

 

仅仅有多个投影画面间的拼接绘制, 还无法保证各通道的输出图像能够形成逻辑统一和正确的整体画面, 因为各通道输出画面在动态实时绘制过程中还会出现绘制速度的不同步以及用户交互数据网络传输速度的不同步, 这两者都将导致投影面之间画面的“撕裂”现象。对于前者, 笔者采用帧缓存交换同步技术来解决;对于后者, 则采用数据同步技术来克服。

帧缓存交换同步可以通过软件或硬件的方法来实现。硬件的实现方法是通过某些显示卡提供的硬件同步功能, 利用串接在图形显示卡的电缆传输同步信号来实现同步;软件方法可以采用功能强大的通用并行接口程序MPI的栅障同步模块来实现, 也可以直接利用网络消息应答实现同步。本系统采用了直接网络消息应答的软件同步方式。相对于其他方式而言, 这种方法简单灵活, 用户可以自定义消息传递, 利用Socks通信实现同步控制。具体实现过程如图4所示, 利用CN控制各SN的绘制进程, SN在完成绘制并能够进行帧缓存交换时将到达同步点, 此时绘制节点将通知CN并进入等待状态;较快的SN的进程将被阻塞, 直到最后的SN也完成绘制抵达同步点后, CN所有的SN广播继续执行的命令, 各SN同时执行Swap Buffers指令, 从而实现帧缓存交换的同步执行。

数据同步的任务就是要确保各SN间场景信息的一致性。这些场景信息包括:用户视点位置的移动以及任何在场景内所发生的变化。数据同步也采用软件方法利用网络消息传递实现, 即在绘制一帧画面之前, 在各个SN内部广播任何有关视点以及虚拟世界的变化, 以维持在绘制每一帧画面时各SN在虚拟场景以及视点位置的一致性。在具体实现时, 采用基于UDP的传输层协议利用Socks进行同步通讯。UDP是面向无连接的传输协议, 它具有网络延时小的优点;场景信息的变化采用用户自定义的协议数据单元结构打包传输, 数据包每隔一定的时间间隔 (如20 ms) 由CN广播一次, 各个SN同样每隔一定的时间间隔据 (20 ms) 接收一次由CN传来的数据包并据此进行场景绘制更新, 从而实现了各SN间的数据同步。

《3.4 几何校正》

3.4 几何校正

为了解决单个投影画面投影在环幕上产生的图像畸变问题以及多个投影面之间的画面对齐问题, 系统需要进行相应的几何校正, 笔者采用两遍绘制技术进行几何校正。单个投影面的图像畸变校正过程如图5所示, 设投影机中原始图像上的点为 (xp, yp) , 投影到屏幕空间后的点坐标为 (xs, ys) , 畸变校正的过程如下:

《图5》

图5 图像的畸变校正过程
Fig.5 Image distortion warp process

图5 图像的畸变校正过程 Fig.5 Image distortion warp process  

 

Step 1 将由样点 (xp, yp) 组成的规则网格图案投影在环幕上;

Step 2 根据环幕的半径、投影中心等参数计算 (xp, yp) → (xs, ys) 的映射关系;

Step 3 在系统运行绘制进程中, 对帧缓存中的每帧图像按Step 2的映射关系进行分段纹理映射;

Step 4 经过预校正后的图像再送入绘制流水线绘制并得到正确的投影图像。

多个投影面之间的画面对齐过程实现如下:

Step 1 在每个通道的屏幕上都投射由样点组成的规则网格图案;

Step 2 利用专门编制的网格调整程序人工手动调整各网格图案的位置和形状, 使各通道的网格图案对齐;

Step 3 将Step 2中调整好的网格三角化, 得到用作纹理映射的几何顶点并保存其坐标值;

Step 4 在各通道运行的绘制进程中, 分别拷贝各自帧缓存中的图像当作纹理图案, 利用分段纹理映射技术将它映射到Step 2中的几何顶点上后再送入各自的绘制流水线绘制, 最后得到各投影面图像对齐的投影图像。

在上面的对齐校正过程中, 由于采用了人工参与交互调整, 使得可以通过人眼观察网格对齐的情况, 因而可以取得比基于相机反馈校正方法更精确的对齐效果。

《3.5 颜色校正》

3.5 颜色校正

颜色校正的主要任务是对相邻投影面重叠区的高亮部分进行边缘融合, 以及对所有投影面画面进行颜色的一致性调整。边缘融合和颜色一致性调整效果的好坏直接影响整个虚拟环境的显示质量。对于相邻投影面的亮度边缘融合, 笔者采用了结合人工交互调整的软件融合方法。该方法通过调节重叠区的alpha值大小来实现亮度的衰减融合;利用专门编制的软件, alpha值的调节可以通过手动调整与之关联的NURBS曲线来控制其变化, 由于人眼对亮度变化较为敏感, 这种方法可以取得较好的融合效果, 其实现过程如下:

Step 1 将两个相邻的投影面Plane 1, Plane 2同时显示白色 (白屏) ;

Step 2 对Plane 1, Plane 2上的重叠区进行亮度衰减调节, 通过手工调整alpha值控制曲线, 直到获得满意的亮度融合视觉效果;

Step 3 将Step 2中调整好的亮度融合效果图以位图文件形式分别保存在Plane 1, Plane 2的PC中;

Step 4 重复Step 1, Step 2, Step 3, 完成剩下的投影面重叠区的亮度融合调整;

Step 5 在系统绘制进程中, 对各个投影面的每帧图像调用其融合效果位图, 利用多遍纹理映射技术进行亮度融合处理。

多投影画面之间的颜色一致性调整主要解决因各台投影机的色域不同所造成的投影面之间的画面色差。笔者采用了基于相机反馈的软件自动调整方法, 具体实现过程如下:

Step 1 给投影机P1一系列预定RGB值的输入im, 然后用一台相机观察并返回P1对各im的响应值, 并以此计算P1的gamma响应曲线;

Step 2 对与P1相邻的投影机P2, 以P1的gamma响应曲线为基准, 让P2的gamma曲线向P1逼近, 得到P2的gamma曲线修正函数;

Step 3 按Step 1, Step 2对其他所有相邻通道投影机进行gamma响应曲线的逼近匹配, 并得到各自的gamma曲线修正函数;

Step 4 在各个通道的绘制进程中, 利用OpenGL提供的颜色查找表修改功能加载各个投影机的gamma曲线修正函数, 从而调整各投影机对输入信号的响应, 使得各投影画面颜色趋于视觉一致。

这种方法在各通道的投影机画面颜色相差不大的情况下, 可以获得比较满意的颜色一致性调整效果。

《4 系统实现及应用实例》

4 系统实现及应用实例

利用creator建模工具和Vtree 3D 图形 API软件, 开发了两个应用程序:虚拟战场和虚拟北邮, 通过该应用程序的运行来验证所设计的多投影面虚拟环境系统的各个模块算法的正确性, 系统运行效果如图6所示。

《图6》

图6 系统运行效果
Fig.6 Result of systems executing

图6 系统运行效果 Fig.6 Result of systems executing  

 

系统采用玻璃钢基金属幕, 屏幕高2.88 m、弧长20 m、半径5 m, 整个屏幕的圆弧面呈220°视场角;投影系统由10台NEC 1065+投影机及偏振镜片组成;图形生成分割部分主要包括11台PC机, PC机的配置为:P4 2.4 GHz CPU, 512 MB内存, NVidia Quadro4 750 XGL图形加速卡, 显存128 M;系统的网络环境为100 MB以太网;系统支持的交互设备包括音箱, 可编程操纵作杆、键盘、鼠标等。系统的软件运行环境为Windows 2000操作系统。

在虚拟战场中, 场景的三角面片在4万片左右, 虚拟北邮的面片数在7~8万片左右, 系统运行后, 均可以实现对虚拟场景的实时交互操作, 系统帧速率达到30帧/s以上。系统每个通道达到45°水平视场角, 各个通道显示分辨率达到1 024×768, 32位真彩色。各投影面之间的亮度、颜色视觉一致, 给人很强的临场感和画面整体感 (见图6) , 该系统与国内外已有的多投影面系统 [6,7] 相比具有以下特点:

1) 对于系统的几何校正采用了结合人工交互调整的软件校正方法, 校正精度比基于相机的自动几何精度更高, 可达到单个像素级的无缝拼接, 而且不受系统投影面个数的限制;亮度融合采用了基于NURBS控制曲线的软件融合方法, 融合效果在观察点处达到了光滑过渡, 基本消除了“亮缝” (见图6) , 而已有的类似系统如MSPR系统 [7] 的“细缝”仍然可见, 如图7所示。

《图7》

图7 MSPR系统运行效果
Fig.7 Result of MSPR systems executing

图7 MSPR系统运行效果 Fig.7 Result of MSPR systems executing  

 

2) 采用220°宽视场角的大型环形屏幕显示方式, 再加上清晰的被动立体显示方式, 使得系统具有更强的临场感。

3) 系统的软件结构采用组件式开发技术, 系统的应用程序开发接口与底层的几何校正、亮度融合和颜色均衡、同步控制等算法分别封装, 而且底层的功能模块的实现不受系统规模扩展的限制, 具有良好的扩展性和可维护性。

4) 系统的构建基于普通PC、中低端投影机, 造价成本低廉, 易于扩展和维护。

《5 结论》

5 结论

笔者提出了高临场感多投影面虚拟环境系统的设计及其现实方法, 对此类系统构建中的绘制同步、画面拼接、立体显示、几何及颜色校正等关键问题采用灵活的软件方法得到了较好的解决。该系统基于廉价的PC和投影机联网驱动, 具有易扩展和升级维护的特点;系统拥有220°的宽视场角, 高分辨率的投影画面, 给人一种很强的临场感效果。该系统在虚拟设计、虚拟样机工程、临场感遥操作、军事训练仿真等领域有着广阔的应用推广前景。

下一步需要进一步研究的工作包括:改进场景模型数据的加载方式, 提高系统对超大规模复杂场景的绘制能力;研究效果更好的颜色校正自动校正算法;改进立体显示方式、增强交互功能, 以及多投影面虚拟环境系统的图像质量评价机制等。