Igloo Basics - Aspect Ratio
As more and more Igloo permanent installations are custom shaped, be that custom structures or existing rooms, it’s becoming more and more common that the default, even distribution of content among the projectors is an inappropriate method of divvying up the content. This is because the aspect ratio of each portion of the screen can change based on the projector model, distance between projector and screen, and the physical width and height of the wall to name just a few factors! With that in mind, Igloo provides custom test cards to help ensure the content is properly distributed.
The above image is an example test card. The differing dimensions in the room will be reflected in the pixel measurements provided. Further, the test cards will also contain the normalised widths and heights of each projector, to allow the warper to be easily configured.
Warper settings:
At the bottom of IglooWarperMainSettings.xml there’s a <Displays></Displays> tag which contains the normalised locations of all the displays.
<displays>
<display canvasPosU="0.000000" canvasPosV="0.000000" canvasSubsectionWidth="0.200000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.200000" canvasPosV="0.000000" canvasSubsectionWidth="0.200000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.400000" canvasPosV="0.000000" canvasSubsectionWidth="0.200000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.600000" canvasPosV="0.000000" canvasSubsectionWidth="0.200000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.800000" canvasPosV="0.000000" canvasSubsectionWidth="0.200000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
</displays>
The above snippet shows the default settings upon a warper install. This organises the five displays evenly along the canvas, and sets the width of each to 1/5th of the total canvas. The result of this would appear as below:
Example: A 3x2m wall
This works fine for a standard cylinder or dome where each projector is given the same amount of screen real estate to project on - but if we were to consider a rectangular room, say 3m*2m , each wall of which has been designed to be projected on by a single projector, we wouldn’t want to send the same amount of content to each room.
Let’s suggest the wall height for each wall is 1.6875 (to give a perhaps unlikely aspect ratio 16:9 on the longer wall) - if we send the same content to each projector in this case, the shorter wall content would appear visibly (and significantly) squished. The below image is a geometry testing test image where the aspect ratio is maintained at 16:9
And below, but rescaled to fit the 2m wall:
At this point it should be clear to see the circles are now elliptical, and the squares rectangular. The solution, then, is while the display resolution of all the projectors may be the same at, say, 1920x1080, the content that we pass to them shouldn’t be. The below image is the same resolution as the above image, but has been cropped so the aspect ratio is preserved.
The point here, is that as long as the content creators understand what aspect ratio each projector needs, they can create custom content canvases to ensure the best looking content. But how does this then apply to the warper config file? The default config file for four projectors would appear as below:
<displays>
<display canvasPosU="0.000000" canvasPosV="0.000000" canvasSubsectionWidth="0.250000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.250000" canvasPosV="0.000000" canvasSubsectionWidth="0.250000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.500000" canvasPosV="0.000000" canvasSubsectionWidth="0.250000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.750000" canvasPosV="0.000000" canvasSubsectionWidth="0.250000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
</displays>
Using the measurements previously discussed, we’d expect a total canvas width in pixels of 1920+1920+1280+1280 = 6400x1080 pixels.
The normalised width of each screen therefore, would be
1920/6400= 0.3 for the 3m walls
1280/6400= 0.2 for the 2m walls
<displays>
<display canvasPosU="0.000000" canvasPosV="0.000000" canvasSubsectionWidth="0.300000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.300000" canvasPosV="0.000000" canvasSubsectionWidth="0.200000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.500000" canvasPosV="0.000000" canvasSubsectionWidth="0.300000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
<display canvasPosU="0.800000" canvasPosV="0.000000" canvasSubsectionWidth="0.200000" canvasSubsectionHeight="1.000000" rotationDegrees="0.000000" centreMask="0.000000" circular="0" defaultCircularGridScale="1.000000" inverseSphereDistortionParam1="1.000000" inverseSphereDistortionParam2="0.500000" inverseSphereDistortionEnabled="0"></display>
</displays>
This is a very simple example, but the concepts discussed here should hopefully carry through into the more complicated installs
Related content
(c) Igloo Vision Ltd. 2023