ダヌティスタントずRAM

画像






メモリの問題はずっず前ですか



わかった、いや。 䞀郚の商甚゚ンゞンはメモリでの動䜜が䞍十分であるだけでなく、倚くのプラットフォヌムにはかなり厳しいRAM芁件がありたす。 さらに、ディスクずカヌトリッゞのサむズにも制限が远加されたす。



レベル、テクスチャ、およびゲヌム党䜓を必芁な量に絞るほずんど違法な方法に぀いお、さたざたな幎ずプラットフォヌムからゲヌム業界から䟋を収集したした。 これらの方法はあたり矎しくないかもしれたせんが、開発者がゲヌムをリリヌスするこずを蚱可し、誰もただ䜕も掚枬しおいたせん。



プロのロヌド画面



私たちのゲヌム䞀人称シュヌティングゲヌムでは、Xboxにレベルを正しくアップロヌドするのに問題がありたした。 メモリの䞀郚を解攟できなかったため、レベルの完了ず次のゲヌムぞの移行埌、垞にクラッシュしたした。 Xboxのメモリは非垞に限られおおり、PCずは異なり、プログラムがメモリを䜿い果たした堎合に備えお、コン゜ヌルには远加の䜎速ストレヌゞがありたせんでした。 圌女はすぐに死にかけおいたした。



私たちのチヌムは、実際にこの問題に非垞に遅れお気づきたした。適切なレベルからゲヌムを実行する機䌚があったからです。 レベル゚ディタのこの​​機胜により、プログラマやデザむナヌは、メむンメニュヌや以前のミッションをスキップしお、䜜業䞭のレベルに盎接ゞャンプするこずができたした。 このような機䌚は開発プロセスにおいお䞍可欠であり、この機胜のないゲヌムを芋たこずはありたせんもちろん、ゲヌムのリリヌス前にカットされるこずがよくありたす。



そのため、䟿宜䞊、党員が゚ディタヌでゲヌムを開始し、目的のレベルにゞャンプしたした。 もちろん、これはメむンメニュヌの開発者には関係ありたせんでしたが、圌らはこのメニュヌのみを起動し、レベルをロヌドしたせんでした。 そのため、ほずんどのプロゞェクト開発者は、レベルをメモリからすぐにアンロヌドできないこずをすぐには知りたせんでした。



品質管理郚門がこの゚ラヌを発芋したずき、開発のこのような埌期段階ですべおの挏れを排陀するこずは非垞に困難であるこずが刀明したした。 最初のリヌクは簡単でしたが、レベルの開始前にメモリの小さな断片をすべお远跡しおクリアするこずが埐々に難しくなりたした。 私たちは倚くの仕事をしたした-連続しお4〜5レベルを実行できたしたが、遅かれ早かれコン゜ヌルがクラッシュしたした。 䞀床にキャンペヌンを完了するこずは䞍可胜でした。



開発チヌムはすべおを時間通りに修正できたせんでした。 圌らはあたりにも早くあきらめた可胜性がありたすが、私にはわかりたせん...しかし、圌らは開発者が利甚できる䟿利なXboxコン゜ヌルAPI機胜を利甚したした。 その埌およびXbox 360でも、コン゜ヌルに再起動を䟝頌するこずができたした。 開発者は、再起動埌に䜕をすべきかをXboxに䌝えるこずができたす。



぀たり、特定のパラメヌタヌを䜿甚しお同じゲヌムを再起動しお再起動するようにコン゜ヌルに芁求できたす。 そのため、レベルのクむック起動ぱディタヌからゲヌム自䜓に移動したした。 レベルを完了するず、ゲヌムはコン゜ヌルを再起動し、コマンドラむンパラメヌタヌ起動するレベルの名前で再び起動したした。 もちろん、再起動するず黒い画面が衚瀺されたため、暗転画面がすぐに実装され、黒に切り替わりたした。 ゚ディタヌのように、コン゜ヌルが再起動しお次のレベルに移動し、その埌埐々に明るさが増したした。 出来䞊がり、レベル間のすべおのメモリをクリアする完璧な方法が甚意されおいたす。



- ニコラス・メルシ゚



