AYU MAX

プログラミングとか作ったもの

ObjectDelivererの共有メモリサンプル

共有メモリのサンプル

以前からGitHubにObjectDelivererのサンプルを用意していたのですが、共有メモリについては読み込み側しか実装しておらず処理が完結していなかったので新規で書き込み側も実装しました。

ここではサンプルの内容を簡単に紹介します。

概要

このサンプルではSceneCapture2Dで撮った画像をTexurueRenderTargetから取り出し、そこから共有メモリを経由して別のマテリアルに表示します。

203fc2438cc4488ddf9567ad67496f63

  1. まずはSharedMemoryレベルを開いてください。 sharedmemory1

  2. 全実装はBox Actorブループリント内にあります。

読み込み側の実装

  1. 共有メモリから読み込んだピクセルバッファを入れるテクスチャとマテリアルを用意します。 sharedmemory2

  2. 共有メモリの読み込み用ObjectDelivererのインスタンスを生成し処理を開始します。 sharedmemory3

共有メモリのバッファサイズは画像バッファサイズ(800x450x4 byte)を設定しています。

  1. ReceiveDataイベント(共有メモリの中身に変化があった時におこるイベント)でテクスチャの中身を更新します。 sharedmemory4

書き込み側の実装

  1. TextureRenderTargetから取得したピクセルバッファを入れておくバッファを用意します。
  2. 共有メモリへの書き込み用ObjectDelivererのインスタンスを生成し処理を開始します。 sharedmemory3

共有メモリのバッファサイズは画像バッファサイズ(800x450x4 byte)を設定しています。

sharedmemory4

  1. Tickイベント時にTextureRenderTargetからピクセルバッファを取り出し共有メモリに書き込みます。 sharedmemory4

使い道

この例では1つのプロセス内で完結しているためあまり意味はないですが、 例えばUE4のプロジェクトを2つ用意して、片方は共有メモリへの書き込みを担当し、もう片方は共有メモリからの読み込みを担当することで映像の受け渡しができます。

共有メモリはTCP/IPやUDPと違ってネットワーク経由でのデータの受け渡しはできませんが、その分大容量のデータを高速に渡せるため映像などの重いデータのプロセス間通信に適していると思います。

ご興味ある方はぜひ試してみてください。