問題タブ [pixel-shader]
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.
hlsl - HLSL でのシェーダー リソースの使用 (ポート DX9->DX10)
DX9 ボリューム レンダラーを DX10 バージョンに移植しようとしています。現在、次のエラーで立ち往生しています:
D3D10: エラー: ID3D10Device::DrawIndexed: シェーダー コードで宣言されたビューの次元が、ピクセル シェーダー ユニットのスロット 0 にバインドされたビュー タイプと一致しません。シェーダーが実際にビューを使用する場合、これは無効です (たとえば、シェーダー コードの分岐が原因でスキップされません)。[実行エラー #354: DEVICE_DRAW_VIEW_DIMENSION_MISMATCH]
私の推測では、2D および/または 3D テクスチャ (シェーダー リソース) を正しい方法でシェーダーに送信していません。または、正しい (dx10) 方法で使用しないでください。DX9 コードは次のようなものでした (この質問のために単純化されています)。
HRESULT 時間; int nVertexShaderIndex = 0;
実際のデータを含む 3D ボリューム テクスチャも同様の方法で送信されます。対応するピクセル シェーダー コード:
DX10 では、一部のシェーダー コードを単純化できます (私が理解している限り)。空のテクスチャを作成し、このテクスチャを map()/unmap() で塗りつぶします。次に、それをシェーダー リソースとして PS にバインドします。C++ とシェーダー コードは次のようになります。
シェーダーにバインド:
シェーダーで使用:
このコードによってエラーが発生したというのは、経験に基づいた推測に過ぎないことに注意してください。上記のコードが正しいと思われる場合は、そのように返信してください (コメントで)。その場合、解決策を見つけるための新しい方向性が評価されます。
direct3d - direct3dアルファブレンドおよびピクセルシェーダー
2Dシーン、レンダリングターゲットとして設定された2つのテクスチャ、および頂点バッファがあります。
最初のテクスチャはコントラスト/明るさのピクセルシェーダーによってフィルターで除外され、2番目のテクスチャはメニューとして機能します。同じシェーダーで処理するのは望ましくありませんが、最初のテクスチャとアルファブレンドする必要があります。
データは常に最初のものに供給されますが、2番目のものを変更するとフェードアウト効果のように見える明るさ/コントラストの極端な値に到達し、非常に極端なものではまったく再描画を停止するまで、すべてが正常に実行されます。
AlphaBlendnableを無効にすると修正されますが、アルファブレンディングが失われます...ピクセルシェーダーを適用する前にバッファーをクリーンアップする方法はありますか?助けていただければ幸いです。
ピクセルシェーダーコード:
レンダリングコード
pixel-shader - フラグメントの行と列のインデックス、HLSL シェーダー
HLSL (DX11) フラグメント シェーダーで現在のフラグメントの行と列を取得できますか?
opengl - OpenGL/OpenCL で高速化されたラインごとのテクスチャ処理
動的に生成されたテクスチャに対して実行したいレンダリング手順があります。
このアルゴリズムは、行を独立して並列に操作できます。行ごとに、アルゴリズムは左から右の順序で各ピクセルにアクセスし、その場で変更します (それが役立つ場合は、個別の出力バッファーは必要ありません)。各パスは、各行の先頭でリセットする必要がある状態変数を使用し、列をトラバースするときに保持する必要があります。
これを行うために、OpenGL シェーダーや OpenCL などをセットアップできますか? コード付きの最小限の例を提供してください。
c# - 画像処理 C#
画像が単色かどうかを確認する機能があります。
しかし、このアルゴリズムは大きな画像では遅くなります。ピクセル シェーダーと GPU を使用してこれを行う方法を知っている人はいますか?
delphi - FireMonkey のピクセル シェーダー モデル > 2.0
私の主な質問から始めます:
FireMonkey アプリケーションでピクセル シェーダー モデル 3、4、または 5 を使用できますか?
FireMonkey プログラムでピクセル シェーダを動的に作成できるようにしたいと考えています。そのために、DirectX SDK に付属の fxc.exe を使用してピクセル シェーダーをコンパイルし、コンパイルしたコードを TShaderFilter の子孫にロードします。それは問題なく動作します (私がどのように行うかに興味がある場合はお知らせください)。
ps_2_0
ただし、ターゲット プロファイルとしてコンパイルした場合にのみ、動作させることができます。
現在、シェーダー モデル 2.0 の制限に直面しています。たとえば、ループはコンパイラによってアンロールされるように見え、レベル 2 シェーダーで使用できる命令の最大数があります。そのため、可能性の数はかなり限られています。
例:
以下のシェーダー コードは、マンデルブロ フラクタルを作成します。設定Iterations
が高すぎると、コンパイルされません。エラーメッセージ:
error X5608: Compiled shader code uses too many arithmetic instruction slots (78). Max. allowed by the target (ps_2_0) is 64.
シェーダー モデル ps_3_0 を使用すると、より多くの反復でコンパイルできますが、コンパイルされたシェーダーは FireMonkey では機能しないようです。エラー メッセージは表示されません。その結果、赤い画像が表示されます。
これを回避する方法を知っている人はいますか、それとも FireMonkey は私のグラフィック カードの可能性を最大限に活用できないのでしょうか?
FireMonkey の最小要件はシェーダー レベル 2.0 のグラフィック カードであることがわかりましたが、それがシェーダー レベル 3 以上を使用できないことを意味するかどうかは明確ではありません。
c++ - ピクセル形式の変換はどちらが速いですか? ピクセル シェーダーか計算シェーダーか、それとも OpenCL か?
フレームを YUV420p 形式 (またはそのような形式) から ABGR 形式にオンザフライで変換し、結果のフレームをビデオ メモリにテクスチャとして配置したいと考えています。
私が今考えることができる2つの方法があります:
- 各チャンネルをソース テクスチャにして、別のテクスチャにレンダリングします。
- 計算シェーダーで「通常どおり」実行します。
GPUのルールがよくわかりません。私のカードのように、720 個のシェーダー コア、36 個のテクスチャ ユニット、および 16 個の出力ユニットがあります。各サイクル内で、最大 40 のテクスチャをサンプリングして 16 ピクセルを出力できる一方で、720 のシェーダー操作を実行できるということですか? したがって、方法 1 を使用すると、ピクセルごとに 2 つまたは 3 つの操作しか使用しない場合でも、16 ピクセルの出力に制限されますか? 方法 2 を使用すると、1 ピクセルを 45 サイクル以内に変換できれば、方法 1 よりも高速になるということですか?
3d - HLSL のベベル効果
HLSL でフォトショップのようなベベル効果を作ろうとしています。
難しいのは、最も近いエッジ (アルファ = 0) からポイントまでの距離を見つけること
です。
ベスト、
SW
graphics - 互いに覆っている透明なオブジェクト
アカデミックプロジェクトでは、ビルボードを最初から描画するためのコードを作成しようとしています。今、私はそれらを半透明にする段階にあります。私はそれらを背景に対して見栄えよくすることができましたが、それでも次の写真のように、透明にする必要のあるコーナーでお互いを覆っている可能性があります。
何が間違っているのかわかりません。これは私が看板を描くために使用しているエフェクトファイルです。頂点シェーダーに関連する部分は省略しましたが、現時点では関係ないと思います。
TextureとMaskTextureという名前の2つのテクスチャがあり、後者はグレースケールです。ビルボードは、ほとんどの場合、同じ頂点バッファーにありGraphicsDevice.DrawIndexedPrimitives()
、XNAからの1回の呼び出しで描画されます。
私はすべてを正しくやっていないと感じています。
pixel-shader - ピクセルシェーダーは実際に何をしますか?
私はグラフィックプログラミングに比較的慣れていません。本を読んだり、チュートリアルをスキャンしたりしているので、これがばかげた質問だと思われる場合はご容赦ください。
私はdirectx11の基本を稼働させており、今は楽しみたいと思っています。当然のことながら、私はシェーダーパイプラインを頻繁に読んでいて、すでに魅了されています。リソースを無駄にすることなく、60分の1秒ごとに数万回実行するのに十分効率的でなければならない単純で小さなコードを書くというアイデアは、続行して混乱させる前に、概念を理解することを急いでいます。物事の。私が問題を抱えているのは、ピクセルシェーダーが実際に何をしているのかを把握することです。
頂点シェーダーは簡単に理解できます。オブジェクトの頂点を、位置やテクスチャ座標などのオブジェクトに関する情報を関連付ける均一なデータ構造に編成し、各頂点をシェーダーに渡して、変換マトリックスを使用して3Dから2Dに変換します。 。私がそれを理解している限り、私はそれをコーディングする方法を理解することができます。
しかし、ピクセルシェーダーは取得できません。私が得たのは、頂点シェーダーの出力がピクセルシェーダーの入力であるということです。それでは、ピクセルシェーダーにポリゴンの頂点の2D座標を渡すだけではないでしょうか。私が理解するようになったのは、ピクセルシェーダーが個々のピクセルを受け取り、それらに対して計算を実行して、色や照明などを決定することです。しかし、それが本当なら、どのピクセルですか?画面全体ですか、それとも変換された2Dポリゴン内にあるピクセルだけですか?
または私は何かを完全に誤解しましたか?