fspace
ユーザー
最新のツクールMZ(v1.8.1)とそれ以前のいくつかのバージョンで、文字描画時に文字の一部がブロック(XY軸に平行な矩形)状に欠ける問題が発生しています。また、同一の問題かどうかは不明ですが、欠けるのではなく塗りつぶされたようになったり、ずれたように乱れるケースも存在するようです。
この問題で困ってる人をちょくちょく見かけるので、わかる範囲のことを書いときます。
まず、この不具合はプラグインを一切導入していない初期プロジェクトでも発生するため、プラグインが原因ではありません(もちろん類似の現象を引き起こす別の不具合だった場合にはその限りではありませんが……)。また、文字の一部のみが欠けることから、文字描画処理自体を実装していないコアスクリプトやPixiJSのようなライブラリ(プログラムの部品)が原因とも考えづらいです。そうなると、原因はこれらを動かしている、もっと基盤に近い技術にあることになります。
ツクールMZのゲーム部分にはWeb関連技術が用いられていますが、その際デスクトップアプリとしてWeb関連技術を動かすのにNW.jsというOSS(オープンソースソフトウェア。雑に理解するなら「自由に使える無料のソフトウェア」)を利用しています。また、NW.jsはその内部でChromiumというOSSを利用していて、Web関連技術の実装は基本的にすべてこの中に含まれています。ちなみに、Chromiumはその名前から推測できる通り、Google Chromeが内部で利用しているもので、Microsoft EdgeやOperaなど他のブラウザでも利用されています。
さて、件の文字描画処理ですが、これもWeb関連技術の一部なのでChromium内にその実装があると思われます(正確にはさらに内部のSkiaやANGLEなどかもしれませんがとりあえず置いときます)。最新のツクールMZ(v1.8.1)に含まれるNW.jsのバージョンは0.48.4で、それに含まれるChromiumのバージョンは85.0.4183.121ですが、実際にChromium 85前後でいくつか文字描画に関する問題が報告されているようです。2020年頃にリリースされたバージョンなので、もしこれらと同一の原因であったならChromiumをより新しいものに更新すれば、修正されていることが期待できそうです。
といっても、Chromiumを直接更新することはできません。そのため、NW.jsを新しいものへと更新することで、内部のChromiumを新しいものへと更新する必要があります。
本来はNW.jsについてもツクールMZを更新することで更新されていくはずだったのですが、ツクールはサポート切れの旧いOSに対応するためにNW.jsの更新を止めるというよくわからない判断をしたため、v1.6.1以降、NW.jsの新しい版が提供されなくなってしまいました(NW.jsが内部で利用しているNode.jsというOSSがサポートの切れたOSへの対応を打ち切ったことにより、更新するとそれらのOSで動作しなくなってしまうため。そもそもサポート切れのOSを使うこと自体がセキュリティリスクで推奨されないのでNode.jsの対応の方が普通です)。今後もNW.jsが更新されることはないと思われるため、NW.jsの更新は各自で行う必要があります。
NW.jsの更新方法については、すでにいくつか解説があるようなので省略します。というか、NW.jsが更新されないせいで最近のmacOSでゲームが正常に動作しないことがあるらしく、公式ブログにその対応のための記事があります。Mac用の解説ですが、ダウンロードファイルとインストールフォルダの場所や構造が少し異なるだけで、Windowsでもそれほど変わらないはずです。
更新にあたっては注意点がいくつか。
まず、公式ブログの記事にもありますが、更新は自己責任です。いちおう大部分の後方互換性はあるはずなので、基本的には更新しても問題なく動作するはずなのですが、複雑なソフトウェアなので想定通りにいかないこともしばしばです。別の問題を引き起こす可能性があるということを頭に入れた上で、何か問題が起きた時に元に戻せるようにしておきましょう。
次に、テスト環境で使用されるNW.jsとデプロイメント時の出力に含まれるNW.jsが同じものとは限りません(特に開発環境とは異なる実行環境向けに出力した場合)。自分の環境では問題が解消されたのに、ユーザーからは問題が報告されたという場合には、配布ゲーム中のNW.jsのバージョンがきちんと更新されているかどうかを確認しましょう。
また、ツクールMZを更新すると、更新したNW.jsのバージョンが元に戻ってしまう可能性があります。ツクールMZの更新後に問題が再発した場合には、NW.jsのバージョンが変化していないかどうかを確認しましょう。
最後に、前述の通りNW.jsを更新すると旧いOSでは動作しなくなるため、通常のツクールMZとは動作要件が変わります。ゲームの動作要件に「ツクールMZの動作する環境」とか書くと嘘つくことになるので注意しましょう。
実行中のNW.jsやらのバージョンを表示するプラグインを置いておくので、正しく更新されたかどうかの確認にご利用ください。
ついでに、どんな環境で問題が発生しているかのデータも集めたいので、実行環境のOS、CPU、GPUもわかる範囲で併記してもらえると助かります。
なお、プラグインはテスト環境でしか動作しないようにしているので、たとえ問題が解消されたとしてもゲームには組み込まないでください。
この問題で困ってる人をちょくちょく見かけるので、わかる範囲のことを書いときます。
TL;DR
- 正確な原因は不明
- NW.js内のChromiumの不具合の可能性がある
- NW.jsを更新しよう(ただし自己責任で)
問題の原因
初めに言っておくと、文字が正常に描画されない正確な原因はわかりません。というのも、おそらくこの問題の原因箇所はツクールやプラグインの開発者が直接確認するのが難しい基盤に近い部分にあるためです。まず、この不具合はプラグインを一切導入していない初期プロジェクトでも発生するため、プラグインが原因ではありません(もちろん類似の現象を引き起こす別の不具合だった場合にはその限りではありませんが……)。また、文字の一部のみが欠けることから、文字描画処理自体を実装していないコアスクリプトやPixiJSのようなライブラリ(プログラムの部品)が原因とも考えづらいです。そうなると、原因はこれらを動かしている、もっと基盤に近い技術にあることになります。
ツクールMZのゲーム部分にはWeb関連技術が用いられていますが、その際デスクトップアプリとしてWeb関連技術を動かすのにNW.jsというOSS(オープンソースソフトウェア。雑に理解するなら「自由に使える無料のソフトウェア」)を利用しています。また、NW.jsはその内部でChromiumというOSSを利用していて、Web関連技術の実装は基本的にすべてこの中に含まれています。ちなみに、Chromiumはその名前から推測できる通り、Google Chromeが内部で利用しているもので、Microsoft EdgeやOperaなど他のブラウザでも利用されています。
さて、件の文字描画処理ですが、これもWeb関連技術の一部なのでChromium内にその実装があると思われます(正確にはさらに内部のSkiaやANGLEなどかもしれませんがとりあえず置いときます)。最新のツクールMZ(v1.8.1)に含まれるNW.jsのバージョンは0.48.4で、それに含まれるChromiumのバージョンは85.0.4183.121ですが、実際にChromium 85前後でいくつか文字描画に関する問題が報告されているようです。2020年頃にリリースされたバージョンなので、もしこれらと同一の原因であったならChromiumをより新しいものに更新すれば、修正されていることが期待できそうです。
といっても、Chromiumを直接更新することはできません。そのため、NW.jsを新しいものへと更新することで、内部のChromiumを新しいものへと更新する必要があります。
本来はNW.jsについてもツクールMZを更新することで更新されていくはずだったのですが、ツクールはサポート切れの旧いOSに対応するためにNW.jsの更新を止めるというよくわからない判断をしたため、v1.6.1以降、NW.jsの新しい版が提供されなくなってしまいました(NW.jsが内部で利用しているNode.jsというOSSがサポートの切れたOSへの対応を打ち切ったことにより、更新するとそれらのOSで動作しなくなってしまうため。そもそもサポート切れのOSを使うこと自体がセキュリティリスクで推奨されないのでNode.jsの対応の方が普通です)。今後もNW.jsが更新されることはないと思われるため、NW.jsの更新は各自で行う必要があります。
対処方法
前述の通り正確な原因は不明なため確実な方法ではありませんが、現状最も期待できる対処方法はNW.jsの更新で、実際に改善の報告がいくつかあります。NW.jsの更新方法については、すでにいくつか解説があるようなので省略します。というか、NW.jsが更新されないせいで最近のmacOSでゲームが正常に動作しないことがあるらしく、公式ブログにその対応のための記事があります。Mac用の解説ですが、ダウンロードファイルとインストールフォルダの場所や構造が少し異なるだけで、Windowsでもそれほど変わらないはずです。
更新にあたっては注意点がいくつか。
まず、公式ブログの記事にもありますが、更新は自己責任です。いちおう大部分の後方互換性はあるはずなので、基本的には更新しても問題なく動作するはずなのですが、複雑なソフトウェアなので想定通りにいかないこともしばしばです。別の問題を引き起こす可能性があるということを頭に入れた上で、何か問題が起きた時に元に戻せるようにしておきましょう。
次に、テスト環境で使用されるNW.jsとデプロイメント時の出力に含まれるNW.jsが同じものとは限りません(特に開発環境とは異なる実行環境向けに出力した場合)。自分の環境では問題が解消されたのに、ユーザーからは問題が報告されたという場合には、配布ゲーム中のNW.jsのバージョンがきちんと更新されているかどうかを確認しましょう。
また、ツクールMZを更新すると、更新したNW.jsのバージョンが元に戻ってしまう可能性があります。ツクールMZの更新後に問題が再発した場合には、NW.jsのバージョンが変化していないかどうかを確認しましょう。
最後に、前述の通りNW.jsを更新すると旧いOSでは動作しなくなるため、通常のツクールMZとは動作要件が変わります。ゲームの動作要件に「ツクールMZの動作する環境」とか書くと嘘つくことになるので注意しましょう。
実行中のNW.jsやらのバージョンを表示するプラグインを置いておくので、正しく更新されたかどうかの確認にご利用ください。
その他の情報
- 環境依存で、Windows 11のラップトップPCでよく発生するとの噂。ミニPCでも発生しているので、IntelのiGPUによるGPUアクセラレーション周りの問題の可能性あり
- MPP_MessageEXを導入すると改善されるとの噂。実際に入れてみると確かに発生しなくなったように見えるものの、依然として発生するという報告もあり
- どうもすでに一度表示した(ラスタライズされた?)Canvasに再度描き込んだ場合に発生する様子
- MPP_MessageEXを導入すると、一度新しいCanvasに描き込んだのちに転写するという挙動になるため、そちらに起因している可能性あり
- Chromium 85前後でのフォントレンダリング周りの問題
検証への協力のお願い
個人的に少し気になることがあるので、自分の環境で問題が発生しているという方は、添付のプラグインを導入して問題が解消されるかどうかを報告してもらえると嬉しいです。ついでに、どんな環境で問題が発生しているかのデータも集めたいので、実行環境のOS、CPU、GPUもわかる範囲で併記してもらえると助かります。
なお、プラグインはテスト環境でしか動作しないようにしているので、たとえ問題が解消されたとしてもゲームには組み込まないでください。