MvtUtil: Load serialized mvt.RefVec (B64D -> BitPack -> RefVec)


ASTER::ACTION::MotionControl::MvtUtil: Decodes a Base64 string and loads the BitPack-decompressed mvt.RefVec.

MoveTowards:RefVec はモーションテンプレートの一つであり、参照ベクトル を利用します。この参照ベクトルは、mvt.Pursuer として選択されたオブジェクトインスタンスが移動先の座標として参照する座標データです。


本関数は、シリアライズされた Reference Vector を元のデータ構造 ( C++ std::deque )へ復元する機能です。

データ復元に用いられる文字列は、std::deque をバイナリ化し、BitPack 圧縮したバイナリを Base64 でエンコードしたもの。処理負荷が高くならないようにデータ圧縮には BitPack を、Base64 Decode には SIMD 命令を駆使した高速化手法が採用されています。


Relevant URL


Parameter

ExStrB64RefVec( "ASTER" )

“MotionControl::Expression::MvtUtil: GetStr mvt.RefVec : BitPack” でシリアライズしたデータをエクスプレッションエディターから「文字列データ」として送信してください。


"CQAAADwBAABWAAAAAL6+AL5Cvr4AAABCAL5CAEJCQg=="

CF25 Expression Editor では、次の 2 つの方法が利用できます:

  • Base64 文字列を直接貼り付けて送信する。
  • 外部データ参照を指定してデータを取得する。

ただし、Expression Editor には貼り付け可能な文字列長の上限があり、座標データ量が増えると Base64 文字列の長さも増加し、その制限を超える可能性があります。
このため、サイズ制限の影響を受けない信頼性の高い方法として、外部データ参照の指定を推奨します

Reference Vector のバイナリデータを Base64 に変換すると、事前に圧縮を行わない場合はデータサイズが約 +33 % 増加します。

BitPack 圧縮を適用すると、数値データをバイナリ化する前に解析し、型サイズを最小化したり差分符号化を行うことで、4 バイトの数値を 12 バイトに縮小できる場合があります。これにより、データセットによっては 50 % 以上の圧縮率が得られます。

圧縮後に Base64 へ変換すると、圧縮サイズに対して約 +33% の増加が発生します。結果として、元の非圧縮バイナリと比較すると、最終的な Base64 文字列は 全体で 40〜60 % 程度小さくなり、効率的にデコード可能です。

Base64 のデコードに要する時間は文字列長に比例し、データ内容にはほとんど依存しません。したがって、圧縮率がデータセットによって変動しても、Base64 文字列を短縮することは常にデコードの高速化に寄与します。