Cgを使用してフラグメント(ピクセル)シェーダーのピクセル座標を変更することは可能ですか?このような機能は第2/3世代のシェーダーで利用できるようになったと思いますが、正確にどのプロファイルを使用するのか、またはその方法はわかりません。
2 に答える
いいえ、できません。
フラグメントシェーダーで変更できる唯一の座標はZであり、Zバッファーに入ります。そして、それでもいくつかの最適化(階層Zなど)を無効にするため、パフォーマンスに影響があります。
XとYの位置は、フラグメントシェーダーが実行される前に設定されます(Rasterizerで)。一般的なラスタライザーは、実際には少なくとも2x2のピクセルのチャンクを生成し、ハードウェアは実際には、ブレンド段階に至るまで、ピクセルを個別に処理しません。
そのタイプの機能を模倣するために何人かの人々がする傾向があるのは、必要以上のピクセルを生成し、無関係なピクセルを破棄することです。
あなたが聞いたことがある機能は、しかし、テッセレーションかもしれません。これはフラグメントシェーダーの一部としては実行されませんが、パイプラインの別の部分であり、追加のジオメトリを生成できます。
最終的に、使用できる手法は、達成しようとしていることによって異なります。しかし、XとYの包括的な変更は、ハードウェアでは実行できないため、Cg、OpenGL、DirectXなどのさまざまなAPIでサポートされたことはありません。
ビットマップの実際のピクセルをリアルタイムで変更することはできませんが、U / V座標マッピングを置き換えることはできます。これにより、各ピクセルがマップされるポイントが変更されます。
UVマッピングを赤と緑のグラデーションとして想像してください。赤はX位置マッピングを表し、緑はY位置マッピングを表します。これらの座標に、たとえばパーリンノイズを掛けると、マッピングがオフセットされるため、ピクセルもオフセットされます。