Document toolboxDocument toolbox

Private & Confidential

Reference Guide

Components Documentation

How to use this document

The best way to use this document is like a reference guide, searching by component or setting that you wish to learn more about.
To learn the basics of how to use the template check the Getting Started Page which will provide a good foundation of the main two components.

We will continue to highlight Important terms and concepts with links if you would like to find out more information about them.

Igloo 360 Camera Rig Prefabs

Cylinder, Cube, and Cylinder 6 Camera Rigs

These camera systems are very closely related. Having all the same components with the varibles of those components seperating them.

It creates:

  • n Cameras (n2 for 3D)
  • Rotated at n/360 degrees from eachother.
  • Emitting n seperate streams of content. One per camera.

It contains the following components:

Igloo Camera 3D

This is the main camera creation C# script we have developed. In inherits IglooCamera.cs, which contains the basic definitons but only generates a 2D camera system.

Igloo Settings

  • Number of Cameras:
    Type: Integer | Default Setting: (4,5,6)
    The amount of cameras that will be created by this camera system (doubles this amount for 3D)

  • Camera Name:
    Type: String | Default Setting: UnityCam
    Prefix of the NDI/Spout stream when it is created.

  • Render Width:
    Type: Integer | Default Setting: 8000
    The width in pixels of the stream output. 8000 is standard for Igloos.

  • Player:
    Type: Game Object | Default Setting: null
    - Depricated - Will be removed in a future release

  • Third Person Camera:
    Type: Game Object | Default Setting: null
    - Depricated - Will be removed in a future release

  • Camera Prefab:
    Type: Game Object | Default Setting: null
    This allows you to define a camera that contains extra components or variables that you would like to use for all Igloo Cameras that are created by this script.
    This is very useful for camera based effects, as most are only applied to the main camera and not globally to all cameras in the scene.

  • Use Camera Prefab:
    Type: Boolean | Default Setting: false
    Should the camera prefab defined in Camera Prefab be used as the base for creating the camera system.

Camera Settings

  • Clear Flags:
    Type: Enumeration | Default Setting: Skybox
    This enum specifies what clear flags the cameras will have when they are created. This is not used if you have useCameraPrefab set to true.
    1. Skybox
    2. Color
    3. Solid Color
    4. Depth
    5. Nothing
  • Clipping Planes:
    Type: Vector2 | Default Setting: x=0.1 y=100
    The minimum and maximum clipping range of the created cameras. The camera will not render outside of these distance values.

  • Igloo Field of View:
    Type: Enumeration | Default Setting: Standard
    This enum specifies the FOV of the entire camera system
    1. STANDARD:
      FOV is defined by the amount of cameras, using a 8:1 aspect ratio for 99% of igloo installations, this is correct.
    2. WIDE:
      Sets the FOV and output to reflect a verticle pixel output of 1200. Used when you're using projectors with a 1920x1200 resolution
    3. SUPERWIDE:
      - Depricated - Will be replaced in a future release.
    4. UHD:
      Sets the FOV and output to reflect a verticle pixel output of 2000. Used when you're using projectors with a 3840x2160 resolution

  • Igloo Stream Sender:
    Type: Enumeration | Default Setting: Standard
    This enum specifies how the cameras will emit their texture stream:
    1. Spout:
      A Local machine only based texture streaming service.
      Use this if you are running your application on the same computer as the Igloo software, which for most projects is applicable.
    2. NDI:
      A Local area network based texture streaming service. Use this if your project meets or exceeds the following conditions:
      • It's extremely detailed, in excess of 5 million polygons in the scene.
      • You're using a VR Headset device as the main source of input and control.
      • You want a high framerate output, and therefore as much of the graphics card as possible (First person shooter, or racing game, for example) and the 360 output is used as a spectator device.

  • Rotation Offset:
    Type: Float | Default Setting: -144
    The amount the camera system will rotate itself on creation. This makes sure that one camera is pointing directly forward in an Igloo.

  • Background Colour:
    Type: Color | Default Setting: Black
    The background the camera's will draw if they are set to Color or Solid Color(no alpha) within the Clear Flags variable.

  • Culling Mask:
    Type: Mask | Default Setting: Everything
    This defines what will be culled or not by the cameras when they draw. For more information on this please visit this link.

  • Auto Start:
    Type: Boolean | Default Setting: false
    If this is enabled the camera system will start up by itself. This is set to true by the IglooCameraCreator if you are using the Igloo prefab.

  • Culling Mask 3D:
    Type: Mask | Default Setting: Mixed
    This defines what will be culled or not by the 3D cameras when they draw. We choose to not make the UI layer 3D by selecting this to not get drawn.

