この記事はAKIRAMさんによって寄稿された記事です。
オリジナル記事はこちら:https://note.com/akiram_vr/n/n695fca3ac4f8#cd5c1b95-6213-4bda-99b6-af7678f21cbc
留意事項
(2024/1/12追記)
公式Wikiがオープンしました。
ヘッドレスクライアントのページもございますので、基本的にはそちらを参照頂き、当記事はその補足としてお読みください。
https://wiki.resonite.com/Headless_Client
この記事の大部分はリリース直後の2023/10/7に執筆され、2024/1/10に最終更新が行われました。
今後のアップデートで変更になる可能性が大いにあります。
まずは最新の情報を探してください。
ヘッドレスサーバとは?
Resoniteが他の多くのVRSNSと異なる点として、通信方式にP2Pを採用している点があります。
Resoniteとは?→Steamページ
これは遅延の少なさなどのメリットがある代わりに、ユーザがResoniteクライアントを終了すると、そのユーザのセッションに居た他のユーザもセッションから蹴り出されてしまうというデメリットがあります。
このため、ユーザの代わりに別のPCから常時セッションを立て続ける手段をResoniteは持っており、これを「ヘッドレスサーバ(Headless server)」と呼んでいます。
3D表示などの負荷となる部分を削り、最小限の動作要件で動くため、少し古めのノートPCなどでも動作させることが可能です。
参考までに、著者がかつてヘッドレス用PCとして使用していたマシンとしては、i3 6100Tと24GB RAMの超省スぺ―スPCで、30人規模のイベントを8時間ほど落ちることなく維持させた実績があります。→桜逢祭2023 NeosVRフロア
前提条件
ヘッドレスサーバを立ち上げるにあたり、以下の条件があります。
ResoniteのPatreonを10$以上支援していること
ヘッドレス用Resoniteアカウント所有
ヘッドレス用Steamアカウント所有
ヘッドレス用のWindows PCを持っておりSteamでResoniteのインストールが済んでいること
※重要 ヘッドレス用のWindowsPCで一度Resoniteを起動していること。初回起動時に生成されるファイルが必要なため
Resonite、コマンドプロンプトの最低限必要な操作が分かること
Steamヘッドレスクライアントを取得
Resoniteを起動し、ダッシュメニュー>フレンドタブからユーザ「Resonite」へ以下のコマンドを入力
/headlesscode
するとコードが返ってくるのでメモる
ヘッドレス用マシンのSteamで、Resoniteのプロパティを開く
「ベータ」タブに移動し、「プライベートベータ」のテキストボックス内にコードを入力し、「コードを確認」を押す。
コードが通ると、「ベータの参加」のプルダウンメニュー内にヘッドレスサーバ用クライアントが追加されるので、選択する。
クライアントがダウンロードされ、Resoniteインストールフォルダ配下に「Headless」フォルダが作成される。
Configファイルを書く
C:\Program Files (x86)\Steam\steamapps\common\Resonite\Headless\Config
内にある「DefaultConfig.json」をコピーして、VSCodeなどのエディタで編集したのち「Config.json」として保存する
(C:\Program Files (x86)\Steam\steamapps\common\Resonite\Headless\Config\Config.json)にする
最低限いじる箇所
ヘッドレスアカウントログイン情報を以下で指定
“loginCredential”: <ヘッドレスユーザID>,
“loginPassword”: <ヘッドレスユーザパスワード>
そして
“loadWorldURL” : <ここに開きたいワールドのレコードURL>
あるいは
“loadWorldPresetName”: <新規作成ワールドのテンプレ3つのうちどれか>,
※レコードURLとはワールド詳細画面の「レコードURLをコピー」からコピーできる
例えばJPチュートリアルワールドResoniteだったら、
resrec:///G-Neos-East-Japan/R-95d04d7b-322f-47ea-a18e-0fc1f473d41e
がレコードURL。
Config例
「16人制限」でかつ「誰でも(Anyone)」入れる設定で、「JPチュートリアルワールドResonite」を起動、「1時間誰もセッションに居なければワールドをリセット」する。
{
"$schema": "https://raw.githubusercontent.com/Yellow-Dog-Man/JSONSchemas/main/schemas/HeadlessConfig.schema.json",
"universeId": null,
"tickRate": 60.0,
"maxConcurrentAssetTransfers": 80,
"usernameOverride": null,
"loginCredential": "akiRAM-Headless",
"loginPassword": "*****",
"startWorlds": [
{
"isEnabled": true,
"sessionName": null,
"customSessionId": null,
"description": null,
"maxUsers": 16,
"accessLevel": "Anyone",
"loadWorldURL": "resrec:///G-Neos-East-Japan/R-95d04d7b-322f-47ea-a18e-0fc1f473d41e",
"loadWorldPresetName": "Grid",
"idleRestartInterval": 3600,
"autoSleep": true
}
]
}
ちなみに普段の私のヘッドレスのコンフィグはだいたい以下のような感じ。
defaultUserRolesでakiRAMとMotoMaidへAdmin権限を付与している点と、ログイン後に自動でセッション参加する機能のためにcustomSessionIDでセッションIDを固定していることに注意。
{
"$schema":"https://raw.githubusercontent.com/Neos-Metaverse/JSONSchemas/main/schemas/NeosHeadlessConfig.schema.json",
"loginCredential": "akiRAM-Headless",
"loginPassword": "****",
"tickRate": 60.0,
"maxConcurrentAssetTransfers": 40,
"startWorlds": [
{
"sessionName": "居酒屋",
"accessLevel": "FriendsOfFriends",
"loadWorldURL": "resrec:///U-akiRAM/R-73557ade-75f1-4d51-8fbb-c7d722da62e6",
"customSessionId": "S-U-akiRAMHeadless:Tavern1",
"defaultUserRoles": {
"akiRAM": "Admin",
"MotoMaid": "Admin"
},
"awayKickMinutes": 5,
"idleRestartInterval": 64800,
"autoSleep": true
}
]
}
ヘッドレスの起動
C:\Program Files (x86)\Steam\steamapps\common\Resonite\Headless
内にある「resonite.exe」をコマンドプロンプトから叩く
起動したらこのようになる
コマンドリファレンスは公式Wikiを参照
Headless Client/Commandswiki.resonite.com
Configファイルの記法等はこちらのページ
Headless Client/Configuration Filewiki.resonite.com
小ネタ・Tips
Publishしていないワールドを立てる方法
Publishしていないワールドは通常自分しか開くことができないが、ワールドのメタデータから開けるアカウントを「誰でも」に設定することで、
ヘッドレスアカウントから開くことができる。(当然、別のユーザからも開けるので運用に注意。)
以下、メタデータの設定手順。
現在分かっている問題点
今時点で判明しているバグ、あるいはバグのような挙動を以下に紹介する。
Private状態でInviteするとヘッドレスクライアントが落ちる
(2024/1/7追記)
AccessLevelをPrivateに設定したのち、inviteコマンドを実行するとクライアントごと落ちる事がある。再現しない場合もある。 イベントの準備等で一旦Privateでセッションを立てて設営準備するなどの時に不便。
ワークアラウンドとしてConfigにセッション起動時の自動招待のコマンドAutoinviteUsernameを設定すると正常に招待が動くため、そちらを使う。