ZDefocus 番外編
max値についてです。
sizeは何回かで説明したようにボケの大きさではありましたが、ではmaxは?maxは、そのまんま、最大ボケ幅を示していて、リミッターみたいなモノになっています。
カメラはレンズの焦点距離と、フォーカスまでの距離、あとfilmbackのサイズとF値によってボケ度合いが決まります。どの距離のとき、どれくらいボケて、その距離のとき、それぐらいボケるみたいな感じで。また、そのボケの最大値も 焦点距離とF値から算出出来ます。
また、話をnukeにもどして、そのフレームでdepth値とsizeの値からしてmaxまで到達しないモノも当然あります。
以上をふまえてmaxにどのような値を入れればいいのかを決めれば良いのですが、入れる数値によって処理速度はどうなの?っていう疑問はあると思います。
検証してみました。
引き続き、ramp 0-1をdepthとして、zdefocusでsize 50とします。
また、max値に200をいれたもの(ZDefocus10)、51をいれたもの(ZDefocus11)を用意しまして、処理させます。両者のレンダリング結果はdifferenceで確かめたところ、ほぼほぼ同じです。
この二つをnukeのpythonのPerformanceTimersというファンクションを用いて、CPUタイムでどれぐらい差があるか確認してみました。
用いたコードは、
で、
となり、
ZDefocus10(max:200) の方がZDefocus11(max:51)よりも2倍近く処理に時間を要したのが確認でしました。
max値もおおきければ、すべてカバー出来るので良い って訳には行かないのが分かります。
PerformanceTimersは吉川辰平さんに教わりました。ありがとうございます。便利です:)