ZDefocus #1
zdefocusを見直してみる。
zdefocusはデフォルトでfar=0が計算方法(math)として選ばれており、これは無限遠が0としてdepthを扱うことになる。
この方法だと、cgからのレンダリングでアルファでくり抜かれているようなケースに(この場合くり抜かれて抜けているところは無限遠)対応しやすい。
ただし、ボケの掛かり方と調整方法が直感的ではない。また、計算方法としてdirectを選ぶと、focus plane(C)で指定した値から1離れたところがsizeの幅でボケるということがマニュアルに書かれている。つまり、directを選び、focus plane(C)を0に指定し、sizeを1にしておくと、depthの値がそのままボケる幅になる。ただし、ボケ幅の最大値はmaxで指定された値になる。
この場合無限遠に適当な値を入れる必要がある。通常cg等から出力されるdepthだとアルファでくり抜かれている部分は、depthも真っ黒だったりするので、ここに適当な値を入れてやる方がいいと考えている。(実際にはもう少し工夫が必要で後々説明する)
今回は計算方法にdirectを用いて色々試してみる。
とりあえず、CheckerBoardに適当な値のdepthを与えて、それを用いてzdefocusで処理してみる。
これだと、depth値が50でsizeが1、またfocus plane(C)が0となっている。マニュアルに従うと、focus plane(C)の値からdeph値が1の差があるところでzdefocusのsizeの幅でボケる。つまり、2の差があると、sizeの2倍となる。この場合、sizeが1なので、depthの値がそのままボケ幅になる。要するに、50のボケ幅でボケる。
とすると、
depth値=1,size=50,focus plane(C)=0
depth値=4,size=12.5,focus plane(C)=0
depth値=100,size=1,focus plane(C)=50
すべて同等になるはずである。確かめてみる。
と結果同じであった。
一応、zdefocusの処理に掛かる時間も確認してみたが、4つともほぼ同じ処理時間であった。ボケ幅が同じなので、処理時間も同じなのであろう。
ちなみに、本当に同じ値か比べるために、ボケ幅40のと比べた見た画像が下。
上の4つの結果が同じであるってのが何となく分かってもらえると思う。mergeのdifferenceでもくらべてみたが、結果黒だったので、まぁ同じなんであろう。
しかも、今回、どれも50という比較的大きな大きさのボケを与えているが、基本的に、処理時間はscanlineがすーっと動く感じで、どれも2,3秒程度。
大きな値が直接的に、あの鈍重な印象のzdefocusを生み出しているっていう感じはしなかった。
では、何が? 次回、zdefocusの遅くなる理由をさぐってみようと思う。