回転に最適なスプライトサイズ


8

私はスプライトベースのゲームを作っていて、途方もなく大きな解像度で大量の画像を取得していて、それらをゲームリソースに変換する前に目的のスプライトサイズ(たとえば64x64ピクセル)にスケーリングしているので、ゲーム内のスプライト、私はそれをスケーリングする必要はありません。

ただし、この小さなスプライトをゲーム内で(エンジンにとらわれずに)回転させると、一部の宛先ピクセルが補間され、スプライトがぼやけて見えます。

これはもちろん、回転角と補間アルゴリズムに依存しますが、それにもかかわらず、特定の宛先ピクセルを正しくサンプリングするのに十分なデータがありません。

だから私が考えることができる2つのソリューションがあります。1つ目は、元の巨大な画像を使用し、それを必要な角度に回転させてから、すべての反発バリエーションを縮小し、アトラスに配置することです。これは、実装が非常に簡単であるという利点がありますが、単純に2倍のスプライトを消費します。各回転のスペース(各回転は、元のスプライトの長方形の対角線である直径の円に内接する必要があり、その面積は正方形のスプライトを想定して、元の長方形の2倍です)。

また、ゲームによっては大丈夫かそうでないかを問わず、事前に定義されたローテーションのセットしか利用できないという欠点もあります。

したがって、もう1つの選択肢は、より大きな画像を保存し、レンダリング中に回転および縮小することです。これが私の質問につながります。

このスプライトの最適なサイズは何ですか?最適な意味は、大きな画像が結果の画像に影響を与えないことを意味します。

これは、画像サイズ、データ損失のない望ましい回転量である1/256に完全に依存しています。これは、表現可能な最小の色差です。

私はこの問題に対する理論的な一般的な答えを探しています。たくさんのサイズを試してもかまいませんが、最適とはほど遠いからです。


3
これは役に立たない回答ですが、私は質問を読み、「ああ、それは簡単です!」実際、それは簡単ではありません。そうは言っても、私の直感は「各軸の解像度が2倍であるか、完全に十分である」ですが、これについての証拠はありません。最後に、これは比較しているダウンスケーリングカーネルに劇的に依存していると思います。単純なピクセル平均化カーネルは分析と複製が簡単かもしれませんが、Lanczosカーネルは不可能であるかもしれません。
ZorbaTHut

従来の色空間(sRGB)は非線形であるため、1/256が許容可能な色差デルタの制限であるというあなたの仮定は間違っていると思います。
sam hocevar

@sam実際の光スペクトルに合わせた場合、線形ではない可能性がありますが、量子化は線形です。ただし、これは実際には補間アルゴリズムに依存しており、線形、つまりバイキュービック補間では結果が大きく異なる場合があります。しかし、補間がなくても、最適なサイズを計算する方法があるはずです。
パンダパジャマ

@zorbathut答えは、ダウンサンプリングアルゴリズムによって異なります。しかし、最近傍補間または線形補間の一般的なソリューションを考え出すのは比較的簡単なはずです。私はまだそれに取り組んでいますが、8方向については、sqrt(2)領域が最適であると思います。どこに着いたのか教えてください
パンダパジャマ

回答:


7

あなたがやろうとしているのは、二重丸めに相当する2D画像空間だと思います。少なくとも線形補間などの単純なダウンスケーリングアルゴリズムの場合は、そのような中間サイズを見つけることが不可能であることを示す緩い証明を構築できます。

N中間画像のサイズN×Nがより大きいことがわかったとし64×64ます。まだ回転を適用していないとします(角度はゼロ)。

次に、機能しない画像を作成します。

中間イメージを作成する

完全に黒の中間画像を考えてみましょう。もちろん、最終的なイメージも完全に黒になります。次に、最小強度の1つの灰色のピクセルを追加します(R¸G、B = 1,1,1)。最終的な画像はまだ完全に黒であるはずです。最初のピクセルに触れる別の灰色のピクセルを追加します。最終的なイメージが完全に黒くなくなるまで、円を作成します。

中間イメージの構築 画像1

これで、最終的な画像の1つのピクセルが灰色になり(永久に継続すると、結果の画像は完全に灰色になるため、ある時点で1つのピクセルが灰色になります)、最後のピクセルを削除すると、再び完全に黒になります。

元の画像を作成する

中間画像に導いた架空の元の画像を考えてみましょう。存在は証明できませんが、存在感は強いです。たとえば、元の画像のサイズがの場合2N×2N、次のようになります。

元の画像 画像2

画像2を中間サイズに縮小すると、画像1が得られます。

そして、仮説に64×64よれば、に縮小すると、最終的な画像に1つの灰色の点が表示されます。

次に、追加した最後のピクセルを分解して、元のクラスターの周りに散布します。

機能しない画像画像3

これは私たちの反例です。

最終的なサイズにダウンスケールすると、この画像は灰色のピクセルになります。これは、散らばったピクセルがクラスターにさらに近くなるため、全体的な強度が少なくとも同じになるためです。

中間サイズにダウンスケールすると、この画像は散在しているため、特別なピクセルを見落とすはずです。そのため、2ステップのサイズ変更を実行すると、完全に黒い画像になります。

結論と将来の考え

これにより、達成しようとしていることが一般的なケースでは機能しないことを納得していただければ幸いです。

あなたの問題への私のアプローチは、画像ごとに最適なサイズを計算することです:元の画像から始めます。 N = 128、次にすべての可能な角度を試し、最大誤差を計算します。最大エラーが満足のいくものでない場合は、正しいサイズになるまで、N = 256 等を試してください。


この問題を二重丸めと見なすことは非常に興味深いアプローチですが、信号の問題ではなく数値で見ているため、不可能だというあなたの仮説には同意しません。1次元の信号を考えてみましょう。nポイントでサンプリングすることにより、最大1 / 2nの周波数のすべての情報を保持します。ナイキストの定理を使用すると、信号をm> nポイントでサンプリングし、nポイントで再サンプリングして、最初にnポイントでサンプリングした場合と同じ結果を得ることができます。これはn次元に簡単に拡張できます。
パンダパジャマ

1
@PandaPajamaは残念ながらNyquistを呼び出すことで、信号を厳密に帯域制限できると想定しています。これは、サンプルが離散ドメイン上にある場合には当てはまりません。これは私の反例が悪用するものであり、丸めに関連する理由です。
sam hocevar

元の画像が任意に大きい場合は、連続ドメイン上にあるかのように考えることができます。ただし、より実際的な議論では、非常に具体的なサイズ(2x)でのダウンスケーリングのための非常に具体的なアルゴリズムを検討するとき、あなたの議論は有効です。最近傍内挿、双一次内挿、双三次内挿では、異なる結果が得られます。特に最近傍の場合、幾何学的に一般的なソリューションを構築することは可能だと思いますが、週末を待たなければなりません。
パンダパジャマ

1
@PandaPajama正解です。非常に大きい画像は連続していると見なすことができますが、問題は中間画像が依然として離散ドメイン上にあることです。また、最近傍は、定義により丸めの問題に悩まされることはありませんが、些細な場合を除いて、1)最小サイズを6400×6400に近づける等分布定理に関連する問題、すなわち 非常に非現実的であり、2)深刻なエイリアシングの問題。
sam hocevar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.