arrow-left

All pages
gitbookPowered by GitBook
1 of 36

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Workflow

The workflow is the container where you will be defining all object relationships.

Relationship Editor

In the Relationship Editor tab you will designate the relationships of your 3D assets to each other and elements in the scene (e.g. ground_plane). Object relationships are defined using a hierarchical structure of parent and child objects. A Workflow may have multiple parent objects, each of which may have multiple child objects.

Parent Object

A Parent Object is a top-level object in your workflow.

  • Category Override: An optional override for the category of objects directly associated to this parent object. If no override is provided, the name of the collection is used for the category (only if a collection is used as the source).

  • Source: The source of this object, which may be an existing asset in the scene, a loaded collection, or a generated asset.

  • Children: All associated to this .

Get Object by Properties

Gets an object currently in the scene provided a category and/or object name.

  • Category: Category of the target object.

  • Object Name: Name of the target object.

  • Partial Match: If checked, partial matches to the provided strings will be accepted when retrieving objects from the scene.

Collection

A collection of assets used as a source for an object.

  • Collection: The specific collection to sample for assets.

  • Samples: Number of assets to load from this collection, provided by an or .

Collection (Array)

A collection of assets arranged in a grid-like array.

  • Collection: The specific collection to sample for assets.

  • X/Y Count: Number of assets to load from this collection in each direction, provided by an or .

Child Object

Child objects are arranged in the scene relative to a . It has similar inputs to a parent object with the addition of a series of which define the specific series of operations to perform in order to place the child object in the scene, typically relative to the .

  • Category Override: An optional override for the category of objects directly associated to this . If no override is provided, the name of the collection is used for the category (only if a collection is used as the source).

