タグ付けされた質問 「texture-atlas」

5
テクスチャアトラスでテクスチャブリーディングを回避する方法
私のゲームには、キューブで作られたMinecraftのような地形があります。ボクセルデータから頂点バッファーを生成し、さまざまなブロックの外観にテクスチャアトラスを使用します。 問題は、離れた立方体のテクスチャがテクスチャアトラス内の隣接するタイルで補間されることです。その結果、キューブ間に間違った色の線が表示されます(グラフィカルな欠陥を確認するには、以下のスクリーンショットをフルサイズで表示する必要がある場合があります)。 今のところ、これらの補間設定を使用しますが、すべての組み合わせを試しましたが、GL_NEARESTミップマッピングがなくてもより良い結果は得られません。 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); また、テクスチャ座標にオフセットを追加してタイルのわずかに小さい領域を選択しようとしましたが、不要な効果はカメラまでの距離に依存するため、問題を完全に解決することはできません。とにかく遠い距離でストライプが発生します。 このテクスチャのにじみをどのように解決できますか?テクスチャアトラスの使用は一般的な手法であるため、一般的なアプローチがあるかもしれません。悲しいことに、コメントで説明されているいくつかの理由により、異なるテクスチャやテクスチャ配列に変更することはできません。


1
Androidの最大テクスチャサイズ:2048x2048の設定は?
ゲームで2048 x 2048のテクスチャアトラスを使用したいのですが、ゲームがダウンロードされないように「低すぎる」デバイスでユーザーに警告したいと思います。 このサイズのテクスチャアトラスでは、Androidでどのような要件を指定する必要がありますか? この画像(ソース:https ://stackoverflow.com/questions/10392027/recommended-limit-for-memory-management-in-cocos2d)は、IPHONEの要件を示しています。正しい要件? ご回答有難うございます

2
私の膨大な数の画像のために、またはそれにもかかわらず、スプライトシートを使用する必要がありますか?
2Dゲームを開発していますが、たくさんのスプライトがあります。3Dアニメーションとモデルを使用して2Dにレンダリングし、「フォールアウト」または「ディアブロ」に見えるようにしました。また、手で描くよりも簡単です(笑)。 私はすでにフレームレートを15fpsに削減しなければなりませんでした。これは、フレームをぎこちなくすることなく下げることができる最低のフレームレートでした。しかし、24フレームが非常に滑らかに見えたために悲しかったです。 これを行った理由は2つあります。 1)HDDスペースを削減します。画像が少ないほど、ゲーム全体が小さくなります。 2)RAMの消費を削減します。ロードする画像が少ないほど、RAMの制限を膨らませる問題を回避できる可能性が高くなります。 ただし、HDDスペースとRAMの両方でイメージを圧縮する方法があれば、それを行います。以前にテストしたことがありますが、ほとんどの場合、RGBA8888からRGBA5555に変換しても品質に変化はなく、TexturePackerプログラムでRGBA4444に変換してもほとんど影響を受けません。SFMLは、.PNGイメージのタイプに関係なく、同じ量のメモリを使用するように見えるため、現在これを行いません。異なる方法でロードする方法を調査しましたが、このテーマについては何も見つかりませんでした。 2Dビデオゲームの処理方法について多くの記事を読みました。コンセンサスは圧倒的です。優れたパフォーマンスのために、スプライトをより大きなテクスチャに詰め込みます!そこで、TexturePackerを使用して、小さなスプライトを非常に大きなスプライトシートにパックします。 ただし、キャラクターごとに10〜15のアニメーション、5つの移動方向、およびアニメーションごとに15〜40のフレーム(おそらく平均24)を用意する予定です。15アニメーション、5方向、およびアニメーションあたり平均24フレーム。つまり、1文字あたり1800個の個別フレームです。スプライトシートにパックされている場合、代わりに75個の画像のみです。(アニメーションごと、方向ごとに1つのスプライトシート。15* 5) ゲーム内の1人の巨大なボスキャラクターの場合、スプライトシートを使用できず、一度に1つのイメージを単純に読み込む方法をプログラムする必要があります。パフォーマンスのためにこれを行うことができるかどうかはまだわかりません。 キャラクターについては、すでにスプライトシートにパックしています。1人のキャラクターが歩き回る場合、これはほとんどの場合うまくいくようですが、時々失速します。ただし、そのキャラクターのすべてのテクスチャをプリロードするのではなく、テクスチャをスワップアウトする悪い考えのコードに起因します。 テクスチャをプリロードする場合、スプライトシートには意味があります。各キャラクターに1800個の小さな画像をプリロードするのは悪い考えだと想像するだけです。 ただし、一度に1つずつメモリにストリーミングしたり、メモリからストリーミングしたりするのは非常に高速であるため、一度に1つの画像をメモリに保存するだけで済みます。これは、特定の瞬間に各キャラクターが45 + MBではなく数KBしか消費しないという意味ではないでしょうか? ストリーミングは信じられないほど高速(1秒間にメモリとレンダリングに出入りする15枚の画像)が必要であり、画像は非常に小さいものの、キャラクタースプライトシートをロードすることをお勧めします。代わりにメモリに。しかし、とにかく大きなボスキャラクターのために、単一画像ストリームのようなレンダリングシステムをコーディングする必要があります。 私は実験してきましたが、単純なプロセスではありません。特に、現在グラフィックスを処理していないゲームエンジンの他の部分に取り組んでいるという事実を考えると。

