ぼっちプログラマのメモ

UE4とかUE5とかについて書いたり書かなかったり。

【UE4・UE5】SteamDeck上でUnrealEngineで作ったパッケージ(実行ファイル)を動かしてみた!

この記事は Unreal Engine (UE)のカレンダー | Advent Calendar 2022 - Qiita 11日目の代理投稿記事です。

はじめに

Steamを運営しているValue社による新しい携帯型ゲーム機「Steam Deck」が届きました!
わーい!

SteamDeckとはなんぞや?という方向け

www.steamdeck.com
www.famitsu.com

SteamDeckではSteam上で販売されているゲームだけでなく、その他のストアなどで販売・配布されている様々なPCゲームを動かすことができます。そして、Unreal Engineで作成した自作コンテンツも動かすことができます!

しかも、SteamDeckに組み込まれているProtonという機能のお陰で、Windows向けに作ったものをそのままSteamDeckに送るだけで実行できてしまいます!
Steam Deck and Proton (Steamworks Documentation)

Steam DeckはかなりValue社的に力が入っているようで、Steamで販売されている各ゲームでSteamDeckでの動作をチェックして対応状況について表示したりしています。更に、今後のゲーム提出プロセスの一部としてもSteam Deckを使った検証テストが入るようです( Steam Machineのリベンジ感がすごい )。
参考:Steam Deck FAQ (Steamworks Documentation)

他にも色々ありますが…ひとまず今後Steamでの販売を検討したり、ゲーム系のイベント・展示会にて展示を予定している方にとっては重要なデバイスになっていきそうです!


ということで、第一歩としてUnreal Engineで作ったコンテンツをSteamDeckで動かすまでの流れをメモ代わりに書いていきます。

なお、以降についてはSteamアカウントの作成とSteam Deck自身の起動・アップデートは既に行っているという前提で進めます。(日本での発売日に届いた方、本体アップデートが来ているので設定からの更新をお忘れなく!)

また、本記事は日本での発売日である2022/11/17時点での情報であり、今後のアップデートで色々変わる部分もあるかと思います。参考程度にどうぞ。

そして、既にSteamページを持っていて実行ファイルの配布環境がある方はそこからDLする方が「単純に動かす分には楽」です。ただガリガリ開発している間は毎回Steamにアップするのは面倒ですし、今回説明する直接Steam Deckに送る方法の方がrsyncによる高速な同期が行われるのでサクッと実機確認ができて便利だと思います。

SteamDeckの開発環境のセットアップ

SteamOS Devkit Clientをインストール

まずはSteam Deckの開発環境をPC上で整える必要があります。と言っても簡単で、SteamからSteamOS Devkit ClientをDL・インストールするだけ!

SteamOS Devkit Clientのインストール用リンク:http://steam://install/943760
参考:How to load and run games on Steam Deck (Steamworks Documentation)

DLしたSteamOS Devkit Clientは以下の方法で起動できます。

  • Steamの「ライブラリ->ソフトウェア->SteamOS Devkit Client」から起動
  • XXX\steamapps\common\SteamOSDevkitClient\windows-client\devkit-gui.exe を直接起動

開発中はよく使うと思うので、タスクバーにピン留めしておくと便利そうです!


SteamDeckの開発者モードを有効に

設定メニューのシステムから「開発者モードを有効化」をONにします。これで設定に「開発者」カテゴリが追加されます。Androidみたいですね!


SteamDeckと開発環境を接続

DLしたSteamOS Devkit Clientを使って、SteamDeckと開発PCをネットワークでつなげます。まずはSteamOS Devkit Clientを起動して、Steam Devkit Management Toolを立ち上げます。

次に、Steam Deckを開発PCと同じネットワーク環境に接続します。IPアドレスを直接入力する形式でもSteamDeckとPCを接続できますが、同じネットワーク環境にあると自動的に認識してくれるので便利です!一般的な自宅開発環境ですと、Steam Deckを自宅Wifiに繋いだら良い感じになると思います。良い感じにならない方はネットワーク環境を色々調整するか、Steam DeckとPCを直接USB-Cで繋いだ方が楽かなと思います。

開発キット/Linuxシステムが検出され、一覧表示されるためには、開発ホストとのマルチキャストDNSが可能なローカルエリアネットワーク上にある必要があります。 これはWi-Fi、またはイーサネット(USB-Cハブ経由)で機能します。
https://partner.steamgames.com/doc/steamdeck/loadgames

ネットワーク環境を良い感じにした後は、Steam Deckからペアリングのリクエストを送って、

Steam Devkit Management Tool側でRegisterボタンを押して、

Steam Deck上に表示されるウィンドウの「確認」ボタンを押せば接続完了です。

接続がうまくいくと、下図のようにSteam Devkit Management Toolに接続中のSteam Deckの情報など諸々が表示されるようになります。上部のメニューにも幾つかボタンが追加されてます。

なお、一度ペアリング・接続を行っておくと次回以降は自動的に接続してくれます。何かボタンを押したりする必要もありません!めちゃ便利!

