【UE5】Fast VRAM 調べてみた

Unreal Engine

水ノ茉の宣伝

準備中...
ゲームを作る予定なの
水ノ茉こおり

作業環境

  • Windows 10
  • Visual Studio 2022
  • Visual Studio Code
  • Unreal Engine 5.3

始まり

これは2Dテクスチャを作成する関数 FRDGTextureDesc::Create2D です。

static FRDGTextureDesc Create2D
(
    FIntPoint Size,
    EPixelFormat Format,
    FClearValueBinding ClearValue,
    ETextureCreateFlags Flags,
    uint8 NumMips,
    uint8 NumSamples,
    uint32 ExtData
)

第4引数に指定するFlagsをいくつか紹介します。

フラグ名説明
TexCreate_RenderTargetableレンダーターゲットにする場合に指定
TexCreate_ShaderResourceシェーダーリソースとして使用する場合に指定
TexCreate_UAVUnordered Access Viewとして使用する場合に指定
GFastVRamConfig.GBufferA???

今回の題材はフラグ名にもある Fast VRAM です。

GFastVRamConfig.GBufferA以外にも定義されています。

GFastVRamConfig.GBufferA以外のGFastVRamConfigを見る

VRAMが速いことはフラグ名から察せますが、速い理由が分かりません。

理由が気になりました。

公式のドキュメントを漁る

プラットフォームがFast VRAMをサポートしているか取得する関数が見つかりました。

Just a moment...

肝心のFast VRAMの正体についての記載は見当たりませんね。

SupportsFastVRAMMemory関数の実装を覗く

SupportsFastVRAMMemory関数の実装を覗いてみます。

static FORCEINLINE bool SupportsFastVRAMMemory()
{
    return false;
}

なんの手が掛かりもないわ💥

プラットフォーム側のSupportsFastVRAMMemory関数の実装を覗く

淡い期待を抱いてプラットフォーム側に実装があるか確認します。

XB1PlatformMemory.cpp

bool FXB1PlatformMemory::SupportsFastVRAMMemory()
{
    // scorpio doesn't use ESRAM
    return FPlatformMisc::GetConsoleType() < EXboxOneConsoleType::Scorpio;
}

XSXPlatformMemory.cpp

bool FXSXPlatformMemory::SupportsFastVRAMMemory()
{
    // no ESRAM
    return false;
}

見つけました。

マルチプラットフォーム(コンシューマー)開発の恩恵を初めて実感したかもしれません。

XB1(XBoxOne)は条件次第でFast VRAMをサポート、XSX(Xbox Series X)は標準と同様に偽ですね。

この差分が答えなのでしょう。

ちなみにswitch、PS4、PS5も検索対象に入れましたが検出されませんでした。

Fast VRAMの概念がないのかな。

ESRAMについて調べる

XB1, XSXのコメントにあった eSRAM という単語、気になります。

 Xbox Oneの場合、メインメモリは低コストなDDR3を使っているが、DDR3のメモリ帯域が足りない分は、eSRAMで補っている。そのため、原則的にはeSRAMを積極的に使えば使うほど、帯域ボトルネックが低減されてグラフィックス品質を向上させる余裕が生まれることになる。レンダーターゲット、テクスチャ、ジオメトリ、GPUコンピュートの全てのリソースとタスクでeSRAMは使うことができる。ただし、このeSRAMを使うことは、簡単には行かない。

【後藤弘茂のWeekly海外ニュース】 「Xbox One」を汎用からゲーム路線へと変化させたMicrosoftの背景
 MicrosoftがE3で行なったカンファレンスは怒濤の新作ゲームラッシュとなった。汎用性を強調した2013年前半までのXbox Oneのアピールとは全く異なる。一方、「SmartGlass」や「Kinect」など、この路線変更の影で存在...
Project ScorpioXbox OnePS4 Pro
Memory12GB GDDR58GB DDR3/32MB ESRAM8GB GDDR5
Memory Bandwidth326GB/sDDR3: 68GB/s, ESRAM at max 204GB/s (Xbox One S: 219GB/s)218GB/s
Inside the next Xbox: Project Scorpio tech revealed
Digital Foundry has the specs, has seen it running, and has talked to the people who built it.

XB1にはESRAMという爆速なVRAMが搭載されているのですね。

SRAMと同じなのかな。
ハードまわりはまだまだ知見が浅いですね。

欠点として低容量、だから常駐リソースでも部分的にしかフラグが指定されていなかったのか。

LumenやTSRの実装でFast VRAMが未指定なことに違和感を感じていましたが、Fast VRAMが使用可能なXB1は、LumenやTSRがスペック不足で非対応、それでフラグの指定を省いていたのですね。

というかPS5のメモリ帯域幅 Max448GB/s もあるんですね。ESRAMの2倍を超えるじゃん。
ハードウェアのことはさっぱり分かりませんが、技術の進歩ってすごいですね。

おわり!!!

Fast VRAMのモヤモヤは解消されましたが、生産終了した開発機向けの対応だったとは。。。

今後活用できるか分からない点は残念でしたが、知識欲は満たせたので満足です。

参考