1
テクスチャアトラスとアレイテクスチャ:CPUとGPUによる処理の違いと、パフォーマンスへの影響
Unity 5.4(現在ベータ版)は、配列テクスチャ-OpenGLのArrayTextureと同じ無駄に待望の機能(2013年以降)をもたらします。ただし、配列-テクスチャーとテクスチャーアトラスについて少し読んだ後でも、CPUとGPUによるそれらの使用法の技術的な違いを完全には理解できません。 具体的には、CPUとGPUがテクスチャアトラスとテクスチャ配列を処理する方法の主な違いと、最も重要なのは、そのような違いがパフォーマンスとメモリの処理にどのように影響するか(例:テクスチャ配列がテクスチャアトラスよりもパフォーマンスを向上させる方法など)。 Unityの実装に関する技術的な詳細が、残念ながらクローズドソースであるために欠けている場合は、OpenGL.s ArrayTextureに関する回答で十分満足しています。

1
隣接するテクスチャのエッジを拾うスプライトシートテクスチャ
シンプルなスプライトシートを使用するカスタムスプライトルーチン(openGL 2.0)があります(テクスチャが横に並んでいます)。 したがって、たとえば、以下は2つの単純なテクスチャを持つテストスプライトシートです。 ここで、openGLスプライトオブジェクトを作成するときに行うことは、アトラス内のフレームの総数を指定し、描画するときに、描画するフレームを指定することです。 次に、テクスチャをどこから取得するかを決定します。 必要なフレーム数をフレームの総数で割る(左座標を取得するため) 次に、フレームの総数で1をダイビングし、その結果を上記で計算した左側の座標に追加します。 これは機能するようですが、時々問題が発生します。たとえば、以下のXを描画したいとします。 各テクスチャの間に1ピクセルの「パディング」を挿入することについて聞いたことがありますが、これがどのように機能するかを誰かが正確に説明できますか?つまり、これを行うと、テクスチャを取得するための計算が確実に破棄されます。 ピックアップしたテクスチャにパディングを単純に含めると(スプライトは空白の境界線で描画されます)、衝突の検出で問題が発生しますか?(つまり、透明部分が衝突するときに境界ボックスを使用すると、スプライトが衝突するように見えることがあります)。 誰かが説明していただければ幸いです。

1
Unityで偽者を手動で作成する方法を学ぶ-カメラが見るものではなく、テクスチャーにオブジェクトをレンダリングする方法?
Unityで詐欺師を作る最もパフォーマンスの高い方法を、既製のソリューションを使用せずに手動で学習しようとしています。 私の最初の推測は、RenderTextureと2番目のカメラを使用して、オブジェクトのさまざまな角度のさまざまな「スナップショット」を撮影することで実現できると思います。パフォーマンスの面でより良い代替手段がある場合は(実装するのがより難しい場合でも)、ぜひ聞いてみたいと思います。 それが唯一のパスである場合は、スクリプトからカメラからテクスチャにレンダリングする方法を学びましたが、次の方法を理解することができませんでした。これは、最初に行う必要があることです。レンダリング方法-カメラの背景なしで特定のオブジェクトをテクスチャリングするには(つまり、テクスチャの残りの部分を透明にして)、パフォーマンスを向上させますか? ポインタ、提案、または少なくともリンクの推奨は素晴らしいでしょう。 前もって感謝します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.