JavaScript for multi-projector dome systems

Greetings all,
Last fall, we had a game engine shoot-out here at the Renaissance Computing Institute (RENCI). After considerable testing, we chose Unity as our pick for creating interactive 3D applications. One of our first tasks was to get Unity running in our unusual display environments.

After some inspired work by David Borland and Mike Conway (both of RENCI), we have gotten Unity running on a 5-meter diameter full hemisphere dome projection system. The application runs at 2Kx2K, split between four projectors. The dome supports a field of view of about 175 degrees, and provides an excellent sense of immersion and 3D. It’s a great format for simulation, serious games, plain ol’ fun games and more.

You can read more about this project, download the multi-projector JavaScript for Unity, read a brief tutorial and see a video on the UNC RENCI website. We’ve already got several projects lined up that will use Unity in the dome!

wow, epic :smile:

Cool, nice stuff!

For linklazy people, here’s a direct link to a youtube demo:

Bye, Lucas

There appears to be a problem with the script file, so while I’m fixing it, here’s the actual code:

/*=========================================================================

Name: DomeChannel.h

Author: David Borland, The Renaissance Computing Institute (RENCI)

Copyright: The Renaissance Computing Institute (RENCI)

License: Licensed under the RENCI Open Source Software License v. 1.0.

See included License.txt or
http://www.renci.org/resources/open-source-software-license
for details.

=========================================================================*/

// Set the field of view
camera.fieldOfView = 86.0;
camera.aspect = Mathf.Tan(56.0 * Mathf.PI / 180.0) /
Mathf.Tan(43.0 * Mathf.PI / 180.0);

// Make sure we start with an identity transformation
transform.localPosition = Vector3(0.0, 0.0, 0.0);
transform.localRotation = Quaternion.identity;
transform.localScale = Vector3(1.0, 1.0, 1.0);

// How much to pitch in the dome.
// Keep this private so that every instance of the script has the same value.
private var pitch = 0.0;

// Select per-channel heading and viewport
var channel = 1;

private var x = 0.25;
private var y = 0.25;
private var heading = 90.0;

switch (channel) {
case 1:
x = 0.0;
y = 0.0;
heading = -45.0;
break;

case 2:
x = 0.5;
y = 0;
heading = 45.0;
break;

case 3:
x = 0.0;
y = 0.5;
heading = -135.0;
break;

case 4:
x = 0.5;
y = 0.5;
heading = 135.0;
break;
}

// Do the rotation
transform.Rotate(Vector3(90.0 - pitch, 0.0, 0.0));
transform.Rotate(Vector3(-52.5, heading, 0.0));

// Do the viewport
camera.rect = Rect(x, y, 0.5, 0.5);

function Update () {
}

The link to the DomeCamera JavaScript is now fixed. Go to my blog for more:
http://unc.renci.org/rencinews/the-dome-corner-006

…or download directly:
http://unc.renci.org/drops/code/unity/DomeCameras.js

Cheers,

–ek

Mike Conway of RENCI has written a C## app that allows you to open a Unity window at resolutions not currently supported by the Windows native viewer.

http://unc.renci.org/rencinews/cwpf-app-to-open-unity-plug-in-window-at-custom-dimensions

This app, when combined with Unity output to its web player format, will allow Unity apps to play correctly even on dome screens or other non-standard multi-channel systems.

–ek

Thanks to you both, this is ample information to get us started! This is wonderful…

We will post our findings as soon as they pop up!

Thanks again.