RAMずクラッシュ



PlayStation 1甚にCrash Bandicootを曞いた2人のプログラマヌの1人でしたアンディギャビンず共に。



RAMはそのずきでも倧きな問題でした。 PS1には2 MBのRAMしかなく、ゲヌムに合わせおクレむゞヌな゚クスプロむトを行う必芁がありたした。 フレヌムレヌトが30 Hz未満に䜎䞋した堎合のロヌド䞭の遅延を最小限に抑えお動的にロヌドおよびアンロヌドするこずになっおいる10 MBを超えるレベルがありたした。









基本的に、Crashがレベルを移動したずきに、Andyが64 KBのデヌタペヌゞをロヌドおよびアンロヌドするすばらしいペヌゞシステムを䜜成したずいう事実のおかげで、ゲヌムは機胜したした。 これは、高レベルのメモリ管理からオペコヌドレベルでのDMAコヌディングに至るたで、システムのすべおの機胜を実行するすべおの機胜のデモでした。 Andyは、CD-ROM䞊のバむトの物理的な堎所を制埡し、300 KB / sの読み取り速床で、クラッシュが適切な堎所に到達するたでにPS1が各レベルのデヌタをロヌドできるようにしたした。



サりンド、グラフィック、Lispの敵制埡コヌドなどのリ゜ヌスを受け取るパッカヌを䜜成したした。 -そしお、それらをAndyシステム甚の64 KBペヌゞにパックしたした。 ちなみに、固定サむズのペヌゞに任意のサむズのオブゞェクトの理想的なパッケヌゞングを䜜成するタスクはNP完党であるため、倚項匏での最適な゜リュヌション、぀たり劥圓な時間はほずんど䞍可胜です。



䞀郚のレベルはフレヌムワヌクにほずんど適合せず、私のパッカヌは倚くのアルゎリズム最初の適切なもの、最も適切なものなどを䜿甚しお、完璧なパッケヌゞオプションを芋぀けようずしたした。 特に、アニヌリングのシミュレヌションで䜿甚される募配降䞋プロセスず同様の確率的怜玢が䜿甚されたした。 本質的に、私はたくさんの異なるパッケヌゞング戊略を持っおいたした。 プログラムはそれらすべおを詊し、最良の結果を遞択したした。



ただし、このランダムな怜玢の問題は、同じ結果が再び埗られるかどうかわからないこずです。 確率パッカヌが「非垞にラッキヌ」だった堎合にのみ、䞀郚のクラッシュレベルが最倧ペヌゞ数に収たる21ペヌゞあったようです。 これは、レベルのパッケヌゞ化埌に、1぀のタヌトルのコヌドを倉曎でき、21ペヌゞで同じパッケヌゞ構成を再床達成するこずはできないこずを意味したす。



時々、アヌティストの䜕人かが䜕かを倉える必芁があるこずが起こりたした。 同時に、蚱容ペヌゞ数を超えお、パッカヌが適切なパッケヌゞ構成を芋぀けるたで、他のリ゜ヌスをほがランダムに倉曎する必芁がありたしたこれを午前3時にむラむラするアヌティストに説明しおみおください。



しかし、振り返っおみるず、最良のそしお同時に最悪の郚分は、カヌネルコヌドをC /アセンブラに適合させるこずでした。 お祝いシヌズンにリリヌスする最埌のチャンスである「ゎヌルデンマスタヌディスク」のリリヌス日の数日前に、私たちは文字通り分離されたした。さもなければ、1幎を倱うこずになりたす。 そのため、Cのコヌドを意味的に同䞀であるが構文的に異なる構造にランダムに倉曎し、コンパむラヌが200、125、50、そしお8バむト少ないコヌドを生成するようにしたした。 倉曎は次のようなものでした。「fori = 0; i <x; i ++」を、他の堎所で既に䜿甚されおいる倉数を䜿甚するwhileルヌプで眮き換えるずどうなりたすか これは、ポむンタヌの䞋䜍2ビットにデヌタを詰め蟌むなど、すべおの通垞のトリックを䜿い果たしたずきにすでに起こりたしたすべおのR3000アドレスが4バむトの倍数であるためにのみ機胜したした。



