In the articles of this section, we looked at what Simmetri objects are made of (The Core Simmetri Object), how these fit into the grander Universe scheme (Structure Of A Simmetri Universe) and how these are placed into Spaces and lit to eventually render out to the user (Spaces and How Light Works). Now we're going to look at how everything fits together and what the overall pipeline looks like.
The Default Universe (File/New)
Let's break down what we start with when we create a new Universe.
- Click on File menu/New
The first thing you'll see is a space rendering in front of you. This is the default TerrainSpace that's created for you.
- Undock the browser panel at the top left
If we look in the browser panel, we'll see that this TerrainSpace lives in your Universe's root library. The TerrainSpace itself is also a library that contains objects. You can browse the objects of both the root Universe and the TerrainSpace by clicking on them in the browser panel and looking at the objects they contain on the right side of the panel (as filtered by the selected item in the middle list).
- We could choose to delete the TerrainSpace from the root Universe library and instead create a blank OpenSpace if we want to start with a completely blank space.
Next, the reason we can actually see the TerrainSpace rendering in front of us is that it is being rendered through a ViewPort.
- Undock the viewport panel at the bottom right
On the viewport panel, you'll see a 'TerrainSpace ViewPort' comprised of two layers (that render from bottom to top): An Exposure Layer and a View Layer, labeled as 'Default Camera: TerrainSpace'. The View Layer (via its properties) is configured to render our Default Camera inside the TerrainSpace. The Exposure Layer, in turn, takes the raw camera image data (which comes in as high dynamic range) and adjusts its brightness to be viewable on your display. Finally, this ViewPort passes through the Master Display of the Universe.
- Undock the browser panel
- Click the Universe item from the left list
- Double-click on Master Display from the right list
If you look at the Master Display's properties, you'll see that it renders the 'TerrainSpace ViewPort' out to any connected device, which you can configure under 'Edit menu/Preferences/outputs'. By default the Master Display is configured to render out of your primary monitor.
- The ViewPort panel essentially lists all the ViewPorts that exist in the Universe library.
- When we create additional ViewPorts, clicking them on the viewport panel causes the Master Display's 'Active Viewport' property to be set to the selected ViewPort.
- You can either programmatically set or keyframe the 'Active Viewport' property of the Master Display to dynamically change camera angles/spaces.
The other thing you'll notice on File/New is the timeline panel (at the bottom of the screen) is, by default, editing the 'TerrainSpace Timeline'. Each Space has a Timeline that can be used to keyframe global events and properties in the Space. You can also control the time-scale of physics of the space via the Space's timeline properties. The Universe also has a Timeline whose time-scale property affects all child Space timelines.
- You can create additional Timelines to bundle animations together. You can right-click on a property and select 'New Key Track' to create a track for keyframing the property inside the currently editing Timeline.
Lastly, let's look at how player control works in a Space that ultimately determines what object in the space is controllable via user inputs (like a gamepad, keyboard or VR hand controller).
- Undock the toolbox panel at the left side of the screen
- Select 'actors' from the top list
- Select 'movable ball' from the bottom list
- Left-click and drag your mouse in the Space to create a small sphere
- Right-click to exit draw mode
After creating the MovableBall, Simmetri, by default, assigns it as the active player node of the current ViewPort. Let's see where that happens.
- Undock the viewport panel
- Double click 'TerrainSpace ViewPort'
The property editor panel will undock revealing the ViewPort's properties (if it doesn't for some reason, you can right-click 'TerrainSpace ViewPort' and select 'Display Properties'). Under the ViewPort's properties, you'll see the 'Player Node' property which is currently set to 'MovableBall'. Each ViewPort has a Playable Node property that can be set to enable that object's controllability so long as the ViewPort is actively rendered.
The MovableBall is playable since it has a PlayerController Attribute added to it (under its MovableObjectActor Attribute). In fact, PlayerControllers are the primary Attribute you can add to any node to make them user controllable via controller inputs. Besides the active viewport's player node, there's a few other objects that can be controllable at the same time. Namely:
- Any child node of the ViewPort's player node that has a PlayerController Attribute
- Any actively rendering Cameras that have a PlayerController Attribute
- Any actively rendering Spaces that have a PlayerController Attribute
- The Overlay ViewPort's player node
- The ViewPort 'Player Node' property also determines what a Camera with a TrackingPlayerController, ChasePlayerController or ViewPortPlayerController will track.
- You can quickly set the 'Player Node' of the current editing viewport by right-clicking an object in the space and selecting 'Set As ViewPort Player Node' from the menu that appears.
- By programmatically setting the 'Player Node' property, you can switch playable objects dynamically, for instance going from a walking character to driving a car.
- You can change the user input bindings for a PlayerController by looking under 'Edit menu/Preferences/inputs'