ひとまずこれで開発環境のセットアップは終了です。

Unreal Engineで作成したパッケージ(実行ファイル)を動かしてみる

初めに書いた通り、基本的にはWindows向けに作成したパッケージをSteam Deckにそのまま送るだけでOKです。ただエディタのデフォルト設定から変更を加えている方は少し注意が必要です。

Visual C++ランタイムのインストーラをパッケージに含める

プロジェクト設定のPackagingにあるInclude prerequisites installer」をOFFにしている場合、Steam Deck上での起動時に下記エラーが出てしまいます。

The following component(s) are required to run the program:
Microsoft Visual C++ Runtime

そのため、SteamDeckに転送する際は「Include prerequisites installer」を有効にすることをオススメします。

有効にしておくと、SteamDeckでの初回立ち上げ時にVisual C++ランタイムのインストール画面が出てきます。YesやOKボタンを押していくとインストールが完了します。

UE5.1.0の場合、Vulkanを有効にする

残念ながら、UE5.1.0の場合はデフォルト設定で作ったパッケージだとSteam Deckでの起動時に不具合でクラッシュします…。この不具合は、プロジェクト設定の Platform->Windows->Vulkan Targeted Shader Formats の SM5を有効にすることで回避可能です(この不具合は某E社にて既知で5.1.1で修正予定ではあるのですが…遅れる可能性もあるとのことです…。)。

なお、通常はDirect Xでのみで問題なくて、Steam Deck(Proton)側でDirectX->Vulkanの変換作業を行ってくれます。なのでSteam上のゲームが特別な対応を入れなくても動いてるんですね、すごい!

Vulkan API:最高のパフォーマンスとバッテリー寿命を実現するために、主要なグラフィックAPIとしてVulkanをターゲットにすることを推奨します。 UnityやUnrealなどのエンジンを使用する場合、すべてのユーザーのビルドでVulkanを有効にすると、最高のパフォーマンスと寿命が得られます。 (注:Protonには、DirectXからVulkanへの変換するレイヤーが含まれます。 ゲームやエンジンが高品質のDirectXをサポートしていてもVulkanをサポートしていない場合、Vulkanをカスタム実装するよりも、この自動変換レイヤーを使用する方が、パフォーマンスが高い場合があります。)
https://partner.steamgames.com/doc/steamdeck/recommendations

Windowsパッケージを作る

上述の設定をしていおけば、パッケージ作成に関しては通常通りで問題ありません。なお、UE5の場合は下図からパッケージ作成できます。UE4とは場所が異なっているので注意です。


Steam Deckへパッケージを送信

Steam Devkit Management Toolの「Title Update」ボタンを押すと、SteamDeckへの送信メニューが開きます。デフォルトだと下図のように空っぽになっています。

で、UE4・5製のパッケージの場合は下記のように設定します。

  • Name:SteamDeck上で表示されるタイトルです。自由に設定可能
  • Local Folder:作成したWindowsパッケージのパス、具体的には .exe が配置されたフォルダのパスを入れます。各自環境が異なると思うのでちゃんと入れること
  • Upload filtering:Exclude onlyの場合、SteamDeckに送らないファイルの拡張子を指定します。本当はもっと細かく設定した方が良いと思いますが、とりあえず明らかに不要だったり、ファイルサイズが大きいものを弾くために下記のように設定してます。
*.pdb *.log *.obj
  • Start Command:実行する .exe のファイル名を入れます。あと、起動オプションも指定することができます。例えば下記のように設定すると Vulkan設定で動作します。
XXX.exe -vulkan

- Steam Play:DirectXで動かす場合は必ず有効にしてください。無効のままだと起動しません。

その他にもデバッグ用の項目だったり色々ありますが、起動するだけなら上記の内容で十分(なはず)です。

一通り設定した後にUploadボタンを押すと、何やら色んな処理が走った後に…Steam Deckのライブラリにおける「非Steam」に送ったものが追加されています!あとは通常のゲームと同様に起動することができます!

ちなみに、設定した内容は「Save Config」ボタンから保存することができます。複数の設定を保存して切り替えることもできるので便利です!ちなみに、Configの名前は↑で設定した「Name」になるので分かりやすい名前にしておいた方が便利だと思います!

これで自分で使ったUE4・UE5コンテンツをSteamDeckで動かすことができました!結構感動すると思うので、SteamDeckを持ってる方は是非試してみてください!

おまけ:その他の調査メモ

ここまで「SteamDeck上でUnrealEngineで作ったパッケージ(実行ファイル)を動かしてみた!」の話は終わりなのですが、せっかくなので試行錯誤中に見つけたことや思ったことをメモ書き。

UE5公式ドキュメントのSteamDeckに関するページについて

実はUE5.0の時点でSteam Deckに関するページが公式ドキュメントに追加されています。
Unreal Engine の Steam Deck | Unreal Engine 5.1 ドキュメント
nreal Engine の Steam Deck クイック スタート | Unreal Engine 5.1 ドキュメント

