一.综述

多通道投影是一种典型的虚拟现实的实现,多通道可以是多个CRT、LCD显示器,也可以是DLP投影仪,本文中统称为显示器。在多通道显示(Multi Display)中的一个重要问题是保持各个通道间显示画面的同步。

对于一个通道对应于<一台计算机、一个显示器>的多通道系统,同步问题包括三个方面或者说是涉及到三个层次:DataLock、SwapLock、GenLock。

1.DataLock:

用于保证在每个渲染周期各渲染计算机使用相同的场景数据(包括每帧都需要更新的数据和类似于消息的间断性数据)进行更新,以避免各计算机之间场景内容的不一致。

2.SwapLock

用于保证每个渲染周期中各渲染计算机在相同的瞬间切换帧缓存,以避免各计算机之间画面切换时刻的不一致。

3. Framelock&GenLock

Framelock指相互连接的各渲染计算机的显示器扫描频率彼此保持一致,而GenLock(GeneratorLock)则是指显示器的扫描频率与一个外部频率源保持一致。Framelock与GenLock可以在像素级别同步、扫描行级别同步、帧级别同步,我所看到的都是帧级别的同步。Framelock&GenLock在立体显示中尤为重要,因为各通道显示器的帧频与立体眼镜快门开关的开关频率必须保持同步[1]。

二.DataLock

DataLock通常由软件实现,通过对网络数据的发送、接收、处理的控制来达到数据同步。

三.SwapLock

SwapLock也可由软件来折衷实现,通常通过网络来对Swaplock的锁定误差在1ms以内,对于交互式程序来说这个已经满足需要了。SwapLock也有硬件支持的,如Nvidia Quadro 3000G显卡,结合Opengl扩展即可做到。

对于DataLock和SwapLock的软件实现我在下一篇文章会写。本篇以下内容大致叙述我所了解的Framelock&GenLock的实现方式。

四.Framelock&GenLock

硬件实现:

目前支持FrameLock&GenLock的都是专业显卡,如3Dlabs Wildcat4 7210,Nvidia的Quadro FX 3000G,Quadro FX 4000,Quadro FX 4500,Quadro FX 5500。对于Nvidia的显卡在使用时将一个显卡接上外部同步源信号(实现GenLock),并通过Nvidia控制面板使其作为Master;其它显卡相互级联后接到Master显卡上(实现FrameLock),并通过控制面板使其作为Slave,这样即可实现了。同时有Nvidia的Opengl扩展提供了相应的软件函数调用。详细使用方法可参考Nvidia FrameLock手册。

软件实现:

更确切的说是软硬结合的实现方法,其与上述方法的区别之处在于并不采用专业级的显卡,而只是在使用时自己制作或购买几个小小的插头连接到计算机并口和显卡,结合软件使用消费级显卡就可达到Framelock&GenLock。

在Linux下的软件:Softgenlock:http://www.hlrs.de/organization/vis/people/aumueller/genlock/

在Windows下的软件:WinSgl http://graphics.ethz.ch/~mwaschbu/winsgl/

两者原理相同,下面统称为Sgl。

如图1所示Sgl是将外部0-5V的脉冲信号(如TTL信号)通过计算机并口接入,由Sgl驱动程序读取此信号频率,由PowerStrip(由EnTech 提供)的函数和DirectDraw API得到计算机显卡的Vedio Timing信息,由Sgl Application程序对两者进行比较后得到调整显卡Video Timing的相应方法(见下一段),再由PowerStrip函数来执行此方法,从而控制显示器的频率与外部源保持一致。

samba多通道 原理 多通道同步_多通道

图1  Sgl运行结构

调整显卡Video Timing的方法是调整垂直前端扫描(Vertical Front Porch)的时间。因为显示器显示一帧画面时实际上并不只是扫描用户所能见到的区域,对可见区域四周环形不可见区域的扫描是必须的(这些扫描是有其作用的,这里不叙述),如图2所示只有红色部分是可见区域。Sgl就是通过更改不可见区域中Vertical Porch扫描占用的时间来调整每帧画面扫描的时间,从而对显示器频率进行微调,使其与外部同步源保持一致。

samba多通道 原理 多通道同步_ide_02

图2 Video Timing

因此你需要做的只是设好外部同步源的频率(如60.000Hz),用自己的插头将外部同步信号接入计算机并口,并通过VGA口来观察同步信号,然后运行软件就可以了。

以下是我所做的实验:

硬件设备包括:

1. Nvidia GeForce 6800GT card

2. ViewSonic VE710b LCD at 60Hz refresh rate

3. Square form Clock =enerator at about 60Hz,5V TTL

4. Windows 2000 OS

5. SG1646A信号发生器(如图3)

samba多通道 原理 多通道同步_Front_03

图3 SG1646A信号发生器

运行画面如图4所示:

samba多通道 原理 多通道同步_Front_04


 

图4 WinSgl运行画面

其中modeline一行的含义:

1024 pixels:Horizontal Active period

40 pixels:Horizontal Front porch

136 pixels:Horizontal Sync width

144 pixels:Horizontal Back porch

768 lines:Vertical Active period

12 lines:Vertical Front porch

6 lines:Vertical Sync width

16 lines:Vertical Back porch

这是一年前的实验结果了,性能并不稳定,有时会Lost Sync,不知现在如何了。。。