問題タブ [texture-atlas]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - Xamarin.iOS でビルドされた iOS ゲームとアプリのサイズを小さくするにはどうすればよいですか?
Apple Developer Guide へのリンクは次のとおりです。
そのリンクには、「App Review のためにアプリを送信する 」というセクションがあり、次のメッセージが表示されます。
"異常に大きなビルド ファイルは、通常、アプリ バンドル内のリソースとしてではなく、コンパイルされたバイナリ自体に画像などのデータを保存した結果です。画像または大きなデータセットをバイナリにコンパイルする場合は、このデータを、アプリによって動的にロードされるリソースに分割します。」
私のゲームで使用する PNG 画像の合計サイズは約 130 Mb です。テストのためにゲームをコンパイルして iPad にロードすると、ゲームの合計サイズが iPad に表示されているように約 190 MB であることがわかります。
Xamarin スタジオの " resource "フォルダー内に既に PNG 画像を配置しており、ゲームをコンパイルしてビルドする前に、コードによってこれらの画像がテクスチャ アトラスにビルドされます。
したがって、上記のメッセージにある Apple の提案「このデータをアプリによって動的にロードされるリソースに分割するのが最善です」ということで、私の質問は次のとおりです。
(1) 「ゲームで動的にロードできる別のリソースに画像を配置する」ことで、ゲームのサイズをさらに縮小できますか? (または、この場合「App Thinning」が役立ちますか?)
(2) 上記の質問 (1) の答えが「はい」の場合、その方法を教えてください。または、その方法を示す Xamarin Web サイトへのリンクを送っていただけますか?
どうもありがとうございました。
image - テクスチャ アトラス シェーダを実装するには?
テクスチャ アトラスでシェーダーを使用する方法を知りたいです。画像の一部だけを描画する方法を知っている人はいますか?
現在のビュー:
希望するビュー:
シェーダーソースコード:
c# - unity3d で 3D オブジェクトのテクスチャ アトラスを作成する方法
私は 3D ゲームに取り組んでおり、シーンにたくさんのゲーム オブジェクトがあります。だから私はドローコールを減らすことに取り組んでいます。静的ゲーム オブジェクトでメッシュ結合を使用しました。しかし、私のプレーヤーは静的であり、メッシュの組み合わせを使用できません。私のプレーヤーは、標準シェーダーを使用するいくつかのキューブと、さまざまな部分にあるいくつかの異なる色のマテリアルの組み合わせに他なりません。したがって、プレーヤーでテクスチャアトラスを使用して、daw 呼び出しを減らすことができると思います。しかし、私はそれを行う方法がわかりません。
私の仕事の理論は正しいですか?私が正しければ、アトラス化を手伝ってください。間違っていれば、私の過ちを指摘してください。前もって感謝します。
performance - ミップマップが 2D スプライトの静的バッチ処理に与える影響
2D モバイル ゲームを最適化しています。ゲーム全体にPOT サイズのスプライトが多数あり、それらを埋めてPacking Tag
バッチ処理を有効にし、Generate Mip Maps
チェックボックスもオンにしました。これらのスプライトはすべて、ゲーム内で均一なスケールを持ち、それらのほとんどは (1,1,1) です。
私がやろうとしているのは、ゲーム内のバッチの数を最小限に抑えることです。
私が理解したいのは、ミップマップが 2D ゲームのバッチ数にどのように影響するかということです。
これは私が試したことです:
2 つのスプライトを異なるが均一なスケールで数回コピーし、バッチ数を報告しました。
円には POT サイズとミップマップが有効になっています。正方形ではなく、単なるスプライトです。どちらも同じ梱包タグが付いているため、異なるアトラスに存在します。
また、これらのゲーム オブジェクトをオンまたはオフStatic
にしても、何も変わりません。
2 つの異なるスプライトが描画されるが、位置が少し異なる場合の 7 つのバッチ
ミップマップ スプライトを 1 つだけ描画する場合は 1 バッチ
非ミップマップ スプライトが 1 つだけ描画される場合は 1 バッチ。ゲーム オブジェクトの位置は、 7 つのバッチがあった最初のテスト ケースと同じです。
c++ - Texture Array 内に Texture2D アトラスを描画する
Texture Array 内に格納されている Texture2D Atlas の一部のみを GLSL Sampler 経由で描画するにはどうすればよいですか? たとえば、Texture アトラスがあり、それらを (同じサイズの他のアトラスと一緒に) Texture2D Array 内に配置します。(glTexSubImage3D)
さて、その場合、私のサンプラーはどのように見えるでしょうか?
https://www.opengl.org/wiki/Array_Texture
https://www.opengl.org/wiki/Sampler_(GLSL)
配列からテクスチャ全体を選択して適用する方法の例のみを見つけましたが、配列内にテクスチャアトラスを保存する場合は関係ありません。
ios - SKTextureAtlas を削除すると、SpriteKit のパフォーマンスが大幅に低下する
のキャッシュされたインスタンスを消去するときに、非常に奇妙な問題が発生しますSKTextureAtlas
。
つまり、ゲームが開始する前にSKTextureAtlas
withをプリロードtextureAtlas.preload(completionHandler:)
し、完了ハンドラーでアトラスへの参照をプライベート プロパティに保存して、後で使用できるようにメモリに保持します。
しばらくすると、このテクスチャ アトラスは不要になり、クリーンで健全な記憶を維持するために削除したいと考えています。
問題
私が抱えている問題は、(アトラスへの参照を保持していたプロパティを に設定することによって) テクスチャ アトラスを消去するとnil
、パフォーマンスが数秒間大幅に低下することです。大幅に、一定の 60 fps から 40 fps を意味します。
この時点で残されたそのアトラスへの他の参照は絶対にないことに注意してください.
興味深い: パート 1
iOS 10 でのみ発生します。iOS 9 では、はるかに古いデバイスでも完全に動作します。
興味深い: パート 2
アトラスが の形式で定義されている場合にのみ発生.spriteatlas
し.xcassets
ます。ただし、アトラスが の.atlas
外部のフォルダーである場合はそうではありません.xcassets
。
.atlas
の代わりに先に進んで使用できることはわかっていますが、そのままで app-thinning をサポートしています.spriteatlas
が、サポートしていません。.spriteatlas
.atlas
興味深い: パート 3
アトラスに少数の小さなテクスチャがある場合、パージは正常に機能します。これは、アトラスの合計サイズに関連する内部の問題がある可能性があることを示しています。しかし、なぜ?
動機
この問題の解決策/回避策を見つける背後にある動機は、バインド/描画呼び出しのバッチ処理です。同じテクスチャを使用する子ノードはすべて 1 回の描画パスでレンダリングされるため、もちろんパフォーマンスが大幅に向上します。
この問題により、基本的に複数のアトラスを作成する必要があり、その結果、複数の描画呼び出しが発生し、全体的なパフォーマンスに影響を与えます。
どんな助けでも大歓迎です。
アップデート
@Knight0fDragon によって提案されたソリューションを実装しようとしました。これは、それ自体ではなくSKTexture
s をキャッシュすることを提案していますが、残念ながら私の場合はうまくいきませんでした。SKTextureAtlas
SKTextureAtlas
元の質問で忘れていたのは、この問題はほとんどの場合発生するが、常に発生するわけではないということです。〜5回の試行ごとに完全に正常に動作します。
解決
誤って重複としてマークされた後、質問を再度開くことができなかったので、見つけた解決策をここに投稿します。
問題は、バックグラウンドで実行されているアニメーションでした。このアニメーションはこのように設定されました
のレイヤーで実行されていましたUIImageView
。このイメージ ビューは、最終的にゲーム シーンを含む別のビュー コントローラーを提示するビュー コントローラーに配置されました。
beginAppearanceTransition
これらの 2 つのビュー コントローラー間のトランジションはカスタムです。カスタム トランジション アニメーターに呼び出しを追加するのを忘れたためendAppearanceTransition
、ビュー コントローラーのライフサイクル メソッド ( viewWillAppear:
、viewWillDisappear
) は呼び出されませんでした。アニメーション。したがって、アニメーションはバックグラウンドで実行され続けました。
とはいえ、アニメーションがバックグラウンドで実行されていたとしても、キャッシュされたアトラスのクリアなど、まったく関係のないことを妨げるべきではありません。
注: 問題のあるアニメーションを含む画像ビューの画像は、問題のあるテクスチャ アトラスでは定義されていません。
libgdx - テクスチャ アトラスからスプライトを作成する
私の libGdx プロジェクトでは、createSprite() を使用して、テクスチャ アトラスからスプライトを作成しました。回転したスプライトを実装したい。どうすればできますか?ここに私のコードがあります:
render() の内部:
このコードは機能していません。何が間違っていたか教えてください。