カラーカーブとエクスプレッションで3Dレイヤーをz深度マップで表示する方法を考えました。
原理は、カメラのレイヤー空間に固定された2点の座標を3Dレイヤー空間の座標に変換し、それを元に3Dレイヤーにカラーカーブを適応することでz深度マップを作成します。
以下では、コンポジションに”カメラ 1″と”ヌル 1″を追加し、”ヌル 1″に調整用のエクスプレッション制御スライダを2つ追加、名前をwhite,blackに変更したものを用意した場合のエクスプレッションを示します。whiteとblackの値で、カメラから向かって奥側にしたい色の値を上げておきます。(以下のエクスプレションではwhiteとblackの値が同じときエラーになります。)
z深度表示したい3Dレイヤーに塗り、カラーカーブエフェクトをこの順に適応します。塗りエフェクトを適応するのはカメラに対し3Dレイヤーが正面を向いている場合、そのレイヤーを1色で塗りつぶすためです。
“塗り”エフェクトの”カラー”に
C=thisComp.layer("カメラ 1"); white=thisComp.layer("ヌル 1").effect("white")("スライダ"); black=thisComp.layer("ヌル 1").effect("black")("スライダ"); wc=C.fromWorld(toWorld([0,0,0])); lum=(wc[2]-black)/(white-black); hslToRgb([0,0,lum,1]) |
“カラーカーブ”エフェクトの”元の画像とブレンド”に
C=thisComp.layer("カメラ 1"); n=toWorldVec([0,0,1]); nc=C.toWorldVec([0,0,1]); 0; if(dot(n,nc)==1){100;} |
これらのエクスプレッションで3Dレイヤーがカメラに対し正面を向いている場合、3Dレイヤーが1色で塗りつぶされることになります。
最後に、”カラーカーブ”の”開始点”(色は黒)、”終了点”(白)に
C=thisComp.layer("カメラ 1"); n=toWorldVec([0,0,1]); nc=C.toWorldVec([0,0,1]); value; if(dot(n,nc)!=1){ wwp=C.toWorld([0,0,thisComp.layer("ヌル 1").effect("black")("スライダ")]); //終了点にはここの"black"を"white"に書き換え lwp=fromWorld(wwp); the=Math.acos(dot(n,nc)); len=lwp[2]*Math.tan(Math.PI/2-the); lnc=fromWorldVec(nc); lnc_foot=normalize(foot(lnc)); foot(lwp)+lnc_foot*len } function foot(vec){ return foot=[vec[0],vec[1],0]; } |
以上のようにエクスプレッションに書き込むことで3Dレイヤーがグレースケールのz深度マップのように表示されます。
応用例として
コンポジット編集で被写体深度を入れる、霧のような演出を入れる
コロラマ、トライトーンなどで色付けをしてみる
などが考えられます。また、これらのエクスプレッションはカメラのレイヤー空間に固定された2点に対し3次元的にカラーカーブをかけさせますが、各エクスプレッションのC=(カメラレイヤー)の部分を、たとえばC=(ヌルレイヤー)などに置き換えることでそのヌルレイヤー空間の2点に対しカラーカーブをかけさせるエクスプレッションに変えることもできます。
新着記事 : カラーカーブとエクスプレッションで3Dレイヤーのz深度マップ http://bit.ly/4519wF
新着記事 : カラーカーブとエクスプレッションで3Dレイヤーのz深度マップ http://bit.ly/4519wF
RT @AEUSERS: 新着記事 : カラーカーブとエクスプレッションで3Dレイヤーのz深度マップ http://bit.ly/4519wF
カラーカーブとエクスプレッションで3Dレイヤーのz深度マップ | AEP Project: カラーカーブとエクスプレッションで3Dレイヤーをz深度マップで表示する方法を考えました。 原理は、カメラのレイヤー空間に固定された.. http://bit.ly/36rkV2
AEP Project様・・・僕にはさっぱりですhttp://bit.ly/4519wF
. @Ridger_ @KabkinP 私はよくわからないけど、お二人なら理解できる? AEでZ深度マップつくる方法 http://bit.ly/4vuTMd