Table of Contents

ストリーミング

初級 アーティスト プログラマー

テクスチャーをストリーム化すると、Stride は必要なときだけテクスチャーをロードするようになります。これにより、ゲームやシーンの読込みにかかる時間が大幅に短縮され、メモリの使用量も少なくなり、ゲームのスケールアップが簡単になります。

Note

今のところ、テクスチャーでのみストリーム化が可能です。

Stride でのテクスチャーのストリーミング方法

シーンを読み込む際にテクスチャーを(そのすべてのミップマップと一緒に)読み込む代わりに、Stride はテクスチャーが使用されたとき(例えばそのテクスチャーを使用するモデルが画面上にあるとき)にのみテクスチャーを読込みます。

テクスチャーが不要になる(つまりそのテクスチャーを使用するオブジェクトが画面上にない)と、Stride はそのテクスチャーを解放します。

今のところ、テクスチャーの読み込みに優先順位はありません。例えば、Stride は距離に応じてテクスチャーを読み込んだりすることはなく、すべてのテクスチャーを順番に読み込みます。

ミップマップでストリーミングを使う

テクスチャーのプロパティでミップマップ(距離に応じて表示される異なる解像度のテクスチャー)が有効になっていると、解像度の低いミップマップの方がサイズが小さいため、先に読み込まれます。下の図は、このプロセスが行われている様子をスローモーションで示しています。

Texture loading

ほとんどの場合、このプロセスは非常に迅速に行われます。ストリーミングでは、ミップマップを有効にすることをお勧めします。ミップマップを有効にすると、高品質バージョンが読み込まれるまでの間、低解像度バージョンのテクスチャーがプレースホルダーとして機能するため、ポップインを減らすことができます。

ストリーミングを使わないほうがいい場合

ストリーミングは、既定ではすべてのテクスチャーに対して有効です。しかし、以下のように、常にすぐ高品質で表示させたい重要なテクスチャーについては、ストリーミングを無効にするとよいでしょう。

  • スプラッシュ画面

  • プレイヤーのモデルのテクスチャー

  • パーティクルで使用されるテクスチャー(パーティクルの寿命は短いことが多いので、テクスチャーが読み込まれる前に消えてしまうことがあります)

テクスチャーのストリーミングの有効化または無効化

  1. アセットビューで、テクスチャーを選択します。

    Select normal map texture

  2. プロパティグリッドで、[Format] の下の [Stream] をオンにします。

    Enable streaming

グローバル ストリーミング設定

グローバルストリーミング設定には、ゲーム設定アセットからアクセスできます。これらの設定は、ストリーミングを有効にしているすべてのテクスチャーに適用されます。

グローバルストリーミング設定へのアクセス方法については、ゲームの設定を参照してください。

プロパティ

Streaming settings

プロパティ 説明
Streaming オンにすると、ストリーミングが有効になります。
Update interval Stride がストリーミングを更新する頻度。間隔が小さいほどストリーミングシステムの反応は速くなりますが、より多くの CPU を使用し、メモリの変動も大きくなります。
Max resources per update ストリーミングの更新ごとにロードまたはアンロードされるテクスチャーの最大数です。数値が大きいほどポップインは減少しますが、フレームレートが低下する可能性があります。
Resource timeout (ms) リソースが使われなくなった後、どのくらいの時間ロードされ続けるか(Memory budget プロパティの値を超えた場合に)
Memory budget (in MB) ストリーミングで使用するメモリがこの値を超えると、Stride は未使用のテクスチャーを解放します。この値を増やすと、メモリに余裕があるときにはより多くのテクスチャーを読み込んでおくことができ、その逆も可能です。

コードからストリーミングマネージャーにアクセスする

Stride.Streaming を使用します。

例えば、グローバルにストリーミングを無効にする方法は次の通りです。

Streaming.EnableStreaming = false;

テクスチャーのストリーミングを開始する方法は次の通りです。

Streaming.StreamResources(myTexture);

読み込んだ後にストリーミングを無効にする方法は次の通りです。

var texture = Content.Load<Texture>("myTexture", ContentManagerLoaderSettings.StreamingDisabled);

オプション

3 つの StreamingOptions があります。

  • KeepLoaded オプションは、メモリバジェットを超えても、テクスチャーをメモリに維持します。

  • ミップマップが有効な場合、ForceHighestQuality オプションはテクスチャーの最高品質のバージョンのみを読込みます。

  • KeepLoaded オプションは、テクスチャーが使用されていないときでも、メモリ内にテクスチャーを維持します。

例:

var myOptions = new StreamingOptions() { KeepLoaded = true };
Streaming.StreamResources(myTexture, myOptions);

実行時に StreamingOptions を変更するには、SetResourceStreamingOptions を使います。例えば、次のようになります。

var myNewOptions = new StreamingOptions() { KeepLoaded = false };
Streaming.SetResourceStreamingOptions(myTexture, myNewOptions);

関連項目