Glues many mesh instances into a single one for better performance.

Constructors

Methods

  • Adds new global batch group.

    Parameters

    • name: string

      Custom name.

    • dynamic: boolean

      Is this batch group dynamic? Will these objects move/rotate/scale after being batched?

    • maxAabbSize: number

      Maximum size of any dimension of a bounding box around batched objects. BatchManager#prepare will split objects into local groups based on this size.

    • Optionalid: number

      Optional custom unique id for the group (will be generated automatically otherwise).

    • Optionallayers: number[]

      Optional layer ID array. Default is [LAYERID_WORLD]. The whole batch group will belong to these layers. Layers of source models will be ignored.

    Returns BatchGroup

    Group object.

  • Takes a mesh instance list that has been prepared by BatchManager#prepare, and returns a Batch object. This method assumes that all mesh instances provided can be rendered in a single draw call.

    Parameters

    • meshInstances: MeshInstance[]

      Input list of mesh instances.

    • dynamic: boolean

      Is it a static or dynamic batch? Will objects be transformed after batching?

    • OptionalbatchGroupId: number

      Link this batch to a specific batch group. This is done automatically with default batches.

    Returns Batch

    The resulting batch object.

  • Destroys all batches and creates new based on scene models. Hides original models. Called by engine automatically on app start, and if batchGroupIds on models are changed.

    Parameters

    • OptionalgroupIds: number[]

      Optional array of batch group IDs to update. Otherwise all groups are updated.

    Returns void

  • Mark a specific batch group as dirty. Dirty groups are re-batched before the next frame is rendered. Note, re-batching a group is a potentially expensive operation.

    Parameters

    • id: number

      Batch Group ID to mark as dirty.

    Returns void

  • Takes a list of mesh instances to be batched and sorts them into lists one for each draw call. The input list will be split, if:

    • Mesh instances use different materials.
    • Mesh instances have different parameters (e.g. lightmaps or static lights).
    • Mesh instances have different shader defines (shadow receiving, being aligned to screen space, etc).
    • Too many vertices for a single batch (65535 is maximum).
    • Too many instances for a single batch (hardware-dependent, expect 128 on low-end and 1024 on high-end).
    • Bounding box of a batch is larger than maxAabbSize in any dimension.

    Parameters

    • meshInstances: MeshInstance[]

      Input list of mesh instances

    • dynamic: boolean

      Are we preparing for a dynamic batch? Instance count will matter then (otherwise not).

    • maxAabbSize: number = Number.POSITIVE_INFINITY

      Maximum size of any dimension of a bounding box around batched objects.

    • translucent: boolean

      Are we batching UI elements or sprites This is useful to keep a balance between the number of draw calls and the number of drawn triangles, because smaller batches can be hidden when not visible in camera.

    Returns MeshInstance[][]

    An array of arrays of mesh instances, each valid to pass to BatchManager#create.