Cg?を使用してフラグメント(ピクセル)シェーダのピクセル座標を変更することは可能ですか?このような機能が第2世代または第3世代のシェーダで利用できるようになったと確信していますが、私はどのようなプロファイルが正確か、それを行う方法がわかりません。Cgフラグメントシェーダのピクセル位置を変更/置き換える方法は?
1
A
答えて
1
いいえ、できません。
フラグメントシェーダで変更できる座標はZで、Zバッファに入ります。それにパフォーマンスにも影響があります(階層的Zなど)。
XおよびYの位置は、フラグメントシェーダが実行される前に設定されます(Rasterizer)。典型的なラスタライザは、実際には少なくとも2x2のピクセルのチャンクを生成し、ハードウェアは実際にはピクセルを個別に処理するわけではありません。
このタイプの機能を模倣する傾向がある人は、必要以上に多くのピクセルを生成し、余分なピクセルを破棄することが多い傾向があります。
聞いたことがあるのはテッセレーションですこれはフラグメントシェーダの一部として行われるのではなく、パイプラインの別の部分であり、追加のジオメトリを生成できます。
最終的に、どのようなテクニックを使用できるかは、達成しようとしているものによって決まります。しかし、XとYのブランケット修正は、ハードウェアがそれを行うことができないため、Cg、OpenGL、またはDirectXの中のさまざまなAPIによってサポートされたことは一度もありません。
1
リアルタイムでビットマップの実際のピクセルを変更することはできませんが、U/V座標マッピングを置き換えることができ、各ピクセルがマップされるポイントが変更されます。
赤と緑の勾配としてUVマッピングを想像してください。赤はX位置マッピングを表し、緑はY位置マッピングを表す。これらの座標にパーリンノイズなどを乗算すると、マッピングがオフセットされるため、ピクセルも同様にオフセットされます。
関連する問題
- 1. 変更位置
OKどうやってCGでzを修正できますか? Displacementは私が推測する正しい言葉です...私はどのようにzの位置を渡してそれを変更するのですか? –
DEPTHセマンティック(浮動小数点型)でZを変更できます。 "[,,,]デフォルト値はラスタライザから得られた補間された深さです。意味的に、このデフォルト値はフラグメントプログラムの実行開始時に出力にコピーされます。 – Bahbar