コンテンツパイプラインツールをエンジンに埋め込む必要がありますか?


10

ゲームエンジンはどのくらい最小限にすべきですか?どのくらいのコンテンツパイプラインをエンジンに埋め込む必要がありますか?

スーパーエンジンが役立ついくつかの使用例:

  • ユーザーコンテンツをロードするとき、ユーザーはテクスチャをパッケージ化する必要はありません。エンジンはロード時にパッケージ化します。

  • スクリプトは、事前に生成されたものよりもはるかに大きいサイズのフォントを要求し、エンジンはttfファイルを解析して、新しいテクスチャアトラスを構築します。

  • ハローフォージ

もちろんこれは無料ではありません。これには、C ++で記述されたコンテンツパイプラインツールが必要です。パイプラインで使用するサポートライブラリは、デバイスで使用するためにコンパイルする必要があります。コンテンツの生成にバグがないことが必要です。そして、それは一般的にあなたのエンジンを大きくして扱いにくくします。
他の長所と短所は何ですか?
長所は短所を上回っていますか?

特定の質問:

  • エンジンはさまざまな画像フォーマットをロードできますか?TGAのみのローダーは、コードを渡すのがかなり簡単です。

  • オーディオ形式はどうですか?wavファイルのロードのみをサポートすることは可能ですか?巨大なことが多いアンビエント音楽ファイルはどうですか?

  • エンジンは、動的TTF解析とアトラス生成が可能である必要がありますか?

  • テクスチャパッキング。

回答:


11

Noel Llopisの内からのゲームのブログは、最近「リモートゲーム編集」の投稿でこれについて触れています。冒頭の段落:

私は長い間、最小限のゲームランタイムのファンでした。オフラインまたは別のツールで実行できるものはすべて、ランタイムの外で実行する必要があります。これにより、ゲームのアーキテクチャとコードは非常に無駄のないシンプルなものになります。

(この記事は、100%同意してもしなくても、ほとんどのNoelのものと同様に、強くお勧めする記事です。)

ここでの鍵は、複雑さをエンジンの外に保つことだと思います。それでも柔軟性はありますが、コンテンツパイプラインでは柔軟性があります。また、データの変換や移動に時間を費やすことなく、パフォーマンスが向上します。

エンジン内の編集機能の一部が失われているにもかかわらず、パフォーマンスが向上すると、不思議なことに反復時間が短くなる可能性があります。1秒でゲームをロードできれば、何かを試すのが簡単です。

UNIXの哲学」の原則の一部を採用すると、ツールチェーンを柔軟に保つのに役立ちます:小さなモジュラーパイプライン。

私の個人的な哲学:焼くことができ、オフラインな限りデータの多くとしてではなく、いつでも新しい焼かれたデータを受信するためにエンジンのサポートを提供しています。(この新しいデータは、「リフレッシュ」ボタンが押され、次のレベルが開始され、新しい領域に移行するなど、都合のよい時点までは、必ずしも必要ではありません。重要なのは、最小化するスイートスポットを見つけることです。コードの複雑さとコーディングの労力を最小限に抑えた反復時間)

弊社では、アーティスト/デザイナー向けのツールのほとんどは、UIの問題に焦点を合わせています。単一のアセットやそのバッチの操作のしやすさなどです。Photoshopや3DS Maxなどのサードパーティツールにすぎない場合もあります。これらのツールは、中間形式(多くの場合、ソースバイナリデータを参照するxmlですが、常にではない)にエクスポートします。中間フォーマットは、バックエンドの「データ作成」ツールによってピックアップされ、ターゲットプラットフォームにとって有用で迅速なロードを可能にします。

移植性は、追加のバックエンドデータ作成ツールを追加するか、既存のバックエンドデータ作成ツールを拡張することによって実現されます。これには、コンテンツ作成者から見えないという追加の利点があります。

これで、適切なインクリメンタルデータの作成により、ベイク形式の変更を数秒で行うことができます。エンジンがスパイダーできるか、ツールがスパイダーできると、リソースシステムに表示され、都合の良いときにリロードできるようになります。

ツール(特にバックエンドデータ作成ツール)は、エンジンコードよりもスロッピーでバグが多いことがよくあります。これは、リファクタリング/書き換え、拡張、およびテストが容易であるため、問題ありません。それらの動作の仕様があり、一部のエンジンコードと比較して、それらを単体テストするのはかなり簡単です。

あなたの質問に対する私の意見:

エンジンはさまざまな画像フォーマットをロードできますか?TGAのみのローダーは、コードを渡すのがかなり簡単です。

