ゲーム画面が突然停止する現象について

seea

ユーザー
こんばんは。
早速ですがゲーム画面が突然停止する現象が見つかり、原因調査、対策を考えています。
現象の再現テストや、情報提供にご協力いただけないでしょうか。

条件が揃うと再現率は100%です。再現環境を用意しました。

【ゲーム画面停止】再現環境
■前準備(注意事項)
・環境によっては一時的に画面が停止(ビデオカードの動作が停止)する可能性があります。
 何か作業中の場合は、必ず保存を済ませてからお試しください。
 通常、停止は一瞬のみで自動的に復旧するはずですが、念のためです。

・(制作環境を可能な限り維持したため)BGM再生があります。
 ブラウザの設定によっては音が出るのでご注意ください。
 ただし、Chromeブラウザはデフォルトでミュート(音が出ない)になると思います。
 ミュートのままでも検証できます。

■バージョン
【ツクール】RPGツクールMV バージョン 1.6.2
 +コミュニティ版コアスクリプト community-1.3b
【ブラウザ】Google Chrome バージョン: 87.0.4280.88(Official Build) (64 ビット)

■操作手順
1.Windows 10 の ChromeブラウザでURLを開いてください。
URL: https://nekono.org/games/loseContextTest/www/?test
(URLは予告なく削除する場合があります)

2.Now Loading... 表示中はそのままお待ちください。

3.ゲーム画面が開いても、何もせずそのままお待ちください。
  (キー操作、マウス操作は不要です)

4.ゲーム画面内の右上に表示される時刻が 16:10 を過ぎた頃に、ゲーム画面が停止すると思います。
  ※再現しない場合は教えてください。
  ※停止すると、一瞬だけ画面が固まった後、画面が真っ黒になります。以降ずっとそのままです。

5.確認後、ブラウザは閉じてください。

■発生する現象
ブラウザのコンソール(ログ出力内容)を確認すると、
WebGL: CONTEXT_LOST_WEBGL: loseContext: context lost
が記録されていると思います。

■分かっていること
プラグイン側で new PIXI.Graphics() を使用し、その画像をマスク(mask)として使用すると
短時間で発生することが分かっています。キャラクターの影の描写に使用しています。
キャラは一体なので、数の問題ではないようです。

ツクール内のテストプレイでも再現します。
しかし、不思議なことにFirefoxブラウザ上では再現しません。

■何を表現しようとしているか
地上に描画されるキャラクターの影は、午後になると時間経過とともに長くなります。
しかし、影は建物などに遮られた場合は、建物までの長さに切り抜いて描画する必要があります。
(影のレイヤーの重なり順を工夫したとしても、1マスの構造物を超える長さの影への対策が必要です)
この目的のためにマスク(mask)を使用しています。
この部分をコメントアウトして外すと、現象は再現しなくなります。

■質問したいこと
・現象は再現しましたでしょうか?

・ゲーム画面が停止する原因は何でしょうか?
 丸投げという凄まじい質問の仕方ですが、できることなら答えを知りたいと思っています。
 (もちろん私も調査中です!)

・開発の過程で、
 WebGL: CONTEXT_LOST_WEBGL: loseContext: context lost が発生し、対策を行った経緯などはありますでしょうか?

・コミュニティ版コアスクリプト開発時やプラグイン開発時のノウハウで、
 new PIXI.Graphics() の使用や、マスク(mask)画像の適用は極力少なくする(or 使ってはいけない)
 といったものはありますでしょうか?
 例外対策としてノウハウが何か共有されていたら知りたいです。

■検討済みの対策案
・MVのPIXIを最新版(v5)に差し替える作戦もあることは存じていますが、ひとまず今回それは無しでお願いします。
 ……どうしても困ったらそれに手を出すかもしれません。
・MZに移行する方法もあることも理解しています(PIXIのバージョンアップで改善する可能性もあります)が、それは無しでお願いします。
 再現環境を作るのが難しいのよさ。

何卒よろしくお願いいたします。
 

げれげれ

ユーザー
不思議ですね、二度試しましたが再現しませんでした。

ブラウザ:Google Chrome バージョン: 87.0.4280.88(Official Build) (64 ビット)
OS:Windows10 Pro
CPU:Core i5-7200U
メモリ:8GB

【確認内容】
・16:30まで一切操作せずに放置。
・特に何も変化がなかったのでマウスやキーボードでの操作を行うが、それも異常なし。
・これを書きながら17:20くらいまで放置したがやはり異常なし。影は針のように細長くなってる。

参考になるかどうかわかりませんが、
・タスク状況を見てもメモリは65%程度、CPUは10%前後で安定していました。
・コンソールにも「DevTools failed to load SourceMap」の警告くらいでエラーはありませんでした。

私の環境では問題ないようです。
 

sally_elly

ユーザー
テストしましたが、再現しませんでした。

ブラウザ:バージョン: 87.0.4280.88(Official Build) (64 ビット)
OS:Windows10 Home
CPU:AMD Ryzen 7 2700x
メモリ:16GB

【確認内容】
1:無操作状態で16:30まで放置の後、マウス操作を繰り返す
2:16:30までマウス操作で歩き回る
3:17:00頃まで放置

いずれも動作は正常、メモリやCPU使用量にも異常負荷はありませんでした。
 

seea

ユーザー
こんばんは。確認ありがとうございます!
再現しないとは驚きです。何故でしょうか……。

私の環境だけで起こるごく稀な出来事なら、見なかったことにする……は難しいかな。
問題なく動く環境が確認されているとはいえ、きっと誰かの環境では止まってしまうので。

