6

<BevelBitmapEffect>(他の効果の中でも)減価償却されたので、シェーダー効果でまったく同じものを再現する方法を探しています(、BevelWidthEdgeProfileLightAngleおよびReliefのプロパティを含むSmoothness)。

私はピクセルシェーディングにある程度精通しており、主にShazzamの画像/要素全体の色操作だけですが、ベベルを作成する方法はわかりません。これは頂点シェーダーですか? もしそうなら、どのように始めればよいですか? 私はこれについて高低を検索しましたが<BevelBitmapEffect>、カスタムでの再生を開始できるようにする情報のかすかな情報を見つけることができないようですEffect.

または、以下のコメントに基づいて、これは WPF の 3D ですか?もしそうなら、<BevelBitmapEffect>以前のバージョンの WPF に付属していたものを模倣するコード ライブラリを再作成するためのコード ライブラリはありますか?

4

2 に答える 2

4

System.Drawing を使用して WPF 効果 (Bevel など、以前は存在していたもの) などを作成する方法を示す、DevX に関する Rod Stephens による素晴らしい記事があります。記事を表示するには登録が必要ですが、http://www.devx.com/DevXNet/Article/45039にあります。ソースコードもダウンロード可能。

于 2010-09-25T03:29:06.670 に答える
3

ベベルを作成するには、各ピクセルのエッジからの距離を知る必要があります (アルファ = 0 になるまですべての方向を検索します)。これから、法線を計算してシェーディングできます(Silverlight の例を参照)。あなたが言及したように、ベベルに関するコンテンツはあまりありませんが、シェーディングが似ているバンプ マッピング/法線マッピングを検索すると、いくつかの優れたリソースがあります。特に、このスレッドには、事前に計算された法線マップを使用した Silverlight の例があります。

ハードウェアですべてを行うには、理想的にはマルチパス シェーダーを使用します。WPF の組み込み効果はマルチパスですが、独自の効果を作成することはできません。この制限を回避するには:

  • 複数のシェーダーを作成し、要素を複数のコントロールにネストして、それぞれに異なる効果を適用することができます。
  • 命令数を増やすために、WPF 4.0 を対象とし、ピクセル シェーダー 3.0 を使用します。これはハードウェア要件が高すぎる可能性があり、PS 3.0 のソフトウェア フォールバックはありません。
  • 一部またはすべての手順をソフトウェアで実行します。

これらのいずれかを実行しなくても、距離を見つけるために必要なループによって命令カウントが急速に増加するため、命令制限に達する前に 3 または 4 ピクセルのベベルを実行できれば幸運です。

新しいサンプル

ダウンロードします。PixelShader 3.0 を使用した例を次に示します。1 つのシェーダーを使用してエッジまでの距離 (高さ) を検出し、別のシェーダー ( nvidia phong シェーダーに基づく) を使用してそれをシェーディングします。ベベル プロファイルは、コードを使用して入力の高さを調整することによって作成されるか、特別なテクスチャを提供することによってカスタム プロファイルを使用できます。他にも追加する機能がいくつかありますが、プロパティをアニメーション化するのに十分なほど簡単にパフォーマンスが向上するようです。コメントが不足していますが、必要に応じて部分を説明できます。

于 2010-09-22T00:50:38.837 に答える