問題タブ [hlsl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
silverlight - 背景画像を差し引く HLSL シェーダー
Silverlight 用の HLSL ピクセル シェーダーを使用して、ビデオ イメージから背景イメージを減算しようとしています。私のアルゴリズムが正しく機能していないため、私が使用しているよりも洗練されたアルゴリズムを誰かが提案できますか?
この例を表示するには、Web カメラを搭載したコンピューターが必要です。
- ページhttp://xmldocs.net/alphavideo/background.htmlに移動します
- [記録開始]を押します。
- シーンの外に体を移動し、[背景のキャプチャ] を押します。
- 次に、体をシーンに戻し、スライダーを使用して Toleance 値をシェーダーに合わせます。
graphics - HLSLでレジスタをどのように数えますか?
シェーダー モデル 2.0 では、256 個の定数レジスタを使用できます。私はさまざまなシェーダーを見ていて、単一のレジスタを構成するものを理解しようとしていますか?
たとえば、私のインスタンス化シェーダーでは、次の変数が関数の外側で宣言されています。
いくつのレジスターを消費しましたか? それらをどのように数えますか?
c# - Reflection.Emitの短い形式のオペコードでエラーが発生しました
hlsl
ピクセルシェーダーと非常によく似ていますが、サポートする小さな言語を作成しています。この言語はreflection.emit
、同じ機能を実装する.NETアセンブリを構築するために使用します。私は現在、分岐命令の実装をテストしていますif
が、ユニットテストの1つ(if
内部が大きいif/else
)で次のエラーメッセージが表示されて失敗しました。
System.NotSupportedException:位置:32の不正な1バイトブランチ。要求されたブランチは:132でした。
私の場合、短い形式の指示を使用することで問題を追跡しましたOpCodes.Br_S
。解決策は単純でしたが、私は置き換えましたOpCodes.Br_S
がOpCodes.Br
、この解決策についていくつか質問があります。
このソリューションは、生成されたコードのパフォーマンスに影響を与えますか?
Br_S
シングルバイトを正しく生成したい場合、およびBr
その他の場合はどうすればよいですか?ここでの問題は、ビジターパターンを使用してif
いて、出力する必要があるような分岐命令の場合、Br
またはBr_s
最初に、残りのコードがジャンプするのに1バイト以上必要かどうかを知る方法がないことです。ラベル。私の質問をよりよく説明するために、これは次のステートメントに対して生成するコードです。
私の言語:
IL:
この場合、私は2つの短い形式の命令を使用しble.s
ており、.NETコンパイラと同じようbr.s
にを実装しています。if
ただし、.NETコンパイラは選択することができますが、br.s
場合br
によっては、私の問題は、どのようにして同様のことを実行できるかということです。
Tnks
directx - HLSL:構造体内で配列を使用する
HLSLの奇妙な動作に遭遇しました。次のような構造体に含まれる配列を使用しようとしています(ピクセルシェーダーコード):
コードは論理的に意味がなく、単なるサンプルです。問題は、このコードをコンパイルしようとすると、次のエラーが発生することです(25行目はforループ行です)。
(25,7):エラーX3511:ループの展開を強制しましたが、展開に失敗しました。
ただし、配列を構造体の外に置くと(で宣言するだけfloat a[17]
でshMain
)、すべてが期待どおりに機能します。
私の質問は、構造体を使用しているときに、DirectXが(展開可能な)forループを展開しようとするのはなぜですか?これは文書化された動作ですか?配列を構造体の外に置くことを除いて、利用可能な回避策はありますか?
2010年6月からシェーダーモデル4.0、DirectX10SDKを使用しています。
編集:Something
明確にするために、作業コードを追加していますが、構造体の使用法をプレーン配列
に置き換えるだけです:
このコードはコンパイルされ、期待どおりに機能します。forループの前に属性を追加しても機能[loop]
します。つまり、展開されません(これは正しい動作です)。
wpf - wpfがサポートするTEXCOORD以外のシェーダー入力はありますか
定数レジスタを依存関係プロパティに関連付けたり、ブラシをサンプラーに関連付けたりできることは知っていますが、wpfシェーダーのすべての例で宣言を使用しています
main(float2 uv:TEXCOORD):COLOR
私はHLSLの完全な初心者ですが、TEXCOORD以外のセマンティクスがあることを知っています。それらのいずれかをWPFシェーダーで使用できますか?
同様に、セマンティックCOLOR以外に使用できる有効なリターンはありますか?
または、セマンティクスはユーザーに「リマインダー」するだけで、WPFは、受信したシェーダーを、TEXCOORD入力とCOLOR出力があるかのように実行します(float4またはstruct入力でチョークします)。
c# - XNA でファイルからシェーダーを動的にコンパイルして実行する
ファイルからピクセルシェーダーを動的にコンパイルしてメッシュに適用できるかどうか疑問に思っています。
まず、いくつかの背景情報から始めます。私は、質問にとってそれほど重要ではないデータの範囲に基づいて HLSL ピクセル シェーダーを作成するシステムを持っています。重要なのは、これらのシェーダーがテクニックやパスを使用しないことです。.fx ファイルとして使用することを意図していないためです。
このShaderCompiler.CompileFromFile()
メソッドは、ファイルを正常にコンパイルしてCompiledShader
.
このシェーダーをメッシュに適用することは可能ですか?
各ファイルのエントリポイントを見つけて、.xmlファイルとしてコンパイルできるようにする手法でラップしたくないのでEffect
。
graphics - レンダリングされたUV値の最小値と最大値の取得(Direct3D)
特定のオブジェクトが特定の視点から画面上に描画されたときに生成されるピクセルに割り当てられた最小および最大のUV値を計算する必要があります。たとえば、UVマップされた立方体があり、前面のみが表示されている場合、min(UV)とmax(UV)は、表示されている面のピクセルに割り当てられた最小および最大のUV座標に設定する必要があります。
Direct3D 9シェーダー(および可能な限り最低のシェーダーモデル)を使用してこれを実行し、処理を高速化します。頂点シェーダーは、各入力頂点のUV座標を取得し、それらを変更せずにピクセルシェーダーに渡すのと同じくらい簡単です。一方、ピクセルシェーダーは、頂点シェーダーによって生成された値を取得し、これらを使用して最小および最大のUV値を計算する必要があります。
私が知りたいのは:
- ピクセルシェーダーの呼び出し間で状態(現在の最小値と最大値)を維持するにはどうすればよいですか?
- シェーダーによって生成された最終的な最小値と最大値をプログラムに取り込むにはどうすればよいですか?
HLSLでこれを行う方法はありますか、それとも私は手作業でそれを行うのに行き詰まっていますか?HLSLが機能しない場合、シェーダーを使用せずにこれを行うための最も効率的な方法は何でしょうか。
graphics - HLSL 半透明プラスチック シェーダー
内部に色付きのライトがある白いプラスチック オブジェクトを複製するシェーダーを作成しようとしています。半透明になるシェーダーを使用し、オブジェクトの内部にライトを配置すると、光が透けて見えるようにするか、内部にライトの効果を偽装するシェーダーを配置します。
私が目指している効果は、これらの写真に似たランプシェードを通過する光のようなものです。
理想的には、光の強度と色を制御して、光を脈動させ、いくつかの明るい蛍光色を回転させることができます。
どこから始めればよいかわかりませんが!
私の質問は、そのようなシェーダーを作成できるようにするために研究すべきテクニックを知っている人、または出発点として使用できる同じ/類似のシェーダーの例を持っている人はいますか? または、仕事をするシェーダーを提供したい場合でも
silverlight - 円柱効果を得るための HLSL
Silverlight 4 でアプリケーションを作成する必要があり、シリンダーにラップされたような画像を表示する必要があります。Effects of Silverlight では使用しないので、HLSL コードが必要です。
私は Silverlight の 3D ライブラリでそれを行うつもりはありません。ピクセルを変更するための HLSL コードのみが必要です。
私の画像はこの
ように見える必要があります
ありがとう。
directx - HLSL でのレンダリング深度
こんにちは皆さん、これは簡単な作業のはずですが、何らかの理由でうまくいきません...
シェーダーを使用してシーンの深度を視覚化したいだけです。
深さの値を取得するには (またはそう思った)、ワールド空間内の位置とビュー位置の間の距離を計算します。
そして対応するピクセルシェーダー
白い色しか得られない
そこで、値を深さまで乗算する試行錯誤を開始しました。
対象物までの距離に応じて満足のいく結果が得られます。そのため、オブジェクトに近づくと、値を再度調整する必要があります。
だから何か非常に間違っている...
読んでくれてありがとう!