Dome

In Heureka there’s possibility to make games with planetarium dome projector.

Main planetarium dome is projected with two projectors. Resolution is 4096×2160, but we can only use half of that, that is 2048×1060. Projectors map north and south hemisphere parts separately and require non-trivial projection transformation. There’s Windows 8 workstation connected to projectors. Large planetarium dome is available to us only at specific times during the weekend.

There’s also small dome that is available to us during the whole weekend. Small dome has only one projector and utilizes simple fisheye projection. Resolution is 1600×1200 and projected circular area is in middle of this with diameter of 1200 pixels. There’s no dedicated workstation for using this dome, so you can plug your laptop directly to this projector.

Dome projection. Small dome uses this projection directly, with large dome north and south parts are projected separately and require distortion transformation.

Projection Distortion

Easiest way to handle projection distortion is to use reverse UV-image maps to map projector display pixels to fisheye projection space. Projection image maps are generated by modelling projector and dome positions, and are not totally accurate. You can find current versions of maps from #dome channel in Slack.

Mapping is encoded in 32bit RGBA png image. R and G channels contain 8 low and 8 high bits of U coordinate, respectively. Similarly, B and A channels contain low and high bits of V coordinate.

// Example of GLSL fragment shader for using projection transform UV-maps
uniform sampler2D u_texMapping;
uniform sampler2D u_texMaster;
varying vec4 v_texCoord;

void main()
{
  vec4 source = texture2D(u_texMapping, v_texCoord.xy);
  source.ga += source.rb/256; // add uv low bits
  gl_FragColor = texture2D(u_texMaster, source.ga);
}

Contributions (instructions, code samples, Unity projects,…) for utilizing the dome are very welcome 🙂 Discuss in #dome Slack channel, or send contributions directly to kosti@quantumgamejam.com or @kosti.