Camera Control 3D

This handles OSC messages related to 3D. It then activates the 3D capability by activiating the second set of cameras, and adjusting their spacing to suit.

  • Eye Spacing:
    Type: Clamped Float | Default Setting: 0.0213
    The distance between the cameras in a camera 3D pair. 

  • Lens Shift:
    Type: Clamped Float | Default Setting: 0.053
    The rotation between the cameras in a camera 3D pair.

  • Eye Spacing Max:
    Type: Float | Default Setting: 0.3
    The maximum distance allowed between cameras in a camera 3D pair.

  • Lens Shift Max:
    Type: Float | Default Setting: 0.1
    The maximum rotation allowed between the cameras in a camera 3D pair.

  • Is Inverted:
    Type: Boolean | Default Setting: false
    This is for debug use and is set by code, depending on the values given for lens shift and eye spacing.
    Changing this does not alter anything.

Follow Object Transform

A critical part of the camera system is how it can follow and maintain aspects of its position, rotation, and scale at the same time.

This Script allows you to follow any object in the scene, including all aspects of its transform data. The advantage of also being able to follow only certain aspects of this transform data is also extremely useful.

e.g: Following a 3rd Person camera, with X,Y,Z movement, but only following Rotation Y, allowing for slight tilt in the camera to make it seem more.

  • Object Transform:
    Type: Transform | Default Setting: null
    The transform of the object you wish the camera rig to follow.

  • Follow Position:
    Type: Boolean | Default Setting: true
    Should the camera rig follow the ObjectTransform's position?

  • Follow Rotation:
    Type: Boolean | Default Setting: false
    Should the camera rig follow the ObjectTransform's rotation?

  • Follow Scale:
    Type: Boolean | Default Setting: false
    Should the camera rig follow the ObjectTransform's scale?

  • Position Vector:
    Type: Enum | Default Setting: XYZ
    This is what position axis the camera rig will follow. Other options are:
    • XYZ
    • X
    • Y
    • Z
    • XY
    • XZ
    • YZ
  • Rotation Vector:
    Type: Enum | Default Setting: XYZ
    This is what rotation axis the camera rig will follow. Other options are:
    • XYZ
    • X
    • Y
    • Z
    • XY
    • XZ
    • YZ

  • Scale Vector:
    Type: Enum | Default Setting: XYZ
    This is what scale axis the camera rig will follow. Other options are:
    • XYZ
    • X
    • Y
    • Z
    • XY
    • XZ
    • YZ
  • Position Offset:
    Type: Vector3 | Default Setting: 0,0,0
    Sometimes you will want to offset the position that the camera rig is following. This is usually when the camera rig is not high enough as it follows the pivot of an object, not it's center.
    This allows you to offset the position permanently.

Igloo Camera Controller

