pc.BatchManager
Glues many mesh instances into a single one for better performance.
Summary
Methods
| addGroup | Adds new global batch group. |
| clone | Clones a batch. |
| create | Takes a mesh instance list that has been prepared by pc.BatchManager#prepare, and returns a pc.Batch object. |
| generate | Destroys all batches and creates new based on scene models. |
| getGroupByName | Retrieves a pc.BatchGroup object with a corresponding name, if it exists, or null otherwise. |
| markGroupDirty | Mark a specific batch group as dirty. |
| prepare | Takes a list of mesh instances to be batched and sorts them into lists one for each draw call. |
| removeGroup | Remove global batch group by id. |
Details
Constructor
BatchManager(device, root, scene)
Parameters
| device | pc.GraphicsDevice | The graphics device used by the batch manager. |
| root | pc.Entity | The entity under which batched models are added. |
| scene | pc.Scene | The scene that the batch manager affects. |
Methods
addGroup(name, dynamic, maxAabbSize, [id], [layers])
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. pc.BatchManager#prepare will split objects into local groups based on this size. |
| id | number | Optional custom unique id for the group (will be generated automatically otherwise). |
| layers | number[] | Optional layer ID array. Default is [pc.LAYERID_WORLD]. The whole batch group will belong to these layers. Layers of source models will be ignored. |
Returns
pc.BatchGroupGroup object.
clone(batch, clonedMeshInstances)
Clones a batch. This method doesn't rebuild batch geometry, but only creates a new model and batch objects, linked to different source mesh instances.
Parameters
| batch | pc.Batch | A batch object. |
| clonedMeshInstances | pc.MeshInstance[] | New mesh instances. |
Returns
pc.BatchNew batch object.
create(meshInstances, dynamic, [batchGroupId])
Takes a mesh instance list that has been prepared by pc.BatchManager#prepare, and returns a pc.Batch object. This method assumes that all mesh instances provided can be rendered in a single draw call.
Parameters
| meshInstances | pc.MeshInstance[] | Input list of mesh instances. |
| dynamic | boolean | Is it a static or dynamic batch? Will objects be transformed after batching? |
| batchGroupId | number | Link this batch to a specific batch group. This is done automatically with default batches. |
Returns
pc.BatchThe resulting batch object.
generate([groupIds])
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
| groupIds | number[] | Optional array of batch group IDs to update. Otherwise all groups are updated. |
getGroupByName(name)
Retrieves a pc.BatchGroup object with a corresponding name, if it exists, or null otherwise.
Parameters
| name | string | Name. |
Returns
pc.BatchGroupGroup object.
markGroupDirty(id)
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. |
prepare(meshInstances, dynamic, maxAabbSize, translucent)
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 | pc.MeshInstance[] | Input list of mesh instances |
| dynamic | boolean | Are we preparing for a dynamic batch? Instance count will matter then (otherwise not). |
| maxAabbSize | number | 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
pc.MeshInstance[]An array of arrays of mesh instances, each valid to pass to pc.BatchManager#create.