ZDefocus #1

zdefocusを見直してみる。

zdefocusはデフォルトでfar=0が計算方法(math)として選ばれており、これは無限遠が0としてdepthを扱うことになる。

 

f:id:masahiroteraoka:20170114163410p:plain

 

この方法だと、cgからのレンダリングでアルファでくり抜かれているようなケースに(この場合くり抜かれて抜けているところは無限遠)対応しやすい。

 

f:id:masahiroteraoka:20170114163509p:plain

 

ただし、ボケの掛かり方と調整方法が直感的ではない。また、計算方法としてdirectを選ぶと、focus plane(C)で指定した値から1離れたところがsizeの幅でボケるということがマニュアルに書かれている。つまり、directを選び、focus plane(C)を0に指定し、sizeを1にしておくと、depthの値がそのままボケる幅になる。ただし、ボケ幅の最大値はmaxで指定された値になる。

この場合無限遠に適当な値を入れる必要がある。通常cg等から出力されるdepthだとアルファでくり抜かれている部分は、depthも真っ黒だったりするので、ここに適当な値を入れてやる方がいいと考えている。(実際にはもう少し工夫が必要で後々説明する)

 

今回は計算方法にdirectを用いて色々試してみる。

とりあえず、CheckerBoardに適当な値のdepthを与えて、それを用いてzdefocusで処理してみる。

 

f:id:masahiroteraoka:20170114163927p:plain   f:id:masahiroteraoka:20170114164411p:plain

 

これだと、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

すべて同等になるはずである。確かめてみる。

 

f:id:masahiroteraoka:20170114170841p:plain   f:id:masahiroteraoka:20170114171525p:plain

 

と結果同じであった。

一応、zdefocusの処理に掛かる時間も確認してみたが、4つともほぼ同じ処理時間であった。ボケ幅が同じなので、処理時間も同じなのであろう。

ちなみに、本当に同じ値か比べるために、ボケ幅40のと比べた見た画像が下。

上の4つの結果が同じであるってのが何となく分かってもらえると思う。mergeのdifferenceでもくらべてみたが、結果黒だったので、まぁ同じなんであろう。

 

f:id:masahiroteraoka:20170114172044p:plain

 

しかも、今回、どれも50という比較的大きな大きさのボケを与えているが、基本的に、処理時間はscanlineがすーっと動く感じで、どれも2,3秒程度。
大きな値が直接的に、あの鈍重な印象のzdefocusを生み出しているっていう感じはしなかった。

では、何が? 次回、zdefocusの遅くなる理由をさぐってみようと思う。