This is the main receiver of OSC messages for the camera system, and it also sends OSC messages directed to the Igloo software to update the status of the camera rig (it's 3D status, eye spacing values, etc)

It's not designed to be adjusted, as it's almost hard coded to work as a heartbeat messenger for our igloo servies.

Of course it could be expanded to include extra messages if required.

  • Send Message Interval:
    Type: Float | Default Setting: 50
    The milleseconds interval between heartbeat messages getting sent.

  • Max Clip Distance:
    Type: Clamped Float | Default Setting: 1500
    Scales input value by maxClipDistance and Sets the far clip distance for all cameras in the Igloo Camera Array.

Igloo Save Controller

This saves the state of the igloo camera system into an XML format that is saved in the application's location folder.

It has a debug bool to Auto-Load the last saved status in the editor.

  • Auto Load In Editor:
    Type: Boolean | Default Setting: false
    Load last created save, in Editor Mode.

Unwrap Camera Rig

This camera system is a little different to the 4,5,6 Camera system. Instead of sending n camera feeds, it sends a single canvas of 8000x1000 (or a specified size) over NDI or Spout.

90% of its variables are similar to the other camera rigs, so only the differences will be listed here.

It creates:

  • 4 Cameras
  • Rotated at 90 degrees from eachother.
  • Emitting 1 stream of content at 8000 x 1000 resolution.

It contains the following components:

Igloo Unwrap Camera

This is the main camera creation C# script, and inherits the IglooCamera3D.cs script. Only the differences will be explained here.

  • Num Walls:
    Type: Integer | Default Setting: 4
    The amount of cameras that will be created by this camera system, overwrites the Number of Cameras variable.

  • Spout Sender Left:
    Type: SpoutSenderShaderPass | Spout Sender Shader Pass Left
    This is a custom script that is given the render texture generated from the camera's combined Left views.

  • Spout Sender Right:
    Type: SpoutSenderShaderPass | Spout Sender Shader Pass Right
    This is a custom script that is given the render texture generated from the camera's combined Right views.

Spout Sender Shader Pass

This converts a render texture to an NDI or Spout and sends it. It also applies a fisheye effect to the entire texture by passing it through a custom shader via Blit.

This is a set and forget system, the only occasional problem is the Unwrap material shader may become corrupt due to unity upgrading, in which case it will either need rebuilding or re-assigning to a material.

  • Cam Texture:
    Type: Render Texture | Default Setting: CylinderTextureLeftEye
    This is purely a placeholder, as the texture that gets sent will be constantly generated in memory and will never be a saved asset.

  • Unwrap Mat:
    Type: Material | CylindricalUnwrapMaterialLeft
    This is a custom script that is given the render texture generated from the camera's combined Left views.

Network Sync Example

In the past we have had requests from clients to operate their unity experience in a different way.
They wanted high speed control, without the overhead of the Igloo System. Whilst also wanting a lag free Igloo experience.

The only solution was to create two seperate unity scenes. One as a server, the other as a client. Using our trusted OSC message technology, the client would update every object that was linked with its position, rotation, and location.

Extra functionallity could also be added to send triggers for events.

The client would then be run on the Igloo system, using a spout based camera rig. With the server being run on a gaming laptop, or similar, which would relay messages of all required moving assets to the server.

Data Server

Multiple instances of the data server can be used across the scene, you could theoretically send the position of every object and component.

However Unique names need to be used to avoid confusion.
You could also use this.GetInstanceID() instead of this.name to avoid using duplicates, however this comes with it's own set of problems if the scenes differ.

This is currently setup to SEND the position and rotation of the attached object, to a client with the exact same name.

  • Send Port:
    Type: Int | Default Setting: 9020
    An Open port to send the OSC messages through.

  • Ip Address:
    Type: string | Default Setting: 192.168.0.1
    The IP address of the client machine you are sending messages to. If you are building the project, it would be wise to integrate some sort of XML file system to adjust this value post-build.

Data Client

Multiple instances of the data client can be used across the scene, you could theoretically track the position of every object and component.

However Unique names need to be used to avoid confusion.
You could also use this.GetInstanceID() instead of this.name to avoid using duplicates, however this comes with it's own set of problems if the scenes differ.

This is currently setup to SET the position and rotation of the server with exactly the same name.

  • OSC In Port:
    Type: Int | Default Setting: 9020
    An Open port to receive the OSC messages through.

  • Get Position:
    Type: Bool | true
    Use the position values that are sent in the OSC message packet.

  • Get Rotation:
    Type: Bool | false
    Use the rotation values that are sent in the OSC message packet.

(c) Igloo Vision 2020