Adobe Pixel Benderシェーダーの使用可能性

このテクノロジーは、アプリケーションに特定のマルチスレッド化をもたらし、生産性を大幅に向上させるため、非常に重要なプラスフラッシュを提供すると思われます。



ビデオプレーヤーのハードウェアアクセラレーションなどの他のイノベーションと並んで、シェーダーからハードウェアアクセラレーションを期待できます(誰もがビデオカードに関連するシェーダーの言葉を持っていると思います)が、ここで彼らは失望し始めました-彼はアクセラレーションを提示しませんでした。 それでは、一般的にこの新しい技術をどこで適用できるか、どのような実用的なタスク、そしてこれはどのような実用的な意味なのかという質問をすることをお勧めします。



想像力をつなぐことで、シェーダーを使用する多くの方法を確実に思いつくことができます。 しかし、彼らはどれくらいの需要がありますか? そして、彼らはどれくらいの利益をもたらしますか?

たとえば、シェーダーを使用して写真のある種の色補正を適用すると、純粋なAS3で同じことを行った場合、1/10秒節約できます。 そのようなタスクでのそのような利点は、シェーダーを使用する合理性に疑問を投げかけます。



しかし今、私は作業しなければならなかったプロジェクトの1つを思い出し、シェーダーを使用して大幅に最適化できる可能性があると判断しました。

これはステレオビデオプレーヤー(3D)です。 3次元画像を作成するためのアルゴリズムはいくつかありますが、最もリソースを消費するものの1つについて簡単に説明します。

入り口には、視覚的に2つの部分に分かれたビデオがあります。 たとえば、左目用の左部分、右目用の右部分(多くの場合、上部と下部に分割されます)。

出力は、市松模様の異なる偏光面の下で画像を表示する特殊な偏光3Dモニターのビデオである必要があります。たとえば、一方の面の下に白いセル、もう一方の下に黒のセルです。

必要なのは、ビデオを2つの画像に分割し、3番目の画像を表示することです。「白い」セルは左の画像のセル、「黒い」セルは右のセルです。



概略的には、次のようになります。



画像



最も明白な実装アルゴリズムを使用すると、プログラムは次のように動作します。

-標準のActionScipt 3.0ツール(getPixel、setPixel)を使用して、フレームごとに新しい画像を生成します。各ピクセルは、x座標とy座標がペアになっている場合、またはxとyがペアになっていない場合、またはその他のすべてのピクセルが左側のピクセルに等しいこれは、画像の右側のピクセルと同じです。



2番目の実装オプションは、シェーダーで同じダーティな作業を行うことです。

-画像を左右の画像に分割し、シェーダーをフィルターとして左側の画像に適用し、最初に右側の画像を渡します。



フラッシュアプ​​リケーションの1秒あたりのフレーム数を30に設定すると、Intel Core 2 Duo E7500プロセッサー(2.93 GHz)は、最初のケースで1290x720ビデオの場合に実際に1秒あたり7フレームのみを絞り出すことができました。シェーダーを使用する場合、この数値は1秒あたり24フレームでした。

かなりの賞金を獲得し、Adobeシェーダーを安全に喜ばせ称賛することができました。



ただし、このタスクにはもう1つの実装オプションがあります。

チェスマスクを事前に描画する

ビデオを2つの画像に分割し、左の画像にはまったく触れず、その上にチェスマスクを重ねて右の画像をスローします。 30.1 Fpsのレートで目的の効果を達成します。



Intel Core 2 Duo E7500(2.93 GHz)プロセッサーのパフォーマンスチャート

画像



古いプロセッサであるデュアルコアPentium 2.8 GHzでは、結果は次のとおりでした。マスクを使用して6.8フレーム/秒を達成し、シェーダー4.7を適用し、AS3 2.9を使用したピクセル単位のレンダリングを使用しました。 ここでわかるように、シェーダーを使用する利点はさらに重要ではありませんでした。



Pentium 2.8 GHzプロセッサのパフォーマンスチャート

画像



結論:高レベルメソッドの正しい適用ActionScript 3.0は、低レベルシェーダーを操作するための高度な技術を適用する前に、その有効性を証明しています。 シェーダーがまったく役に立たない別の実用的なタスク。



All Articles