User Manual

バッチング

バッチング (Batching) とは、複数のメッシュインスタンスを1つのメッシュインスタンスに結合することで、すべてを1回のGPUドローコールでレンダリングできるようにするプロセスです。 PlayCanvasは、ModelSprite、およびElementコンポーネントに便利な機能を提供し、これらのコンポーネントをBatch Groupに割り当てることができます。これにより、エンジンがメッシュを結合して総ドローコール数を減らす方法に関するヒントを与えることができます。

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

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

現在、バッチングの使用は、各ライトマップ付きオブジェクトに独自のライトマップテクスチャが必要であるため、ランタイムライトマップと互換性がありません。

Batch Groupの作成

Batch Groupの作成

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

Batch Groupのプロパティ

Batch Groupにコンポーネントを追加

Selecting Batch Groups

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

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

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

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

トリガー再バッチング

Batch Groupに基づいて、エンジンはメッシュインスタンスの最適化されたバージョンを作成します。オリジナルのメッシュインスタンスの多くのプロパティに対するさらなる変更は、最適化されたバージョンに反映されません。バッチングを使用して良好なパフォーマンスを実現する一方で、いくつかの更新を許可するために、オリジナルのメッシュインスタンスに変更を加えた後にエンジンに個々のBatch Groupの再バッチングをリクエストすることができます。これは、ユーザーインターフェイス要素コンポーネントでよく使用され、バッチ処理を設定したいが、まれに更新が必要な場合に役立ちます。ただし、グループを再バッチングすることは、コストがかかる場合があります。多くの場合、更新が必要な要素を別々のBatch Groupに分離することで、再バッチングの影響を最小限に抑えることができます。

以下は単純なスクリプトの例です。このスクリプトは、要素のtextureAssetを更新し、Batch Groupを変更済みとしてマークします。

// 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以上のドローコールを作成して、各モデルを個別にドローしています。ただし地面を除き、これらのモデルはすべて同じマテリアルを使用しており、このためBatch Groupに結合することができます。

Western Animation Batched

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

用語集

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