integer value
integer range
Tries: The number of attempts to make when placing this object using the provided placement rules before failing and proceeding to the next object in the tree.
  • Chance: The percent chance that the system will attempt to place this object. If a value of less than 100% is provided, there is a chance that this object (and all downstream child objects in the same block) will be skipped.

  • Source: The source of this object, which may be an existing asset in the scene, a loaded collection, or a generated asset.

  • Placement Rules: A sequence of rules to execute when placing this object, typically relative to the direct parent of this object.

  • Children: All child objects associated to this parent object.

  • parent object
    placement rules
    parent object
    parent object
    child objects
    parent object

    X/Y Spacing: The distance between each asset in the array in each direction, provided by a number variable.

  • Spacing Method: Defines how to determine the space between each asset.

    • "Object bounds" sets the spacing of the assets relative to their bounding boxes. If the array consists of multiple assets, the bounds are defined by the maximum value from all sampled assets.

    Array spacing using the "Object bounds" method
    • "Grid lines" places the objects in a grid where the grid lines are spaced using the provided values for X/Y spacing. For example, if the X/Y spacing is set to 1 meter, objects will be placed in a grid where the grid lines are 1 meter apart in the X and Y directions. This method should be used only in cases where assets will have sufficient space between one another and where there is relatively low variation in the size of assets in this collection.

  • Array spacing using the "Grid lines" method
    • Use Largest Dimension: If checked, the largest dimension of an object is used to determine its bounds. For example, if an object is 1x4 meters, the grid spacing will be 4x4 meters. This is useful if you intend to rotate individual objects in the array.

    • Use Single Asset: If checked, the same asset will be instanced for each array element.

    • Separate Array Elements: If checked, placement operations for all downstream child objects will be executed for each element in the array.

    • Remove Invalid Array Elements: If checked, invalid elements (typically caused by object collisions) will be removed after all have been executed. This allows for placement of the entire array to be successful even if individual elements would otherwise cause it to fail.


    In practice, an array is treated as any other object in your simulation. Many placement rules have an "Execute per Array Element" option. If this is enabled, the corresponding placement rule will be executed on a per-element basis. In the below example, a 3x3 array of a single screw asset is placed on a ground plane using the Put Object rule and is subsequently rotated with Rotate Object. When "Execute per Array Element" is disabled, the entire array of objects is rotated together. When enabled, each screw is rotated in-place.

    "Execute per Array Element" disabled
    "Execute per Array Element" enabled
    integer value
    integer range

    Asset Sources

    Assets may be sourced from existing objects already in the scene, generated directly, or be loaded from a collection in your account.

    Translate Object

    Translates an object relative to its current position.

    • Translation (XYZ): Determines the translation vector using an XYZ Range.

    • Execute Per Array Element: If enabled, this placement rule will be applied to each element within the array, provided that the child object's source is an .

    Generator: Ground Plane

    Generates a ground plane object.

    • Size: Size of the ground plane in meters

    • Shadow Catcher: If checked, objects will cast a shadow on the ground plane, but the object itself will otherwise not be visible.

    Scale Object (Uniform)

    Scales an object uniformly (equally along all axes).

    • Scale Factor: Factor by which to scale the object, provided by a . A value of 1 corresponds to the object's original scale.

    Locate Object (Local)

    Sets the location of an object in local space, relative to a on the 's bounding box.

    • Position: Sets the position of the object using a .

    • Face: The to reference on the when positioning the object in local space.

    Locate Object (Global)

    Sets the location of an object in global coordinate space.

    • Position: Sets the position of the object using an .


    Placement Rules

    Placement rules are used to transform . Transformations are done in multiple ways:

    • In global (scene) coordinate space (e.g. translation)

    • In local (object) space (e.g. rotation)

    Basic Transformations

    Basic transformations consist of typical affine transformations such as translation, rotation, and scaling.

    Put Object

    "Puts" an object on a using the top of the and the bottom of the .

    • Position: The relative position of the object on the top of the provided by a .

    • Use Parent Above:

    Number
    XYZ Range
    placement rules
    array

    face
    parent object
    UVW Range
    face(s)
    parent object
    Relative to a parent object (e.g. alignment, orientation, etc.)

    The following workflow constructs a basic scene consisting of a ground plane and screws:

    • A ground plane (0.5m x 0.5m) is generated using a Ground Plane generator

    • Multiple screws are loaded from a collection

    • The screws are organized using a series of placement rules:

      • : Places the screws on the ground plane between the UV coordinates (0.2, 0.2) and (0.8, 0.8)

      • : Rotates each object about its local Z axis between 0 and 360 degrees

    child objects
    If enabled, this
    will instead reference the
    above this object's direct parent in the tree. For example, if the hierarchy of objects is Table > Plate > Food where "Food" is the
    , enabling "Use Parent Above" in this case would use "Table" as the
    instead of "Plate".

    In this example, an array of screws is placed on the center of a ground plane using the "Put Object" placement rule.

    parent object
    face
    parent object
    face
    child object
    face
    parent object
    UV Range
    placement rule
    parent object
    child object
    parent object

    Attach Object

    Attaches one object to another provided a face for each.

    • Parent Face: Reference face on the parent object.

    • Child Face: Reference face on the child object.

    • Position: Relative position of the on the of the provided by a .

    • Execute Per Array Element: If enabled, this will be applied to each element within the , provided that the 's source is an .

    • Use Parent Above: If enabled, this will instead reference the above this object's direct parent in the tree. For example, if the hierarchy of objects is Table > Plate > Food where "Food" is the , enabling "Use Parent Above" in this case would use "Table" as the instead of "Plate".


    Drop Object

    "Drops" an object onto a parent object using a vertical raycast to determine the point of intersection. If there is no intersection (i.e. the child object is not located directly above a surface), the rule will fail.

    • Execute Per Array Element: If enabled, this placement rule will be applied to each element within the array, provided that the child object's source is an array.

    • Use Parent Above: If enabled, this will instead reference the above this object's direct parent in the tree. For example, if the hierarchy of objects is Table > Plate > Food where "Food" is the , enabling "Use Parent Above" in this case would use "Table" as the instead of "Plate".


    The following workflow uses the "" rule to place screws on a ground plane:

    • A ground plane (0.5m x 0.5m) is generated using a generator

    • Multiple screws are loaded from a

    • The screws are organized using a series of :

    Align Objects

    Aligns a child object to a parent object, given a bounding box face for each. The objects to not necessarily have to intersect with one another. The parent face is treated as an infinite plane when aligning the child object.

    • Parent Face: Reference face on the parent object.

    • Child Face: Reference on the .

    • Use Nearest Parent/Child Face: If enabled, the most appropriate will be automatically determined by proximity.


    In this example, between 2 and 4 screws are placed on a using the "" . For each object, an additional screw is placed on the using the same method and referencing the one level above. The objects are then aligned to one another using the right of the and the left of the .

    Face

    Defines a face of a to sample.

    If multiple faces are used as a single input, the selected face will be chosen at random.

    Each option indicates a locally-aligned bounding box face of a given object from the following options:

    • Right, Left, Front, Back, Top, Bottom

    Additionally, there is an "Any" option which samples from (Right, Left, Front, Back) at random.

    Move Object Nearby

    Moves a horizontally (within the global XY plane) to be within a specified distance range relative to the .

    • Minimum/Maximum Distance (m): Distance from the bounds of the provided by a.

    A region representing the provided distances is created by inscribing the bounds of the object with an ellipse. A distance of 0 corresponds to no offset from the original object bounds (shown as "minimum" below). Distances above 0 offset the object bounds by that specified distance. The outer region is defined by inscribing the offset bounds with a new ellipse. By using an ellipse, this prevents the corners of the rectangular region from being sampled, which would otherwise sample distances greater than intended. Furthermore, using a circular region relative to the object center would not account for objects with a footprint of uneven proportions (e.g. a vehicle).

    Neighbor

    Places an object near another, relative to a bounding box face on each.

    • Parent Face: Reference on the .

    • Child Face: Reference on the .

    Put Object
    Rotate Object
    child object
    face
    parent object
    UV Range
    placement rule
    array
    child object
    array
    placement rule
    parent object
    child object
    parent object
    Locate Object (Global): Moves the screws to positions between (-0.5, -0.5) and (0.5, 0.5) at a height of 1 meter.
  • Drop Object: Drops the screws onto the ground plane (parent object).

  • Rotate Object: Rotates the screws about their local Z axis.

  • placement rule
    parent object
    child object
    parent object
    drop object
    Ground Plane
    collection
    placement rules
    face
    child object
    face
    ground plane
    Put Object
    placement rule
    ground plane
    parent object
    face
    parent object
    face
    child object

    The following sample uses the "Attach" rule to place a child object relative to a parent object where the face on the parent object is the "Top" and the face on the child object is the "Bottom".

    parent object
    A placement rule using multiple options for the "Child Face" input

    In this example, between 2 and 4 screws are placed on a ground plane using the "Put Object" placement rule. For each object, an additional screw is aligned to it using the "Align Objects" placement rule. The same screw is then moved to be near another screw with a minimum distance of 0.05 meters and a maximum distance of 0.1 meters.

    child object
    parent object
    parent object
    Number

    Offset Distance: Distance to offset from the parent face when placing the child object provided by a Number.

  • Horizontal Position: Horizontal position along the parent face to use when placing the child object. A value of 0 corresponds to the left edge, while a value of 1 corresponds to the right edge. Provided by a Number.


  • face
    parent object
    face
    child object

    Vectors

    Various 2D and 3D vectors are used to define positions in the scene, either relative to the scene coordinates (XYZ) or relative to another object/face (UVW).

    Integer Range

    Samples a range of integers from a min and max (inclusive) value. For example, if the range is between 4 and 6, the value can be either 4, 5, or 6.

    Orient Object to Surface

    Re-orients an object to align to the nearest surface. This is typically used when placing objects on an uneven surface.

    • Child Face: Reference face on the child object.

    • Execute Per Array Element: If enabled, this placement rule will be applied to each element within the array, provided that the 's source is an .


    In this example, multiple cars are placed on a ground object currently in the scene. The "" performs the initial placement of the car on the ground. It is then about its Z axis by a random amount, and finally oriented to the surface using its bottom .

    Complex Transformations

    Complex transformations may consist of several basic transformations and typically reference a parent and/or child bounding box face.

    Rotate Object

    Rotates an object about its local axes.

    • Rotation (Degrees): Amount by which to rotate the object per axis in degrees. Provided using an XYZ Range.

    • Step Size (Optional): Locks the rotation amount to a given step size. For example, a step size of 90 will limit rotation values to 0, 90, 180, and 270. This value is typically an integer, however may also be used.

    • Execute Per Array Element: If enabled, this will be applied to each element within the , provided that the 's source is an .

    UVW Range

    Defines a range of coordinates in local 3D space. This is typically associated with the face of a bounding box.

    • U (min/max): Position along the horizontal (U) axis.

    • V (min/max): Position along the vertical (V) axis.

    • W (min/max): Position along the normal (W) axis. Unlike the U and V components, the W component is expressed in meters. For example, the point (0.5, 0.5, 1) in UVW space as implemented in this system corresponds to a point aligned to the center of a bounding box face (0.5, 0.5), offset by 1 meter along the face's normal (away from the face).


    Float Value

    Provides a single floating point value.

    Integer Value

    Provides a single integer value.

    Numbers

    Numerical inputs are used across many placement rules and associated blocks. Typically, any of these blocks (integer/float) may be used, unless the input is defining a count, in which case an integer block must be used.

    XYZ Range

    Defines a range of coordinates/values in object or scene (XYZ) space.


    XYZ Ranges are used to sample a range of values per axis (X, Y, Z). The specific implementation of these values varies per placement rule. Different implementations are illustrated below:

    • Locate: Used to determine the position of the object in global space.

    • Translate: Translates the object using a vector defined by an XYZ range.

    • Rotate: Rotates the object about each of its local axes by a specified number of degrees.

    • Scale: Scales the object about each of its local axes by a factor.

    Float Range

    Uniformly samples a floating-point number defined by a minimum and maximum.

    float values
    placement rule
    array
    child object
    array
    child object
    array
    Put Object
    placement rule
    rotated
    face
    Sample implementation of a UVW Range block

    Variables

    Variables are used as generic inputs primarily for in your object relationships.

    Scale Object (Non-Uniform)

    Scales an object non-uniformly with a different value per axis.

    • Scale: Factor by which to scale the object along each axis, as provided by an .

    placement rules
    XYZ Range

    UV Range

    Defines a range of coordinates in local 2D space. This is typically associated with the face of a bounding box.

    • U (min/max): Position along the horizontal (U) axis.

    • V (min/max): Position along the vertical (V) axis.


    Sample implementation of a UV Range block