「GTAオンライン」は、新しいコンテンツが着実に流入しているおかげで、発売から7年経った今でも人気のある(そして信じられないほど収益性の高い)ゲームであるが、ロックスターが改善できないと思われる点の1つは、ゲームの有名な長いロード時間である。先週末、t0st という進取的な開発者が、PlayStation 5 や PC などの高速プロセッサとストレージを搭載したマシンであっても、「GTA オンライン」のロードにこれほど時間がかかる理由をついに発見し、それらの問題を修正してロード時間を 70% 短縮しました。
問題と修正を説明する t0st によって書かれたブログは素晴らしく、優れた MSPaint のイラストが満載ですが、プログラミングの経験がない場合は理解するのが少し難しいです。できる限りまとめてみます!
つまり、ミッドレンジ PC で「GTA オンライン」を 6 分間ロードするのに苦労した後、t0st は次にゲームをロードするときにタスク マネージャーを開いて、何か奇妙なことに気づきました。1 分を経過すると、コンピューターの CPU 使用率が劇的に上昇しました。しかし、ストレージとネットワークの使用量はほとんどありませんでした。これは、長いロード時間の原因は、Rockstar のサーバーやドライブから読み取られるデータではなく、CPU 上で何かが実行されていたことを示唆しています。完了するまでに大量の処理が必要で、使用するスレッドは 1 つだけでした。
この知識をもとに、t0st は一連のプログラミング ツールとデバッグ ツールを使用して、2 つの大きな問題を発見しました。
まず、ゲームはゲーム内で購入可能なすべてのアイテムのテキスト ファイルを読み取り、63,000 個のアイテムを 1 つ取得するたびに、10 MB のテキスト ファイル内のすべての文字を新たにカウントします。このカウントを 1 回実行するのは大したことではありませんが、63,000 回実行すると、膨大な CPU 時間が無駄になります。
次に、読み込まれたすべてのアイテム データを準備するために、ゲームはそのアイテムに関連付けられたデータ (名前、価格、カテゴリ、統計など) とそのアイテムのハッシュ (本質的には一意に計算された「フィンガープリント」) の両方を記録します。それを識別します)。ゲームがリストからアイテムを保存するたびに (これは 63,000 回発生することを思い出してください)、保存されているアイテムのハッシュ値を、すでに保存されている他のすべてのアイテムのハッシュ値と比較してチェックします。
最初はそれほど時間はかかりませんが、ゲームに正常にロードされたアイテムの数が増えるにつれて、このチェックにかかる時間はどんどん長くなっていきます。 t0st は、合計で 1,9 億 8,453 万 1,500 回のチェック (約 20 億!) が実行され、これも大量の CPU 時間を消費すると推定しています。ゲームは最終的なリストに重複した項目がないことを確認するためにこれを行いますが、最初からリストが完全に空であり、読み込まれているファイルに重複がないことを考えると、このチェックは本質的には無意味です。
問題を解決するために、t0st はゲームの機能の一部を上書きする独自のコードを作成しました。 「項目の読み取り」問題を解決するために、彼は基本的なキャッシュを作成しました。これは、項目のリストの長さを一度計算し、ロックスターのコードで長さが要求されるたびに、実際に再計算することなく同じ値を返します。これにより、チェックが必要な回数が 63,000 回から 1 回に減り、大量の不要な作業が節約されます。
2 番目の修正はさらに簡単です。 t0st は重複項目をチェックする必要はないと考えていたため、彼のコードはハッシュ チェックをまったく実行せずに、新しい項目を直接挿入するだけです。これは、約 20 億のチェックをどれも実行する必要がなく、CPU がプロセスを高速で実行できることを意味します。
両方の修正が適用されると、「GTA オンライン」のロードが大幅に高速化されます。 t0st の PC では、重複アイテムのチェックを回避することでロード時間が 6 分から 4 分半に短縮され、アイテムのロード修正も追加するとさらに短縮され、わずか 1 分 50 秒になります。これはロード時間の 69.4% の短縮であり、2 つの関数の変更のみで済むことを考えると、これはまったく信じられないほどです。
それで、今何が起こっているのでしょうか?
あなたが適切なツールを持っている経験豊富なゲーム プログラマであれば、ここからソース コードをダウンロードして自分で修正を試すことができます。このようにゲームの実行中にゲーム機能を変更することは古典的なハッキング行為であるため、永久禁止にならないように注意してください。
他の皆さんにとって、最善の策は、Rockstar が将来の GTA パッチで修正を実装することを期待することです。修正が比較的簡単であることと時間の節約の大きさを考えると、特に古い AMD プロセッサを搭載したコンソールや PC のプレイヤーにとっては、少なくとも調査する価値があるはずです。 t0st 自身が次のように述べています。
「これが何らかの形で Rockstar に届いたら、問題は 1 人の開発者が解決するのに 1 日もかからないはずです。何とかしてください :<
「重複排除のためにハッシュマップに切り替えるか、より高速な修正として起動時にハッシュマップを完全にスキップすることができます。JSON パーサーの場合は、ライブラリをよりパフォーマンスの高いものに交換するだけです。これ以上簡単な方法はないと思います。 。
ty <3″
2月28日に公開されて以来、この記事が注目を集めていることを考えると、GTAオンラインの長い歴史の中でロード時間がどれほどバグベアだったかを考えると、ロックスターには少なくとも返答を示してほしいと思うだろう。ロックスターがこの問題について公に発言する場合は、この記事を更新します。
「 Digital Foundry が、賢いプログラマーが「GTA オンライン」のロード時間を 70% 短縮した方法を説明」に関するベスト動画選定!
【GTA5】 クリエイターを使用してセッションの天候を変更する方法の紹介 #GTA5 #グラセフ
【GTA5】グーチイベントに必ず遭遇する方法!~まだ遭遇してない人は必見です~