A Universe can contain one or more Spaces. Think of a Space as just that, a space to place objects in. It has a coordinate system that defines each object's position, rotation and scale. Spaces also contain a Timeline that can be used to synchronize global events that occur in the Space.
A Space is comprised of a library of both spatial objects (or Nodes) and non-spatial objects (such as textures or signals). Nodes exist as clickable/visible objects in the space while non-spatial objects can only be accessed via their thumbnail in the browser panel. The non-spatial objects generally are comprised of objects that influence spatial objects. For example, a Texture (non-spatial) is used in a Material (non-spatial) that is ultimately used to render a MeshEntity (spatial).
There are four primary types of Spaces: OpenSpaces, TerrainSpaces, SkySpaces and ScreenSpaces. Let's take a closer look at each:
OpenSpace / TerrainSpace / SkySpace
OpenSpaces are 3D spaces that have physical properties such as atmosphere, lighting and physical forces/characteristics. Besides simple OpenSpaces, there are two additional types of OpenSpaces:
- TerrainSpaces: additionally have a terrain surface and an ocean.
- SkySpaces: additionally render a simulated sky.
Both OpenSpaces and TerrainSpaces can additionally have a horizon space. Let's take a deeper look at how horizon spaces work:
A horizon space is a Space that lives in the horizon -or background- of a space. The foreground space also inherits its lighting and atmosphere characteristics from its horizon space. You can learn more about light and Spaces in the next article.
Horizons are used to create dynamic sky-boxes comprised of stuff that lives in the distance. For instance, you can place a cube-map into a horizon to surround the viewer inside a 360 image. Another use would be to place large sound sources inside a horizon space to immerse the viewer in sounds that stay regardless of the viewer's position.
Let's take a look at the default space that is created when you first enter Simmetri or go to File/New. The default TerrainSpace created (the foreground space) has as its horizon space a SkySpace (the background space). We can see this by viewing the root properties of the TerrainSpace.
In this case, the SkySpace is a type of Space comprised of a simulated sky whose properties we can alter to create sunsets and other time of day effects.
The 'Distance Scale' property let's us set how the scale of the horizon is defined in the context of the foreground space. For instance, 1 unit in a horizon space rendered at a distance scale of 1000 would be = 1000 units of the foreground space. In other words, if we placed a sphere with a radius of 1 into a horizon space and rendered it with distance scale set to 1000, it would appear on the horizon from the foreground space as if it had a radius of 1000. The sphere would also parallax shift accordingly as the camera is moved.
Since horizon spaces are just spaces, they too can have horizon spaces. This nesting of spaces allows us to define various background layers. We can see an example of this when we use the 'Horizons / Pyramids' tool from the toolbox. It creates a view that looks something like this:
In this case, the foreground space is a TerrainSpace, whose horizon space is an OpenSpace, that contain the pyramids objects. Finally, the pyramid OpenSpace's horizon space is a SkySpace that renders the sunset. Since the 'Inherit Atmosphere' property is set to true for both the TerrainSpace and OpenSpace, the SkySpace's atmosphere (which includes lighting and haze effects) is passed through to the foreground space.
- You can select the horizon space and display its properties by clicking on the sky. If you click the ground, you will instead select the foreground space.
ScreenSpaces are used to create 2D overlays for heads-up displays and other user GUI purposes. You can layer a ScreenSpace onto an OpenSpace via a ViewPort.