■今更ながら、げーはな氏の日記を読んでPS2輪郭抽出ネタは終結。
RGB(ID,255-ID,0)でクランプ対策も考えていたのに、カラークランプはOFFにできることに今更気づく…。

1,作業バッファに転送、CLUT[ID]=RGB(ID,ID,0)
2,上下方向にずらして減算、CLUT[ID]=RGB(ID,0,0)
3,左右方向にずらして減算、CLUT[ID]=RGB(0,ID,0)
4,RGB(0,0,0)で変調

4パスで256ID。素晴らしい。

作業バッファが16bitでもB成分にIDの上位2bitを2層化して入れてやれば128IDまで使えるかな。

と、だいぶ更新が滞っていましたが、無事(というかギリギリ)単位も取れて卒業も確定し、
卒論も終わりましたので、近日リニューアル予定。
レンダリングネタはもちろん、アプリケーションレベルの話題とかも含めて、やっていけたらなと思っています。

■スクリーンショットを見たらグレアフィルタまでかかってる。ポスト処理にこれだけフィルレートを消費できるとは考えにくい。
となると輪郭線も太い気がするし、やはり4分の1に縮小してからフィルタ処理しているのだろうか。
フィルの量は4分の1になって11パスぐらいは余裕でこなせそうだし、ワーク領域が4倍取れるので選択肢の幅が広がるけど、線の品質が維持できるかが問題。
グレアは単色っぽいのでIDの0-15程度を予約しておいて、ワーク転送時に分離しているのだろうか。
グレア処理自体は2枚のバッファ間をバイリニアフィルタで4ピクセル平均取って何回か転送を繰り返すだけなので問題はない。
ぼかした後、輝度にしたがってCLUTで色を付けるだけ。

■5パスで15のID,11パスで256のIDは使えそうだけど、さすがに11回のブルシーン塗りつぶしは負荷高そうな感じ。かといってIDが15個では輪郭が破綻しまくりそう。11パスの場合は以下のような感じ
・フレームのα1-4bitをワーク(ダブルバッファリングをしていると仮定してプライマリのαを作業用に使う)の1-4bitに転送
・ワークのα1-4bitをワークの5-8bitに上方向に1ピクセルずらして転送
・1-4bitと5-8bitのビットが異なる時、フレームの1bit目に1を書き込む
・ワークのα1-4bitをワークの5-8bitに左方向に1ピクセルずらして転送
・1-4bitと5-8bitのビットが異なる時、フレームの2bit目に1を書き込む
・フレームのα5-8bitをワークの1-4bitに転送
・ワークのα1-4bitをワークの5-8bitに上方向に1ピクセルずらして転送
・1-4bitと5-8bitのビットが異なる時、フレームの3bit目に1を書き込む
・ワークのα1-4bitをワークの5-8bitに左方向に1ピクセルずらして転送
・1-4bitと5-8bitのビットが異なる時、フレームの4bit目に1を書き込む
・フレームの1bit目と3bit目両方が1、もしくは2bit目と4bit目両方が1の時、αを0x20、それ以外のαを0x80としてバイリニアフィルタをかけながらモジュレート
条件判定はすべてCLUTを介して行う。例えば1-4bitと5-8bitのビットが異なる時フレームの1bit目に1を書き込む場合、CLUTの1-4bitと5-8bitが一致するインデックスのαのみ0、それ以外は1にしておく。
あとはマスクで書き込むビットを制御する。

■転送先αテストがない…というか貧弱すぎ、ZもON,OFFだけ…。となると下位4bitに描いて、上位4bitにずらしたのを描いて、合わせて8bitでCLUT使って無理やり比較するしかないのか…。 フラグもいるから実質IDは15個。うーん、かなり厳しい感じ、どうりで他がやらないわけだ。 CLUTにもいろいろ仕掛けがいりそうな感じだし、さすがに秘密なだけはある。