Vrui VR Toolkit --- Vrui 虛擬現(xiàn)實工具集
Tags: Vrui
[TOC]
The task of a virtual reality (VR) development toolkit is to shield an application developer from the particular configuration of a VR environment, such that applications can be developed quickly and in a portable and scalable fashion. Three important parts of this overarching goal are encapsulation of the display environment, encapsulation of the distribution environment, and encapsulation of the input device environment. In more detail, these three partial goals are:
虛擬現(xiàn)實(VR)開發(fā)工具包的任務是保護應用程序開發(fā)人員不受VR環(huán)境的特殊配置的影響,從而使應用程序能夠快速、靈活型酥、可擴展地開發(fā)。這一總體目標的三個重要部分是:顯示環(huán)境的封裝拜轨、分布環(huán)境的封裝和輸入設備環(huán)境的封裝。在更多的細節(jié)允青,這三個部分的目標是:
Display abstraction
A toolkit should provide OpenGL rendering contexts that are set up in such a fashion that rendering a model in user-specific coordinates will display that model on all rendering surfaces (monitors, screens,head-mounted displays) in correct head-tracked stereographic mode.
顯示抽象
一個工具包應該提供OpenGL渲染的上下文橄碾,能夠將用戶指定的模型在所有渲染設備上(顯示器,屏幕,頭戴式設備)法牲,以正確的頭部跟蹤立體模式顯示史汗。
Distribution abstraction
As larger VR environments require more than one computer to operate, the detail aspects of distribution (number of computers, connection topology, etc.) should be hidden by the toolkit. In principle, there are at least three ways to distribute a rendering environment: "split first," where an application is replicated on all computers and synchronized by distributing input device and ancillary data; "split middle," where a shared data structure, e.g., a scene graph, is used to transmit data from one application computer to all rendering computers; and "split last," where the OpenGL API call stream is broadcast from one application computer to all rendering computers, e.g., using Chromium. A toolkit should also hide the difference between a distributed rendering environment running on a cluster of individual computers, and one running on a shared-memory multi-CPU computer with several independent graphics pipes.
分布抽象
由于較大的VR環(huán)境需要多臺計算機進行操作,所以工具包應該隱藏分發(fā)的細節(jié)方面(計算機數(shù)量拒垃,連接拓撲等)停撞。原則上,至少有三種方式來分配渲染環(huán)境:“拆分第一”悼瓮,其中應用程序在所有計算機上復制并通過分發(fā)輸入設備和輔助數(shù)據(jù)進行同步;“分割中間”戈毒,其中共享數(shù)據(jù)結構,例如場景圖横堡,用于將數(shù)據(jù)從一個應用計算機發(fā)送到所有的呈現(xiàn)計算機;“最后拆分”埋市,其中OpenGL API調用流從一個應用計算機廣播到所有呈現(xiàn)計算機,例如使用Chromium命贴。一個工具包還應該隱藏在單個計算機的集群上運行的分布式呈現(xiàn)環(huán)境和在具有多個獨立圖形管道的共享內存多CPU計算機上運行的分布式渲染環(huán)境之間的區(qū)別道宅。
Input abstraction
There are a wide variety of different vendors, models and protocols to connect VR input devices such as space balls, space mice, 6-DOF trackers, wands, data gloves, etc., to the computers comprising a VR environment. A toolkit must hide these differences in hardware, and provide a uniform view of the set of connected input devices. Furthermore, a toolkit should provide mechanisms not only to hide the hardware details of the input device environment, but also the number and configuration of input devices. An application should be written without aiming for a particular input environment (such as "CAVE wand and head tracker" or "stylus, two pinch gloves, and head tracker"). Instead, the toolkit should provide a layer that allows an application to specify its input requirements at a higher level, and allows a user to map input devices to these requirements.
輸入方式抽象
將各種不同的供應商,型號和協(xié)議連接到包括VR環(huán)境的計算機的VR輸入設備胸蛛,例如空間球污茵,空間鼠標,6自由度跟蹤器葬项,魔杖省咨,數(shù)據(jù)手套等。一個工具包必須在硬件中隱藏這些差異玷室,并提供一組連接的輸入設備的統(tǒng)一視圖。而且還包括輸入設備的數(shù)量和配置笤受。應該寫一個應用程序穷缤,而不用針對特定的輸入環(huán)境(例如“CAVE棒和頭部跟蹤器”或“手寫筆,兩個捏手套和頭部跟蹤器”)箩兽。另外津肛,該工具包應該提供一個層,允許應用程序在更高級別指定其輸入要求汗贫,并允許用戶將輸入設備映射到這些要求身坐。
Most existing VR toolkits cover the first aspect well; some VR toolkits cover the second aspect by using any one of the listed distribution schemes, but no toolkit we found covers the third aspect. Although all toolkits have some kind of built-in input device driver to hide hardware details, none provide a higher-level semantic interface that allows to write an application once, and run it in VR environments with widely differing input environments. This implies that no toolkits provide an adequate way to run desktop applications using a regular mouse and keyboard; although many of them have simulators, these are merely awkward low-level debugging tools and are not useful for running and actually using a VR application on a desktop.
大多數(shù)現(xiàn)有的VR工具包很好地涵蓋了第一方面;一些VR工具包通過使用列出的任何一種分發(fā)方案來覆蓋第二方面,但是我們發(fā)現(xiàn)的工具包沒有涵蓋第三方面落包。雖然所有工具包都有一些內置的輸入設備驅動程序來隱藏硬件細節(jié)部蛇,但是沒有一個提供更高級別的語義接口,允許編寫應用程序一次咐蝇,并在具有不同輸入環(huán)境的VR環(huán)境中運行涯鲁。這意味著沒有工具包提供使用常規(guī)鼠標和鍵盤運行桌面應用程序的足夠方法;盡管其中許多都具有模擬器,但這些只是尷尬的低級調試工具,對于在桌面上運行和實際使用VR應用程序無效抹腿。
The Vrui VR toolkit aims to support fully scalable and portable applications that run on a range of VR environments starting from a laptop with a touchpad, over desktop environments with special input devices such as space balls, to full-blown immersive VR environments ranging from a single-screen workbench to a multi-screen tiled display wall or CAVE. Applications using the Vrui VR toolkit are written without a particular input environment in mind, and Vrui-enabled VR environments are configured to map the available input devices to application functions such that the application appears to be written natively for the environment it runs on. For example, a Vrui application running on the desktop should be as usable and intuitive as a 3D application written specifically for the desktop.
Vrui VR工具包旨在支持完全可擴展和便攜式的應用程序岛请,從一系列VR環(huán)境開始,從筆記本電腦警绩,觸摸板崇败,桌面環(huán)境以及特殊輸入設備(如空間球)到完整的沉浸式VR環(huán)境,從單屏工作臺到多屏幕平鋪顯示墻或CAVE肩祥。使用Vrui VR工具包的應用程序在沒有特定輸入環(huán)境的情況下進行編寫后室,啟用Vrui的VR環(huán)境配置為將可用的輸入設備映射到應用程序功能,使得應用程序似乎是為其運行的環(huán)境而自己編寫的搭幻。例如咧擂,在桌面上運行的Vrui應用程序應該與專門為桌面編寫的3D應用程序一樣可用和直觀。
Figure 1: The same Vrui application, run in a 4-sided CAVE (left) and on a laptop (right).
Project Goals --- 項目目標
The main project goals were to design and implement a VR development toolkit for scalable and portable applications providing the following abstractions and additional features:
主要項目的目標是為可擴展和便攜式應用程序設計和實施VR開發(fā)工具包檀蹋,提供以下抽象和附加功能:
- Display abstraction by setting up and maintaining OpenGL rendering contexts that can display head-tracked stereoscopic images on monitors, fixed single- and multi-screen projections systems, movable monitors or screens, head-mounted displays, or any combinations thereof.
- 通過設置和維護OpenGL渲染上下文來顯示抽象松申,它能夠在顯示器上展示頭戴跟蹤立體圖像,固定的單屏幕和多屏幕投影系統(tǒng)俯逾,可移動顯示器或屏幕贸桶,頭戴式顯示器或其任何組合。
- Distribution abstraction using a split-first distribution of the toolkit itself, with support for transparent multicast communication between an application computer and the rendering computers to allow applications to internally use a split-middle scheme, for example using an external scene graph API or application-specific communication protocols. On a shared-memory multi-CPU/multi-pipe visualization system, applications should automatically make use of parallelism and high-speed communications.
- 分布抽象使用工具包本身的分裂優(yōu)先分布桌肴,支持應用程序計算機和渲染計算機之間的透明組播通信皇筛,以允許應用程序在內部使用分裂中間方案,例如使用外部場景圖API或應用程序 - 具體通信協(xié)議坠七。在共享內存多CPU /多管道可視化系統(tǒng)中水醋,應用程序應自動使用并行性和高速通信。
- Input abstraction by providing so-called "semantic events" which notify an application of user interaction, and a set of run-time selectable so-called "tools" that map the input devices of a VR environment to the semantic events of an application. Tools not only map from devices to events, but also encapsulate the user interface to evoke certain events. For example, different styles of navigation are implemented as different navigation tools, selectable by users at run-time, while an application only understands a generic "navigate" event.
- 通過提供通知用戶的應用程序的所謂“語義事件”來輸入抽象交互彪置,以及一組運行時可選的所謂“工具”拄踪,用于映射VR的輸入設備環(huán)境到應用程序的語義事件。工具不僅從設備映射到事件拳魁,而且還封裝了用戶界面以喚起某些事件惶桐。例如,不同的導航方式被實現(xiàn)為不同的導航工具潘懊,在運行時可由用戶選擇姚糊,而應用程序只能理解通用的“導航”事件。
- Powerful operating system-independent foundation libraries for functionality commonly used in VR application development, such as distributed file I/O, 3D geometry abstractions, spatial data structures, OpenGL extension management, GLSL shader support, access to video and sound recording hardware, simple scene graphs, etc.
- 強大的操作系統(tǒng)獨立的基礎庫授舟,用于VR中常用的功能應用程序開發(fā)救恨,如分布式文件I / O,3D幾何抽象岂却,空間數(shù)據(jù)結構忿薇,OpenGL擴展管理裙椭,GLSL著色器支持,訪問視頻和錄音硬件署浩,簡單的場景圖等揉燃。
- A 3D user interface component library that allows application programmers to assemble 3D user interfaces using similar interactions as traditional 2D GUIs.
- 3D用戶界面組件庫,允許應用程序員組裝3D用戶使用與傳統(tǒng)2D GUI類似的交互的界面筋栋。
- A scalable design paradigm, where applications only need to reference features that they require, such that simple applications have simple (and short) source codes. A complete Vrui "Hello World" application, rendering a cube and a sphere with full viewpoint navigation, can be written in 34 lines of code (see VruiDemoSmall.cpp).
- 一種可擴展的設計范例炊汤,其中應用程序只需要引用它們所需的功能,因此簡單的應用程序具有簡單(和簡短的)源代碼弊攘。一個完整的Vrui “HelloWorld”應用程序可以用34行代碼(見VruiDemoSmall.cpp)編寫一個立方體和具有完整視點導航的球體抢腐。
A more complete list of goals and the architecture / design features implementing them can be found in the Vrui Manifesto.
Vrui宣言可以找到更完整的目標列表和實現(xiàn)它們的架構/設計功能。
Project Status --- 項目狀態(tài)
At this point, all building blocks of the Vrui VR toolkit are in place and functional, and specific supported and tested environments are:
在這一點上襟交,Vrui VR工具包的所有構建塊都已經(jīng)到位迈倍,功能齊全,具體的支持和測試環(huán)境是:
- Laptop or desktop computers with mouse and keyboard, and optional additional devices such as joysticks, space balls, game pads, etc.
- 筆記本電腦或帶有鼠標和鍵盤的臺式電腦捣域,以及可選的附加設備啼染,如操縱桿,太空球焕梅,游戲墊等
- Responsive Workbench environment with head tracking, stylus, and two pinch gloves. Immersadesk environment with head tracking and CAVE wand.
- 響應式工作臺環(huán)境迹鹅,帶頭跟蹤,手寫筆和兩個捏手套贞言。Immersadesk環(huán)境與頭跟蹤和CAVE魔杖斜棚。
- Tiled 2 x 2 display wall with two pinch gloves run by 4-node cluster (no head tracking, anaglyphic stereo).
- 平鋪2 x 2顯示墻,兩個夾點手套由4節(jié)點集群運行(無頭跟蹤该窗,浮雕立體聲)弟蚀。
- Upright display wall with optical tracking system and multiple custom-designed input devices.
- 直立顯示墻,配有光學跟蹤系統(tǒng)和多種定制設計的輸入設備酗失。
- Tiled 3 x 2 display wall with head tracking and updated CAVE wand run by 7-node cluster.
- 平鋪3 x 2顯示墻與頭跟蹤和更新CAVE棒由7節(jié)點集群運行粗梭。
- Four-sided CAVE with head tracking, updated CAVE wand, and pinch gloves run by 5-node cluster.
- 四面CAVE帶頭跟蹤,更新的CAVE棒和夾點手套由5節(jié)點集群運行级零。
- Four-sided CAVE with head tracking and updated CAVE wand run by SGI PRISM shared-memory multi-CPU/multi-pipe vizualization system.
- 四面CAVE與頭跟蹤和更新的CAVE棒由SGI PRISM共享內存多CPU /多管虛擬化系統(tǒng)。
- Low-cost fully immersive VR environment consisting of a 3D TV and an optical tracking system, see Low-Cost VR.
- 由3D電視和光學跟蹤系統(tǒng)組成的低成本完全身臨其境的VR環(huán)境滞乙,看低成本VR奏纪。
- Low-cost VR environment consisting of a 3D TV and a Razer Hydra desktop 6-DOF input device, see Low-Cost VR.
- 低成本VR環(huán)境由3D電視和Razer Hydra桌面6自由度輸入設備組成,看低成本VR斩启。
- Head-mounted displays (eMagin Z800 3DVisor, Sony HMZ-T1) tracked by Intersense tracking system, with updated CAVE wand.
- Intersense追蹤系統(tǒng)追蹤的頭戴式顯示器(eMagin Z800 3DVisor序调,Sony HMZ-T1)與更新的CAVE魔杖。
- Oculus Rift DK1 and DK2, using built-in head trackers, with a wide variety of input devices (mouse/keyboard, joysticks, spaceballs, Wiimote, desktop 6-DOF trackers such as Razer Hydra).
- Oculus Rift DK1和DK2兔簇,使用內置的頭部跟蹤器发绢,具有各種各樣的輸入設備(鼠標/鍵盤硬耍,操縱桿,太空球边酒,Wiimote经柴,桌面6自由度追蹤器,如Razer Hydra)墩朦。
- HTC Vive
- HTC Vive
Application-level streaming to layer shared graphics data structures in a split-middle architecture over Vrui's internal split-first distribution is finally working reliably. The first application using split-middle is ProtoShop. Instead of computing the inverse kinematics to manipulate proteins on all nodes of a cluster, the computation is only done on the cluster's head node, and the results are broadcast to the render nodes. This ensures cluster-wide synchronization in all cases, and improves responsiveness on clusters where the head node has multiple CPUs (or CPU cores), and the render nodes only have single CPUs.
通過Vrui的內部分裂首次分發(fā)坯认,分層中間架構中的應用級流式傳輸?shù)綄庸蚕韴D形數(shù)據(jù)結構終于可靠地工作。第一個使用分裂的應用程序是ProtoShop氓涣。不是計算逆運動學來處理集群的所有節(jié)點上的蛋白質牛哺,而是僅在集群的頭節(jié)點上進行計算,并將結果廣播到渲染節(jié)點劳吠。這確保了在所有情況下的群集范圍同步引润,并提高了頭節(jié)點具有多個CPU(或CPU內核)的群集的響應性,并且渲染節(jié)點僅具有單個CPU痒玩。
As of 04/08/2009, the Vrui VR toolkit has been released publicly under the GNU General Public License version 2, and the most recent and several older versions are available for download from the download page.
2009年8月4日淳附,Vrui VR工具包已在GNU通用公共許可證版本2下公開發(fā)布,最新版本和多個舊版本可從下載頁面下載凰荚。
As of 11/25/2010, the Vrui VR toolkit has moved to version 2.0.
As of 06/07/2011, the Vrui VR toolkit has moved to version 2.1.
As of 12/16/2012, the Vrui VR toolkit has moved to version 2.6.
As of 08/12/2013, the Vrui VR toolkit has moved to version 3.0.
As of 12/14/2013, the Vrui VR toolkit has moved to version 3.1.
As of 10/13/2016, the Vrui VR toolkit has moved to version 4.2.