質問

iPhoneゲームではPVRテクスチャ圧縮がすべてうまく機能していますが、複数のテクスチャを並べて表示するときに問題が発生します。基本的に、複数の512x512タイルに分割され、すべてPVRで圧縮された非常に大きな背景があります。次に、それらは1つの大きな背景画像のように一緒に描画されます。 PVRが動作する方法。テクスチャを本当に大きなテクスチャであるかのように圧縮することになっていることを知らないためです。つまり、PVR圧縮を実行する方法を決定するために隣人のタイル情報を使用します。

これを行うにはいくつかの方法が考えられます。

1)どういうわけか、texturetoolコマンドラインプログラムに、隣接する他の画像に対応するように指示します。
2)コマンドラインプログラムを使用して、画像全体を表す巨大なPVRテクスチャを生成し、バイトを複数の画像に分割します-おそらく不可能です。
3)エッジをうまくブレンドする、ある種のOpenGL ESのトリッキーな操作を行います。
4)各タイルに冗長な情報があり、テクスチャが描画されたときにそれらの領域をクリップする場合、いくつかのトリッキーを行います(いいえ)。

うまくいけば、1、2、または3を実行できるか、他のよく知られた解決策があります。

役に立ちましたか?

解決

オプション4に進みました。これはPVRTCが適切ではない状況ではないと思います-実際、ほとんど必要です。一度に合計24個の512x512テクスチャ(非常に大きな背景と前景を表す)がメモリにある場合、それらを非圧縮状態にするのは自殺です。そのため、通常どおりPVR圧縮を使用し、タイルアルゴリズムで数行のコードを編集して、両端で15ピクセルでオーバーラップおよびトリムするようにしました。出来上がり、素晴らしく見えます。数日かかってかなり面倒でしたが、これはiPhoneで非常に大きなタイルの背景を必要とする人々にとっては良い選択肢だと思います。

他のヒント

私の最善のアドバイスは、あなたが尋ねたことではなく、PVRTCが適切でない場合を知ることです。一番簡単な解決策は、これらのタイルにPVRTCを使用しないことです。私はPVRTCを曲げて、それが適していない状況で動作するようにしようと多くの時間を費やしました。

それは言った、

PVRTCを使用する場合、テクスチャは常に(それ自体で)タイル化されると想定されるため、右端のピクセルは左端のピクセルに影響します(上と下と同じ)。したがって、選択肢1または2はおそらく機能しません。

可能性の1つは、アルファチャネルをタイルに追加し、エッジの周りでフェードアウトできるようにすることです。これにより、タイルを重ねると、互いにフェードインします。 PVRTCは、緩やかなアルファフェードの方がうまく機能する傾向があることに注意してください。ハードアルファエッジは、PVRTCでしばしばアーティファクトがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top