2

Android と iOS 向けのクロスプラットフォーム ゲームを開発しています。いくつかのビルボードのようなオブジェクトではglBlend(GL_ONE, GL_ONE)、黒の背景テクスチャで加算ブレンディング ( ) を使用しています。レンダリングされたオブジェクトは、ほぼどこでもきれいに見えます (つまり、テクスチャの黒いピクセルが完全に透明に見えます)。ただし、Adreno GPU を搭載した 2 つの異なる Android デバイス (1 つは Nexus 4 で、もう 1 つは Sony Xperia Go) では、次のようなアーティファクトがあります。ここに画像の説明を入力

ハンバーガー アイコンで表示されるように、背景色がレンダリングされたクワッドに流れ込みます。ビルボードの四角形が背景の真正面にあると効果が見えないため、背景色のにじみだと思います。さらに奇妙なことに、デバイスからスクリーンショットを撮ると効果が見えないため、別のカメラで画面の写真を撮る必要があります。Disable HW Overlaysまた、Android 開発者設定から有効にすると、アーティファクトが消えることにも気付きました。音量ボタンを押したときの音量スライダーなど、画面に別の透明なウィンドウがある場合にもアーティファクトは消えます。

シーンをレンダリングするときは、まず最初のパスで不透明なオブジェクトをレンダリングし、次に 2 番目のパスでglBlend(GL_ONE, GL_ONE)深度書き込みを無効にして透明なビルボードをレンダリングします。

4

1 に答える 1

0

記録のために、犯人を見つけるのに長い時間がかかりましたが、ついにその理由を見つけました. 私の「おそらく」不透明なオブジェクトのすべてが実際に不透明だったわけではないことがわかりました(つまり、アルファ値が1.0未満でした)。

このため、ハードウェア オーバーレイを使用するデバイスではアーティファクトが表示されますが、ハードウェア オーバーレイが 1 つのデバイスでは問題なく表示されます。100% 確実ではありませんが、アプリケーション ウィンドウの上にシステム ボリューム バーなどのオーバーレイ ウィンドウがある場合に、これが承認される効果は、オーバーレイと関係があります。

すべての不透明なオブジェクトが本当に不透明であることを確認した後、問題は消えました。

于 2013-05-31T17:55:48.957 に答える