問題タブ [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.
c# - HLSL 計算 - ピクセルを順番に処理しますか?
たとえば、GPU を使用してフィボナッチ数列の最初の 100 万項を計算したいとします。(これは 32 ビット データ型の精度制限を超えることを認識しています - 例として使用しただけです)
40 個のシェーダー/ストリーム プロセッサを備えた GPU と、参考書を使用してごまかすと、100 万個の項を 250,000 ストリップの 40 ブロックに分割し、各シェーダーに 2 つの開始値をシードすることができます。
単位 0: 1,1 (2,3,5,8、何とか何とかを計算)
1号機:25万期
2号機:50万期
...
可能であれば、ピクセルが順番に処理されるようにするにはどうすればよいですか? 入力テクスチャの最初の数ピクセルに値がある場合 (簡単にするために RGBA を使用)
最初の 4 項の準備が整う前に 5 項を計算しないようにするにはどうすればよいですか?
これは複数のパスで実行できることを認識していますが、値が計算されるたびに「準備完了」ビットを設定しますが、それは非常に非効率的であり、GPU でこのタイプの計算を実行する利点が失われます。
OpenCL/CUDA/etc はおそらくこれを行うための優れた方法を提供しますが、私は (私自身の教育のために) これを XNA/HLSL で動作させようとしています。
リンクや例は大歓迎です。
更新/簡素化
あるピクセルの値を使用して隣接するピクセルの値に影響を与えるシェーダーを作成することはできますか?
opengl - GLSL動的インデックス配列
私はDirectX(XNAを使用)をしばらく使用していて、最近OpenGLに切り替えました。私はそれを本当に愛していますが、1つのことが私を苛立たせました。
頂点シェーダーで動的インデックス付けを必要とするものを実装しようとしていますが、これにはSM4.0と同等のものが必要であると言われています。ただし、これはSM 2.0、場合によっては1.0でもDXで機能することを私は知っています。XNAのインスタンス化サンプルは、これを使用してSM2.0のみのカードhttp://create.msdn.com/en-US/education/catalog/sample/mesh_instancingでインスタンス化を行います。
コンパイラは、ifステートメントの巨大なリストにそれを「展開」することはできません。これは、250インスタンスのSM2の命令制限を確実に超えるためです。
それで、DXはOpenGLではできないトリックを実行していますか、OpenGLを操作して同じことを実行できますか、それともOpenGLが公開していないハードウェア機能ですか?
glsl - シェーダーフレームバッファーのリードバック
新しいシェーダーモデルで、ターゲットフレームバッファーからピクセル値を読み戻すサポートがあるかどうか疑問に思いました。これは、描画パイプラインの後の(プログラム不可能な)段階ですでに行われていると思います。これにより、この機能がプログラム可能なパイプラインに追加された可能性があります。
テクスチャにバインドされたフレームバッファに描画してから、このテクスチャをシェーダーに送信できることを認識しています。同じ機能を実現するためのよりエレガントな方法を望んでいました。
linq - LINQ to HLSL プロバイダーを実装しようとしています。良い HLSL チュートリアルはありますか? 具体的には、構文に焦点を当てたもの
HLSL、特に構文について適切な説明を提供する優れたチュートリアルはありますか? レジスタ (s0) を示すサンプルと tex0 を示すサンプルを提示されたとき、私は唖然としました。これらは常に同じですか? MSDN のドキュメントはマニュアルのように読みやすく、従うのは簡単ではありません。
私は HLSL の初心者であり、HLSL 用のカスタム LINQ プロバイダーを実装しようとしています (詳細)。これまでのところ、動作していますが、ほとんどの場合に失敗すると確信しています。
私の Linq プロバイダーは、LINQ クエリを HLSL に変換してコンパイルすることになっています。このクエリを考えると (このシェーダーは 3 つの画像から HDR 画像を作成します):
この HLSL シェーダーになるはずです。
私が今問題を抱えているのは、主にセマンティクス、特に値セマンティクスです (それらを使用した例はあまり見つかりません)。実際の例も非常に役立ちます。そこで使われているシェーダーの種類がわかりません。
c++ - 頂点シェーダーの入力順序
SM 4.0 頂点シェーダーの入力順序は重要ですか?
例えば
に相当
c# - メッシュのちらつきの問題:DirectX HLSL
問題: Managed DirectX 9でHLSL (High Level Shader Language)を使用してメッシュをレンダリングしています。メッシュの複雑さ(頂点と面の数)によっては、ちらつきの問題が発生することがあります。
明らかに、複雑度の高いメッシュはレンダリングに時間がかかるはずであり、ちらつきの量はメッシュの複雑さとともに増加します。ただし、発生するのはメッシュがまったくレンダリングされておらず、メッシュの描画にかかる時間が大幅に短縮されていることです。
Increased Mesh Complexity -> Increased Flickering
コード:
結果:これは私が得た出力です(読みやすくするために上記のコードに含まれていないタイマーを挿入しました):
HLSLコード:これは省略されたHLSLコードです。これは実際のコードではないことに注意してください。構文エラーを掘り下げないでください。実際のコードは非常に似ていることを保証します。
ヘルプ/アイデア/提案をいただければ幸いです。ありがとう!
directx - fx/hlsl シェーダーのドロップダウン UI ウィジェット
HLSL シェーダー (fx 形式) を作成しましたが、列挙型/リスト パラメーターをその UI に追加したいと考えています - ブール フラグのリストのより良い代替手段として。
代わりに:
- [x] 「カスタム マップを使用する」
- [x] 「カスタム マップ アルファを使用」
- [x] 「拡散アルファを使用」
- [x] 「鏡面アルファを使用」
- [x]「通常のアルファを使用」
持ってる:
- ソース: [「カスタム マップを使用する」]
5 つの選択肢すべてと、コード レベルで選択されたアイテムへのインデックス。
「DirectX Standard Annotations and Semantics Reference」では、ListPicker ウィジェットについて言及されていますが、使用方法の例や説明が見つかりません。
質問は次のとおりです。
- シェーダーの UI にドロップダウンのようなカスタム ウィジェットを含めることはできますか?
- それを達成する方法は?
algorithm - DirectX11とpacketoffset
DirectX10 / 11でbool型で「packetoffset」を使用する方法を知っている人はいますか?これをどのように調整する必要があるのかわかりません
silverlight - HLSL色相変更アルゴリズム
スライダーを使用して色相/彩度/明るさを変更するのに役立つSilverlight用のピクセルシェーダーを作成したいと思います。*色相スライダーの値の範囲:[-180、180] *彩度スライダーの値の範囲:[-100、100] *明度スライダーの値の範囲:[-100、100]
彩度と明度の値を操作できるピクセルシェーダーを作成することができました。しかし、色相値を変更するための任意のアルゴリズムを見つけることができます。誰かが私にアルゴリズムを提供できますか?ありがとうございました。
これが私のHLSLコードです:
xna - XNA-頂点ストリーム?
誰かがHLSLとXNAでの複数の頂点ストリームの使用に関する説明またはチュートリアルを提供/指摘してくれますか?GPUによってそれらがどのように保存/アクセスされるか、カスタムシェーダーのストリームの利点または使用法などに興味があります。
インスタンス化されたジオメトリに複数の頂点ストリームを使用する例をいくつか見てきましたが、基になるメカニズムに頭を巻き付けるのに苦労しています。
アップデート
2つのパラメーターを受け入れる頂点シェーダーがある場合(このチュートリアルから借用)
instanceTransform
例から、これをそこからinput
引き出し、別々のストリームから引き出したようです。ただし、この場合、input
ストリームは6つの頂点のリストでありinstanceTransform
、変換行列で構成されるはるかに多数の要素のストリームから取得されます。これは、インスタンス化されたジオメトリに使用されることになっています。
このシェーダーが実行される回数について混乱しています-VertexBuffer0.VertexCount*VertexBuffer1.VertexCountですか?この種の問題は、誰かがそれを理解すると、彼らは自分たちの発見を詳述するよく書かれた文書をコミュニティに送り返すことをわざわざしないということです。
ああ。