ゲームの「読み込み」シーンの背後にあるロジックは何ですか?


8

私は最初のゲームを作成しています。これはタワーディフェンスタイプのゲームであり、Unityゲームエンジンを使用し、Fieldrunnersを参考にしています。ゲームの「読み込み」シーンの背後にある機能について詳しく知りたいのですが。

これまでは、実行時にオブジェクトをインスタンス化/作成しており、遅延や同様の問題に直面していません。では、他のゲームの「読み込み」シーンは何に使用されているのでしょうか?次のラウンドまたはステージのための特定のオブジェクトの機能またはインスタンス化はありますか?はいの場合、遅延が発生しないのになぜ必要なのですか?


6
他のゲームが必要とするリソースは、自分のゲームのニーズよりもはるかに高い場合があります。したがって、これらのリソースがロードされる期間をマスクするために、(おそらく低速のHDDから)シーンをロードする必要があります。
減速

2
「すべてのゲーム」とは何ですか?ロード画面がまったくないゲームがたくさんあります。
Nicol Bolas、2012年

回答:


10

基本的に、「読み込み」プロセス中に、ゲームは実行時に実行できないすべての操作を読み込み、事前計算しようとすると思います。たとえば、ハードドライブのイメージ(テクスチャとして使用される)の取得は、通常、処理が遅くなります。「ロード」ステップでは、これらの画像をRAMメモリにコピーできます。RAMメモリはアクセスストレージが非常に高速で、実行時に画像にリアルタイムでアクセスできます。


1

