Simmetri and all the objects that live inside your Universe are built from a common object framework. This framework provides features that all objects share. Namely all objects in Simmetri:
- Can have a name
- Can have properties
- Can be augmented with additional Attributes
Let's look at properties and attributes:
Properties are values that are used to define an object's state. For instance, a BoxShape object contains a Dimensions property that is a 3D value that defines its width, height and depth.
Attributes are objects that extend the functionality of other objects with additional characteristics or properties. For instance, the RigidBody Attribute adds a bunch of additional properties to a MeshEntity and causes it to behave with physics such that it becomes collidable with other MeshEntities with RigidBodies and is influenced by gravity.
Properties are themselves built upon the same framework as all other objects and thus can have Attributes as well. Some property Attributes, for instance, can be used to animate the property value.
- In script, the base Simmetri object (as you'll see it in the script docs) is referred to as AntimatterObject.
There's two main classes of object. Spatial (or Nodes) and non-spatial. Spatial objects exist in a Space (and can be seen/selected/interacted with) while non-spatial objects can only be accessed via their thumbnail in the browser. Let's take a look at each of the different types of objects that exist or can be created in Simmetri.
A node is an object with a 3D position in Space. It can have child objects that can move with it. All other types of Nodes that we'll now look at inherit the properties of a Node, namely they have a position in 3D space and can have child nodes.
A MeshEntity is essentially a 3D object that we can see and interact with. It's comprised of a Shape that defines the surface of the object as well as a list of materials used to shade the object.
A sound is an audible node that generates a sound on demand at its location in space, perhaps in response to an event or collision.
A speaker is an audible node that produces sound at a its location in space based on a source stream of audio.
A point light is a type of Node that produces light that can illuminate shaded objects like MeshEntities.
Cameras are used to define a viewpoint for where and what a viewer can see into a Space. The camera is then set as the View of a ViewPort ViewLayer that ultimately renders out to the viewer.
Emitters are used to generate objects at playtime. NodeEmitters, for instance, can generate any type of Node at playtime by copying a source node you can define in a NodeEmitter's properties.
Triggers are shapes that are used to run script whenever a Node (with a particular attribute called TriggerActivating) passes through the Trigger shape.
Units are Nodes with their own library of objects intended to bundle together everything needed to represent an object. For instance a tree Unit could contain within its library all the texture and materials needed to render the tree along with the MeshEntity of the tree itself. Units can also have their own Timeline for their child objects that can be used to activate animations on demand.
Textures are images that are used to add texture or others details to the shading of objects through their Materials.
Audio such as AudioClips or AudioStreams are used as the source sound data for the audible nodes defined above (i.e. Sounds and Speakers).
Materials are the primary properties that define the shading of MeshEntities. They are comprised of various properties to define the lighting, translucency, and color characteristics of rendering objects.
Pulses generate events at particular points in time. An event can be used to change the value of a property or run some script.
Signals are periodic streams of numerical data that can be used to change the value of properties automatically.
Collision models allow you to define the result of a collision between two physically moving MeshEntities with RigidBodies.
Sample sets are groups of objects that can be used as a source for NodeEmitters or any place where an organized set of objects is useful.
Scripts are objects containing code that can be accessed from other objects or run directly via events the Scripts connect to.
And Other Base Objects
These are outlined in the next article.