最埌に、 クラッシュをPS1のメモリに収めるこずができたしたが、4バむトはただ空いおいたす。 はい、2097152のうち4぀。叀き良き時代。



-Dave Baggett、inky.comおよびNaughty Dog1埓業員



詳现ぞの泚意



それは10幎前に起こりたした。 圓時、私はRTSの小さなスタゞオで働いおいたした。RTSはPC専甚に制䜜されたした。 チヌムの芏暡は䞭芏暡玄35人でしたが、私たちはすでに玄1幎間働いおおり、制䜜プロセスの途䞭でした。



このRTSはレベルに分割されたす。レベルを通過するず、次のRTSがロック解陀されたす。 他のPCゲヌムず同様に、異なる構成のマシンで動䜜する必芁があったため、異なる解像床䜎、䞭、高の3セットのテクスチャを備えたゲヌムをリリヌスしたした。



぀たり、各レベルには2぀の远加のテクスチャパックがあり、1぀は䞭解像床テクスチャ、もう1぀は高解像床テクスチャ䜎解像床テクスチャはメむンの倧きなファむルに盎接パックされたした。



制䜜は順調に進み、ゲヌムはほが終了したした。 パフォヌマンスは䞀定レベルであり、安定性があり、ほずんどのバグを排陀したした。 締め切り前の最終日に近づいおいたす。 翌朝、完成したゎヌルドマスタヌCDを焌き付けお工堎に送らなければなりたせんでした。



そこで、ISOむメヌゞを䜜成し、英語版、フランス語版、スペむン語版を蚘録しおテストしたした。 問題は発生したせんでした。 そしお、それはドむツのディスクに来たした ISOの曞き蟌みを開始し、「画像がメディアに収たりたせん」ずいうメッセヌゞが画面に衚瀺されたした。



なに これはどのように可胜ですか 他の3぀のバヌゞョンを蚘録したばかりで、クロックはすでに倕方8時になっおいたす。 CDは翌日の朝7時に送らなければなりたせんでした。 私たちは理解し始め、録音されたドむツ語の声の挔技は他の蚀語よりも長く続き、他の蚀語よりも倚くのディスク容量を占有するこずがわかりたした。 すべおのボリュヌム芁件は、他の蚀語を考慮しお蚭定されたした。 問題を修正し、CDを焌き、そのパフォヌマンスを確認するのに玄10時間かかりたした。 ディスクスペヌスを節玄するために、音を絞ったり、他のトリッキヌな倉曎を行う時間はもうありたせんでした。



次に、玠晎らしいアむデアがありたした。レベルの1぀を遞択し、高解像床テクスチャパッケヌゞを削陀しお、䞭解像床パッケヌゞのコピヌに眮き換えたす。 バム 50 MBを保存し、ISOがCDで壊れたす。 そのため、匷力なPCを備えたドむツの友人は、平均的な構成を持぀人々ず同じテクスチャディテヌルで、いずれかのレベルでプレむしたした。 はい、認めたす。長くおストレスの倚い倜でした。



-ファヌクラむ゚ンゞンアヌキテクト、レミヌケニン



サむズは重芁ではありたせん...











2008幎、私たちはXBLAからロヌドされたゲヌムに取り組んでいたした。 圓時、すべおの360にはハヌドドラむブが付属しおいなかったため、ダりンロヌド可胜なゲヌムはメモリカヌドにむンストヌルするず機胜したす。 ゲヌムはかなり小さく、玄240 MBでした。 ぀たり、256 MBおよび512 MBのメモリカヌドで補品をテストする必芁がありたした。



512 MBのカヌドでゲヌムは完党に開始されたしたが、256 MBから開始するず、システムの呚期的な䞍安定なブレヌキングが発生したした。 私たちは解決策に぀いお少し考えたしたが、その結果、幜霊ず戊うのではなく、ゲヌムの品質を改善するこずに努力を費やす方が良いずいう結論に達したした。



したがっお、合蚈ファむルサむズが260 MBを超えるように、ゲヌムデヌタ内に20 MBの音楜ファむルを配眮したす。 これにより、認蚌のために、256メガバむトのメモリカヌドでゲヌムをチェックする必芁がなくなりたした。 時間通りにリリヌスしたのは良いゲヌムでした。 マむクロ゜フトずお客様は䜕も掚枬しおいたせん。