ロード画面を「カットシーン」(http://en.wikipedia.org/wiki/Cutscene)として使用して、ユーザーに息を呑む機会を与えたり、ゲームのストーリーや機能について詳しく知ることができます。有料版/アプリ内購入を販売しようとする


1

現代のゲームでは、ロード画面を破棄できるはずだったと思います。

画面がまだ読み込まれている本当の理由は、ほとんどのゲームがXbox 360ハードウェアで実行するように設計されているためだと思います。そのため、それらは、データをロードできるRAMの量と、実行できるスレッドの量が制限されます。十分なRAMがない場合は、メモリから多くのものを削除し、ディスクから再ロードする必要があります。また、一度にすべてをロードする方が簡単です。

また、ハードドライブなどの機能が停止する場合もあります。ユーザーがアンチウイルスをバックグラウンドで実行している場合はどうなりますか。ものをプリロードしない場合は、メッシュがロードされるか、自然に表示されるのを待つ間、ゲームを一時停止する必要がある場合があります。

Skyrimのようなゲームは、あなたが好きなだけ走ることができる広いオープンワールドを提供できますが、ドアを開いて比較的小さなダンジョンをロードするとすぐに、ロード画面で行き詰まります。

ダンジョンロード画面が必要であると見ることができる唯一の理由は、ロードするのにかなり大きい(1つの巨大なメッシュから作られるか、詳細なライトマップがある)か、計算を行う必要がある屋内シーンに使用される、かなり重いプリベークライティングを使用している場合です。実行時。Skyrimのダンジョンは、1つの巨大なメッシュではなく、モジュラーメッシュから構築されていると思います(少なくともOblivionはどこにあると思います)。

レベルに入るときに実際に見ることができるもの以外にロードする本当の理由はありません。ゲームがあなたが見ることができるものをレンダリングしないのと同じように、あなたは実際にロードする必要があるものをすぐにカリングすることができます。多くのダミーのプレースホルダーオブジェクトを挿入することもできます。次に、スレッドを使用して、プレーヤーが環境内を移動するときに、周囲の領域にあるオブジェクト、それらのメッシュ、テクスチャなどを非同期で読み込むことができます。

ロード画面を破棄する方法は次のとおりです。

  1. 基本的なゲームワールドプロパティを読み込みます。グローバルスクリプト。

  2. プレーヤーの位置を読み込みます。

  3. その位置のgridcell / BSPノードをロードします。

  4. そのセルのオブジェクトの境界ボックスだけをロードします。

  5. 実際にレンダリングされるものを計算します(境界ボックスのテスト、おそらくオクルージョンレンダリングテスト)

  6. レンダリングされたもののメッシュをロードします。

  7. メッシュのテクスチャにマテリアルをロードします。

  8. さらに多くのテストを実行して、より多くの領域が表示されており、ロードする必要があるかどうかを確認します(つまり、グリッドセル全体を巨大な立方体としてレンダリングします)。

  9. 表示されるものがすべて読み込まれたら、レンダリングを開始します。

  10. 残りのものをセルにロードし、必要に応じてさらにロードします。近くの地域を読み込み、プレーヤーの動きについて基本的な予測を行って、最初に読み込む必要のある地域を選択します。メモリがいっぱいになるまで続けます。

考慮に入れる必要がある他のいくつかの事柄があります。たとえば、表示されていないものでも、ロードする必要があるものがあります。たとえば、リージョンの外側のプレイヤーの後ろに立っている敵は、プレイヤーに向かって走って攻撃できるようにアクティブである必要があります。おそらく、近い場所に何かをロードしたいので、オクルージョンテストは重要ではありません。プレーヤーが移動して表示されるとすぐにそこにロードされますが、すぐにレンダリングに到達するために1秒間削ることができます(ただし、時間が近い場合は、表示されるもので問題が発生する可能性があります)。

可能であれば、これらのステップは必要になるに開始し、バックグラウンドでスレッド化する必要があります。たとえば、ゲームのメインメニューにいる場合は、[新しいゲーム]を選択した後(またはメニューが表示された直後)に開始領域のプリロードを開始し、最後の保存を続行する必要があります。その他の保存は、その上にマウスを移動するとプリロードできます。ダンジョンドアに近づくと、次のレベルのロードが開始されます(可能であれば、ロード画面をトリガーするだけなので、特別なダンジョンドアは必要ありません)。ビデオの再生中にバックグラウンドでロードします。そうすれば、短い初期ロード画面も必要ありません。

何かが「飛び出る」ことを気にしない場合は、その多くをスキップできます。Second Lifeのようなものは、何かが表示されたままになっています。インターネットから取得されているため、それについてできることはあまりありません。アサシンの信条は、何かがシーンに食い込むところに効果があるので、芸術的な理由でものを回避できるかもしれません。


2
残念ながら、それは多くのゲームでは現実的ではありません。単一の領域には、ミッドレンジGPUのビデオメモリにかろうじて適合する十分なテクスチャがある可能性があるため、開始領域と最後の保存領域の両方をプリロードすることはできません(ユーザーが選択する他の保存についてはどうでしょうか?)。Skyrimのように連続した世界をストリーミングする場合でも、プレーヤーを別のエリアにテレポートするだけのポータルやスクリプトはどうなりますか?8 GBの圧縮データ(その多くはテクスチャデータ)で、最新のハイエンドゲームPCでもすべてをプリロードすることはできません。
Sean Middleditch、2012年

1
さらに、ゲームには複数の領域をメモリにロードできないことに大きな関心があると私は主張します。それは彼らが彼らが与えられたそれぞれの領域にできるだけ多くのコンテンツを置くことを防ぎます。多くのゲームではこれは問題ではありませんが、可能な限り豊かな体験を提供したいオープンワールドのタイトルでは、制限にぶつからない状況は、あまり多くを提供していない状況ですあなたができるようにプレーヤー。
Steven Stadnicki

0

Unityでは、シーンは複数のゲームオブジェクトの組み合わせです。したがって、すべてのゲームオブジェクトを個別に指定して1つずつロードしたくない場合は、単純に完全なシーンをロードできます。

Unityでシーンをロードすると、既存のオブジェクトが破棄されるため、まったく新しいレベルがロードされます。DontDestroyOnLoadメソッドを使用して、保持するオブジェクトを指定できます。

ゲームを公開するときのビルド設定では、ゲームで使用されているシーンを示し、それらを現在のビルドに含めることもできます。これにより、異なるレベルを含むが同じコードロジックを含む複数のプラットフォームを区別できます。

Unity固有の質問は、Unity Answersフォーラムでも質問できます。これらのユーザーは、ゲームエンジンに関する全体的な質問ではなく、Unityに対してより特定されています。


この回答は、「レベルをどのようにロードするのですか?」ではなく、「プレーヤーに「ロード中...」が表示されるのはなぜですか?」という質問には対応していないようです。
Kevin Reid、2012年

@KevinReidああ、そうですね。クエスチョンマークをうまく捉えられなかったのでしょう。
Marnix、2012年

0

3Dグラフィックスシーンはセットアップに時間がかかり、それを維持するとコンピューターが限界を超える可能性があります。コンテンツには大量のメモリが必要です。目に見える内容は長い時間を必要とします。そして、観察者がズームアウトして地平線を見ると、全コンテンツのかなり多くが目に見えるようになります。(ズームアウトしすぎない方が効果的なゲームがあることに気づいたり、ズームアウトしたり、地平線を見たりできないゲームがあることに気付いたことがありますか?)

解決策は、コンテンツが制限された個々のシーンをセットアップすることです。これで、オブザーバーが別のシーンに移るまで、ゲームは正常に機能します。その時点で、古いシーンは破棄され、新しいシーンがセットアップされます。これには時間がかかります(ユーザーを退屈させないようにするためのロード画面)。通常、3Dエンジンは、セットアップ中に可能な限り多くの作業を行い、後でグラフィックを可能な限りスムーズにするようにします。

私は、全世界にわたって急速で自由な動きとズームを可能にするように見えるゲームを見てきました。おそらくそこには多くの天才と多くの骨の折れるプログラミングと芸術性があります。無料のグラフィックソフトウェアをダウンロードしただけではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.