(脇に:エンジンでTGAデコーダーを使用する場合でも、ハンドコードしないでください。問題を求めているだけです。ほとんどの画像形式には多くの微妙な点があり、準拠していないツールがたくさんあります。おそらく十分に指定されていないフォーマットに正確に対応します。画像処理用の十分にテストされた既存のライブラリコードを見つけるのが最善です。

ここで、TGAから内部のテクスチャ形式であるメタデータに変換するツールを用意します。

オーディオ形式はどうですか?wavファイルのロードのみをサポートすることは可能ですか?巨大なことが多いアンビエント音楽ファイルはどうですか?

ここでは3つの形式を使用します。追跡された音楽(.xm)、ADPCM(.wav)、およびSpeex(.spx)です。これは主にハンドヘルドを使用しているためであり、これらの形式はデコードするのに非常に軽量です。

エンジンは、動的TTF解析とアトラス生成が可能である必要がありますか?テクスチャパッキング。

アトラスは難しい問題です。最近の質問の回答を参照してください。ほとんどの場合、オフラインで行う価値があります。

さらに、文字ごとのメタデータを、ロードコードがほぼゼロのベイク構造体にすることができます。

最後に、MODコミュニティのために、このパイプラインをクリーンアップしてゲームとパッケージ化できます。いつでもソース形式を追加できます。また、特定の場合にコンテンツ作成ツールとエンジンの間のギャップを埋めることを妨げるものは何もありません。うまくいけば、データベイキングコードとスパイダー/転送コードをライブラリにリファクタリングして、場合によってはコンテンツ作成ツールで直接使用できるようにすることができます。しかし、私は必ずしも最初の目標を設定しません。それは最終的な目標であることを認識し、それがデザインに少し影響を与えるようにします。


更新として、テクスチャにKTXファイル形式を使用することを検討してください。それは、structほとんどのGLユースケースでほとんど「読み書きできる」という利点があります(そして、コメントからはGLをターゲットにしているように聞こえます)一方で、柔軟性があり、明確に定義されています。

ターゲットによっては、完全に焼き付けられたデータのKTXヘッダーオーバーヘッドが少し高くなる場合があります。また、ユースケースによっては、エンディアンスワップのサポートを省略したい場合もありますが、設計上の考慮事項として、少なくとも価値があることは間違いありません。


ありがとうございます。自分で簡単にロードできる画像フォーマットを構築することを考えたことはありませんでした。すでに構築された最小限のテクスチャロードライブラリはありますか?そして再び、それは基本的に幅、高さ、およびエンコーディング(つまりGL_RGB555)を持つバイトのストリームです。
deft_code 2010

1
DirectX、GL、または使用しているものが必要とする正確な形式に画像を取得するほど、独自の画像形式を構築しないでください。=)ライブラリーに関する限り、そこにはたくさんあります。ツールについては、ImageMagick(imagemagick.org/script/index.php)ライブラリスタッフやプログラムを使用する傾向があります... ImageMagickコードは古風で醜いですが、かなり高速で、柔軟性があり、ロードされています。 -テスト済み。私は他の人が他の多くの提案を持っていると確信しています。あなたのツールチェインの例えばC#を使用している場合、このようなものの多くは、すでに.NETのlibs ...に組み込まれる
リアンダー

1
「私は他の人が他の多くの提案を持っていると確信しています」MFC!:)またはおそらくOpenIL。アセットをプラットフォーム固有の形式にベイクすることに関する重要なポイントの1つは、ソース形式とプラットフォームを追加するにつれて、組み合わせの数が爆発的に増えることです。ソースアセットを中間形式に変換し、それをプラットフォーム固有の形式に変換すると、変換ルートの数が削減されます。別のソース形式を追加し、コンバーターを中間形式に書き込みます。別のプラットフォームを追加し、そのプラットフォームターゲットフォーマットにパン屋を追加します。
Chris Howe

1
さらに、エンジンの外部で複雑さを維持しても、機能がエンジンで利用できないわけではありません。ただし、エンジンと簡単に離婚できるように分離しておくことが重要です。アセットのホットロード、つまりオンザフライでのリロードをサポートすることの有用性を強調することはできません。これもシステムに多くの複雑さをもたらす可能性がありますが、ゲームがアセットの出所を気にする必要がないような方法でビルドされていることを確認する必要があります。
ダッシュトムバン

3

あなたの質問は非常に主観的に聞こえ、対象とする聴衆が誰であるかに大きく依存します。

フォント/ ttf解析の質問を見てみましょう。モダーが独自のフォントを追加することを計画している場合は、インポートプロセスをできるだけ少ない手順にしたいと思うでしょう。多くのフォント/フォントサイズをゲーム内に追加する場合、アーティストが少しのトレーニングで使用できるやや洗練されたツールが必要になる場合があります。内部で1回実行する場合は、適切なインポーターを作成するのに費やす時間は、前のケースのツールを作成する時間よりも少なくなるでしょう。

それは他のすべてのものと本当にスケールの問題です。組み込みツールは、何かを何度も実行していて、その結果生じる複雑さやバグを減らしたい場合に、努力する価値があります。追加する修飾子を追加するたびに(つまり、PSDのインポートではなくTGAテクスチャのみ)、エンドユーザーが費やす時間が長くなります。

コンテンツツールは通常、あまり技術的ではない人が使用することを覚えておいてください(読み:アーティスト)。個人的には、ソースファイル(psd、3ds、ttf、mp3、jpg、movなど)をドラッグするだけで自動的に内部形式に変換されるUnityの動作がとても気に入っています。内部フォーマットは、ほとんどの場合エンドユーザーから隠されています。また、ソースファイルの変更を検出すると、自動再変換されます。しかし、それは大変な作業です。

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