User Manual

バッチング

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

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

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

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

バッチグループの作成

バッチグループの作成

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

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

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

Selecting Batch Groups

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

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

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

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

トリガー再バッチング

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

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

// 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