原因が分からないんですよね。
私も含め、おそらくほとんどの人にとって
「WebGL: CONTEXT_LOST_WEBGL: loseContext: context lost」というログを見るのは初めてでしょうし
謎が深まりました……。
 
試してみましたが、再現できず。。。

ブラウザ:バージョン: 87.0.4280.88(Official Build) (64 ビット)
OS:Windows10 Home
CPU:Core i5-1035G4
メモリ:8GB

推測ですがエラーの内容的にGPUへの高負荷が原因で落ちてるような気がするので、
マスクをかける頻度を減らしたりマスクサイズを小さくしたりすれば
エラーを回避できるかもしれません。
 

seea

ユーザー
確認ありがとうございます!
再現しなかったのですね。
私の環境ですと相変わらず再現しております。不思議です。

ビデオカードドライバの更新版が出ていましたので、最新版に更新しました。
更新後に試すと、同じ現象が再現します。ドライバの更新は関係なかったようです。

推測ですがエラーの内容的にGPUへの高負荷が原因で落ちてるような気がするので、
マスクをかける頻度を減らしたりマスクサイズを小さくしたりすれば
エラーを回避できるかもしれません。
困ったことに、キャラクターにマスクをかける回数は1回なんですよ。画面内のキャラクターは1体なので計1回なのです。
そして、マスクサイズは影の部分だけなので、より小さくすることは難しくなります。

また、大型のキャラクター(縦に長いキャラクター)は、より大きな影の描写になるため、再現環境の影よりも大きなマスクサイズが
予想されます。

もちろん、PIXI内部では画面を常に再描画し続けていると思われるので、描画ごとにmaskの処理が行われていると
考えると、マスクをかける頻度は極めて高いともいえます。これを減らすことはmask処理を外すに等しいので……
mask処理を外せないか試みています。

思うに、一つのゲーム画面で new PIXI.Graphics() の多数の使用はPIXI的には禁じ手なのかもしれません。

2回はMV本体コアスクリプトが画面表示のために使うので(ScreenSprite と WindowLayer)
3回目以降に、一部のブラウザ環境では、まずいことが起きているような気がします。
何度も使ったことで、何かの上限を超えたのかもしれません。
何かとは何? ということなんですが、そこは謎です。

別の角度から考えてみると、
私がこれまで見てきた大多数のMV用プラグインに、new PIXI.Graphics() を使うコードが見られないのは
コードの書き方の特徴として着目しています。
単にそれを使う必要のないケースが多いとは思いますが、
new PIXI.Graphics() はプラグイン側に書いてはいけない(せめてSpriteを使え)
といったノウハウやセオリーが存在している可能性もあります。
ここも分からないところです。
 
こんばんは。
4.ゲーム画面内の右上に表示される時刻が 16:10 を過ぎた頃に、ゲーム画面が停止すると思います。
  ※再現しない場合は教えてください。
  ※停止すると、一瞬だけ画面が固まった後、画面が真っ黒になります。以降ずっとそのままです。

5.確認後、ブラウザは閉じてください。
ディスプレイの動作が停止するのではなく、ブラウザの画面だけが真っ暗になるという場合には、
ブラウザ側の問題であるという可能性も考えられます。
下記サイトの手順は参考になりますでしょうか。
内容としては、
1.拡張機能の停止
2.ブラウザの再インストール
3.ハードウェアクセレーションの停止
を順に行い、3の時点で解決に至っているという話です。

ちなみに自分の環境でも再現はしませんでした。

ご参考まで。
 

seea

ユーザー
こんばんは!

こんばんは。

ディスプレイの動作が停止するのではなく、ブラウザの画面だけが真っ暗になるという場合には、
ブラウザ側の問題であるという可能性も考えられます。
下記サイトの手順は参考になりますでしょうか。
内容としては、
1.拡張機能の停止
2.ブラウザの再インストール
3.ハードウェアクセレーションの停止
を順に行い、3の時点で解決に至っているという話です。

ちなみに自分の環境でも再現はしませんでした。

ご参考まで。

確認ありがとうございます!

再現する環境が極めて珍しいという可能性も出てきました。
まだ数が全然少ないので何ともいえず、本当に調べるなら4000サンプルくらい欲しいですが(無理)……。
1/4000なら見なかったことにして無視してもいいかもしれません……!

実は、ツクール内のテストプレイ でも再現します。
テストプレイはツクールMV本体側(の nwjs と思われる)で動くので、
インストールされているChromeブラウザと直接は関係がないと思うのです。
(Chrome相当のモジュールのバージョンは既に異なります)
再インストールを試みるとしたらChromeブラウザではなく、OSそのものということになります。

ですので気軽に試してみる、というのがすぐにはできないんですが
解決しなさそうなら最終手段としてやってみたいと思います。
 

seea

ユーザー
色々と調べました。
問題が起きていることは分かりましたが、解決しているところは見つかりませんでした。

RPG Maker MV でも同じ現象が発生している模様。(未解決)

特定の環境でしか起きないので他の人が再現することができず、そして状況も何だかよく分からないので放置されて
解決不能に陥っている様子です。

上記のトピック内の発言によると、MVで発生したこの現象はMZでは再現しないとのことなので、
その動作の違いはPIXIのバージョンの違いによるものかな。
MZはより新しいPIXIを搭載しているため、起きなくなったという可能性も。
テストプレイとデプロイメント後のプレイは同一のPIXIを使うので説明は付きます。

だとするとPIXIのバージョンアップが有力かもしれません。
MVのPIXIのバージョンアップを伴うような大型のバージョンアップってもう無いですよね……。
 
トップ