質問です。DirectX 9.0 (SDK October 2004) を使っています。
また、エフェクトでは HLSL を使い、ピクセルシェーダ 2.0 でコンパイルしています。

http://souko2.sakura.ne.jp/temp/mono.jpg

こんな感じに、ある 3D のシーンの一部の矩形を、モノクロ化しようとしていますが、
これの実現方法が分かりません…。

ちょっと説明しにくいのですが、球体などを描いた後、
矩形を 2D 物体として描画し、その際に矩形をモノクロ化しようと思います。
式としては、描画先の色を d、また、rgb 成分を [r][g][b] と表記するとして、

finalColor[r] = 0.1145f * d[r] + 0.5886f * d[g] + 0.2989f * d[b];
finalColor[g] = 0.1145f * d[r] + 0.5886f * d[g] + 0.2989f * d[b];
finalColor[b] = 0.1145f * d[r] + 0.5886f * d[g] + 0.2989f * d[b];

となります。
つまり、例えば最終色の [r] 成分を求めるために、描画先の [r][g][b] 成分が必要になりますが、
ピクセルシェーダでは描画先の色を使えないし、ブレンディング処理で D3DRS_BLENDOP を調べても、このような式を扱うオペランドは見つかりませんでした。
ここでつまってしまいました。

●制限
1.矩形の大きさや数は、毎フレーム変化する可能性があるので、その都度ステンシルバッファを作って…というのはできるだけ避けたい
(ステンシルバッファでどうにかなる問題かどうか分からないですが)
2.処理速度の都合上、シーンを一度テクスチャに描画し、ロックしてピクセルの色を取得し…というのも避けたい
(シーンの描画は直接バックバッファに行いたい)

制限2を破るしかないでしょうか?
何かいい方法があればお教えいただけないでしょうか。よろしくお願いします。