User Manual

バッチング

Batching is the process of combining multiple mesh instances together into a single mesh instance, so that they can all be rendered in a single GPU draw call. PlayCanvas provides a handy feature on the Model, Sprite and Element components that lets you assign these components to batch groups which give the engine hints on how to combine meshes to reduce the overall draw call count.

メッシュインスタンスを組み合わせることができるか、エンジンが確認するためのルールが多数存在しています。最初のルールは、すべてのメッシュインスタンスが同じマテリアルを共有する必要があるというものです。

一般的なバッチングの使用例は以下のとおりです:

The use of batching is currently not compatible with runtime lightmaps due to each lightmapped object requiring its own unique lightmap texture.

バッチグループの作成

Creating Batch Groups

バッチグループはシーン設定パネルのバッチグループセクションから作成できます。 各バッチグループには多くのプロパティがあり、これらのプロパティはこのバッチグループからバッチを作成する方法についてのヒントをエンジンに示すために使用されます。

バッチグループのプロパティ

バッチグループにコンポーネントを追加

Selecting Batch Groups

モデルコンポーネントにはバッチグループプロパティがあり、このプロパティを使用してモデルをバッチグループに割り当てます。

メッシュインスタンスを結合させるルール

エンジンがメッシュインスタンスを結合できるかのルールは非常に複雑ですが、簡潔にいえば1つのバッチに属するすべてのメッシュインスタンスは、以下に従う必要があります:

バッチグループにすべてのルールにしたがうわけではないコンポーネントまたはメッシュインスタンスが含まれる場合、バッチグループは複数のバッチを作成し、すべてのルールにしたがうメッシュインスタンスを含む個別のバッチが複数作成されます。

Trigger re-batching

Based on Batch Groups the engine creates an optimized version of mesh instances. Further changes to many properties of the original mesh instances are not reflected in the optimized versions. To allow for good performance by using batching, while still allowing some further updates, you can request the engine to rebatch individual Batch Groups after you make changes to the original mesh instances. This is often useful with User Interface element components, where you might want to set up batching, but still need to do infrequent updates. Note that re-batching a group is a potentially expensive operation. In many cases, the impact of rebatching can be minimized by separating elements that need updating to separate Batch Group.

Here is an example of a simple script. The script updates textureAsset on an element, and marks the Batch Group as dirty.

// change textureAsset on element
element.textureAsset = this.hoverAsset;

// if this element has Batch Group set, mark it dirty to rebuild the group in the next frame
if (element.batchGroupId)
    this.app.batcher.markGroupDirty(element.batchGroupId);

例 - 静的環境のバッチング

Western Scene

このシーンでは、7つの個別のモデルファイルから静的環境を作成しました。これらの一部はシーン内で反復されます。たとえば、ロードタイルは50個のエンティティで使用され、シーンの中央で長い道路が作成されています。

Western Animation

アニメーションでは、各ドローコールが作成される点を参照できます。この環境では、エンジンは50以上のドローコールを作成して、各モデルを個別にドローしています。ただし地面を除き、これらのモデルはすべて同じマテリアルを使用しており、このためバッチグループに結合することができます。

Western Animation Batched

このアニメーションでは、建物、サボテン、道路、地面用に4つのバッチグループを作成しました。道路と地面は1つのドローコールに結合されていない点に留意してください。これは、メッシュがバッチグループで定義されたMax AABBサイズよりも大きいためです。

用語集

This site is translated by the community. If you want to get involved visit this page