ここでは初期セットアップとエディタからのLaunchについて紹介されているのですが…手順通りにしても手元の環境ではLaunchがまだうまくいっていません…。
まずUE5.0の場合は

[SteamDeck]
+SteamDeckDevice=(IpAddr=192.168.0.10,Name=MySteamDeck,UserName=deck)

ではなく、

[/Script/WindowsTargetPlatform.WindowsTargetSettings]
+SteamDeckDevice=(IpAddr=192.168.0.10,Name=MySteamDeck,UserName=deck)

にしないと認識しません。そして、Launchボタンを押してもSteam DeckではなくPC上で実行されます…。そして、5.1ではドキュメントどおりに認識されるのですが、同じくPC上で実行されてしまいます…

で、SteamDeck対応に関するエンジンコードを覗いてみたんですが、どうやら5.0ではSteamDeck対応は

Engine/Source/Developer/Windows/WindowsTargetPlatform/Private/SteamDeckDevice.h

にあったんですが、5.1で

/Engine/Source/Developer/DesktopPlatform/Public/SteamDeck/SteamDeckDevice.h

に移動したみたいです。あといろいろ修正も入ってるみたいです。

この辺りは根が深そうなので…来年にまたリベンジしたいなぁと思います。

SteamDeck動作時のソフトウェアキーボードについて

これはUnreal Engine特有の操作ではないのですが、Steamボタン + Xボタンを同時押しするとソフトウェアキーボードが立ち上がります。そして、ここからキーボード操作ができるので、用意したデバッグコマンドや各種コンソールコマンドとかを実行することができます。

ただ自分が下手くそ過ぎるのか…同時押ししたはずなのにSteamのメニューが立ち上がったりで少し使い勝手が悪いです。Bluetoothキーボードを接続した方が使い勝手がいいかもしれません。

Steam Deck上でUnreal Engineエディタを動かす方法

SteamDeckはLinuxを使ったデスクトップモードがありますが、これをWindowsに差し替えることができるようです。なので、Unreal Engineをインストールできるらしいです。

あと、Epic Asset Manager というアプリを使うことでLinuxに対してUnreal Engineをインストールできるらしいです。
github.com

僕はまだ怖くてやってないので、人柱したい方はぜひどうぞ!

Steam Devkit Management Toolのソースコードについて

Steam Devkit Management Toolのコードはオープンソースで公開されているらしく、下記URLから見ることができました。
gitlab.steamos.cloud

ツールのUIから察しの通り、imgui(pyimgui)で組まれていました。下記コードあたりでTitle Upload関連の処理が組まれてるっぽいので、ここを良い感じにしてSteam Devkit Management Toolの機能を直接呼び出して自動的にSteam Deckに転送する仕組みとか作れないかなぁ?とか思いました。

class UpdateTitle(ToolWindow):
    BUTTON_NAME = 'Title Upload'

def do_upload(self):
[https://gitlab.steamos.cloud/devkit/steamos-devkit/-/blob/main/client/devkit_client/gui2/gui2.py:title]

思っただけでやってないです!誰かよろしく!

Steam Deck実機でのデバッグについて

Steam Deckの公式ドキュメントにて詳しく方法が載ってるので是非
partner.steamgames.com

使った保護フィルムについて

Amazonで「Steam Deck 保護 ガラスフィルム」で出てきた奴を買いました(↓は特にアフィとかつけてないです)

手先が不器用な自分でも気泡0で貼れて良かったです(久々にお風呂で全裸ファイルでフィルム貼りしました)。画面表示は特に違和感ないですし、タッチスクリーンの感度も落ちてなさそうです。あとは画面が割れないことを祈るのみ…落とさないように注意しよう…

動かしてみての所感

TLで見かけた他の開発者の方によるレビュー

↑の方も書いてる通り、6~10万円で3Dゲームが快適に動く環境が手に入るのは素晴らしいなぁと思います!また、Windows版のパッケージがそのまま動かせるというのも開発者的にすごい魅力を感じました!(と言いつつ、Protonによる変換がクリティカルな悪影響を及ばさないかが心配ですが…修正とかどうすればいいんだろ…Vulkanにするしかないのか…?)

===== 間違ってる可能性あるので、便所の落書きていどに =====
軽く動かして少し気になったのは、ゲーム中にエフェクトを「初めて」出した際のカクつきです。詳しくは見れてないのですが…Vulkanということでシェーダコンパイル負荷かも?初回実行時にみですし。ですので、SteamDeckも想定して作る際は事前に裏でエフェクトを再生してシェーダキャッシュを作っておくという戦略が必要になるかも…?(まあ、通常のWindows向け開発でも有効な場合がありますが)

あとはPC版Steamのここの設定も少し気になったり。Steam Deckには反映されるのかしら?

===== 便所の落書きおわり =====

他にも電池の持ちが少し不安だったり、まだ届いてない公式Dockとの相性も気になる所ですが「7,8万円だして買って良かった!今度展示する機会があったら使ってみよう!」とポジティブに考えられる程度には良いデバイスだと思います!

みんな Steam Deckを買おうぜ!
おしまい!