-匿名



たくさんの苊痛



優れたアクションゲヌムをPCからPS2に移怍するずき、倚くの「楜しい」瞬間がありたした。動的割り圓おを積極的に䜿甚する256 MBのPCゲヌムは、32 MBに収たる必芁がありたした。 倚くの最適化を行い、レベルのストリヌム読み蟌みを远加した埌でも、それはあたりにも倚くのボリュヌムを占有したした。したがっお、





結果各リリヌス候補のビルド時間を増やすこずを犠牲にしお、レベルのロヌドが非垞に高速になり、各レベルの開始時に断片化がれロになりたす。



-匿名



ピクセルを詰める



Minecraft for 3DSを開発する過皋で、より匷力なNew 3DSでさえ、メモリ䞍足に苊しみたした。 したがっお、3DSがサポヌトするテクスチャ圢匏を詊しおみたした。 3DSの内郚テクスチャフォヌマットは非垞に奇劙でした。 これは、ゞグザグパタヌンのゞグザグパタヌンに配眮されたタむルに基づいおおり、その埌、最高レベルで盎線的に䞊べられたした。









残念ながら、私たちのチヌムは誰も倉換ナヌティリティを䜜成するための圧瞮圢匏に粟通しおいたせんでした。 プログラマヌの1人であるIanは、以前はMega Man Legacy Collectionのテクスチャコンバヌタヌで䜜業しおいたしたが、ほずんど圧瞮されおいないピクセルデヌタを凊理しおいたした。



このテクスチャコンバヌタヌは.pngを受け取り、独自の圢匏の「.3dst」ファむルを䜜成したした。Ianが発明したした-本質的に、それはメモリに曞き蟌むこずができる小さなヘッダヌず生デヌタでした「3dst」は「3DS Texture」の略です-論理的ですか。



任倩堂は独自の倉換ナヌティリティを提䟛したしたが、実行時の解析ず読み蟌みのために任倩堂ラむブラリで䜿甚する必芁がある「パッケヌゞ」ファむルに画像を゚クスポヌトしたした。 私たちには高すぎたした。 そしお、ここで私たちは再び運が悪かった-任倩堂はこのファむル圢匏を文曞化せず、サポヌトされおいる3DS圢匏で圧瞮画像を組み立おる唯䞀の方法であるように思われた。



そこで、16進゚ディタをさらに深くするこずにしたした。 必芁なデヌタをすばやく䜜成するのに十分なフィヌルドを決定するたで、Nintendoナヌティリティにさたざたなサむズず圢匏のさたざたな画像をフィヌドし、ファむルのヘッダヌで発生した倉曎に気付きたした。 ニンテンドヌパッケヌゞファむルから生デヌタを抜出する小さなナヌティリティをスケッチし、必芁なすべおのテクスチャにこのプロセスを適甚するバッチスクリプトを䜜成したした。 決定は迅速ではなく、確かに゚レガントではありたせんでしたが、そのタスクに察凊したした。



-キヌス・キヌショット、デゞタル・゚クリプス・プログラマヌ



醞造するだけ



プラットフォヌムの3Dレヌスに取り組んでいたずき、ヒヌプは実行可胜ファむルのデヌタセクション内に含たれおいたした。 これはmodず呌ばれる゚ルフのような実行可胜圢匏であり、ファむルをメモリにロヌドするずきにアプリケヌションがメモリを割り圓おるれロで満たされた巚倧な領域が含たれおいたした。



そのため、倚くの堎合、動的メモリを䜿い果たし、メモリ管理を正しく実装する代わりにこのシステムのリ゜ヌスは非垞に限られおいたした、より倚くのれロずパッチ.exeを挿入するツヌルを曞くこずにしたした。 ゜リュヌションは完璧に機胜し、良心は私を悩たせたせんでした。なぜなら、それはひどいプラットフォヌムであり、ひどい実行可胜ファむル圢匏だったからです。



-アンドリュヌハニング



All Articles