とっちゃん@nyanco! です。
今回は、DaVinci Resolveで白目と黒目のオブジェクトで構成された「目」を、数式(Expression)を使って瞬きしているように見せる手順を解説します。
本記事はManusちゃんが書いたものを自分なりに分かりやすく加筆訂正してますにゃ〜
概要
瞬きは「目を開いている状態」が長く、「閉じる動作」が一瞬で終わる非対称な動きであるため、単純なsin()関数をそのまま使うのではなく、sin()関数を加工してパルス状の動きを作り出します。
このアニメーションは、目のオブジェクトに接続したTransformノードのY Scaleパラメータを制御することで実現します。
1. 瞬きアニメーションの基本設定
瞬きは、目の縦方向のスケール(Y Scale)を1.0(開いている)から0.0(閉じている)に変化させることで表現します。
1.1. ノード構成の準備
瞬きさせたい目のオブジェクト(白目と黒目をMergeノードでまとめたものなど)の後に、Transformノード(Xf)を接続します。
ノード構成: 目のオブジェクト -> Transform (Xf) -> ...
1.2. Expressionの適用
TransformノードのSizeパラメータのロックを外し、Y Scale(縦方向のスケール)にExpressionを適用します。
1.Transformノードを選択し、インスペクタパネルを表示します。
2.Sizeパラメータの右にあるロックアイコンをクリックして、XとYの連動を解除します。
3.Y Scaleパラメータの値を右クリックし、メニューからExpressionを選択します。
2. 数式による瞬きアニメーションの制御
瞬きは「開いている状態(1.0)」が長く、「閉じている状態(0.0)」が一瞬であるという特徴を、sin()関数を加工して再現します。
2.1. sin()関数を応用した瞬きExpression
以下のExpressionをY Scaleに入力します。
\text{Y Scale} = 1 - \text{pow}(\text{abs}(\sin(\text{time} \times \text{Speed})), \text{Sharpness})
Expressionの入力例:
1 - pow(abs(sin(time * 0.1)), 20)
| Expressionの要素 | 意味 | 調整のポイント |
| time * 0.1 | 瞬きの周期(速度)を制御します。 | 0.1 の値を小さくすると、瞬き間隔が長くなります。 |
| pow(…, 20) | 瞬きの鋭さ(パルス波の鋭さ)を制御します。 | 20 の値を大きくすると、瞬きが一瞬で終わるようになります。 |
| abs(sin(…)) | 値を常に正(0から1)に保ち、周期的な動きを作ります。 | – |
| 1 – … | 値を反転させます。通常時(sinが0に近い時)は1.0(開いている)、瞬き時(sinが1に近い時)は0.0(閉じている)に近づきます。 | – |
2.2. 瞬きアニメーションの調整
| 目的 | 調整するExpressionの部分 | 調整方法 |
| 瞬き間隔を長くする | time * 0.1 の 0.1 | 値を小さくします(例: 0.05)。 |
| 瞬きを一瞬で終わらせる | pow(…, 20) の 20 | 値を大きくします(例: 30)。 |
| 瞬きを少しゆっくりにする | pow(…, 20) の 20 | 値を小さくします(例: 10)。 |
3. 瞬きをより制御しやすくするExpression(応用)
sin()関数は自然な動きを作りますが、瞬きが起こるタイミングをフレーム単位で厳密に制御したい場合は、timeと%(剰余)演算子、そして条件分岐のiif()を組み合わせる方法がより適しています。
3.1. timeとiif()を使った瞬きExpression
以下のExpressionをY Scaleに入力します。この例では「100フレームに1回、5フレームかけて瞬き」を行います。
iif(time % 100 < 5, 1 - (time % 100) / 5, 1)
| Expressionの要素 | 意味 | 調整のポイント |
| time % 100 | 瞬き周期(100フレームごとにリセットされるカウンター)。 | 100 の値を大きくすると、瞬き間隔が長くなります。 |
| < 5 | 瞬き時間(カウンターが5未満のときだけ瞬きを実行)。 | 5 の値を小さくすると、瞬きが速くなります。 |
| 1 – (time % 100) / 5 | 瞬き中のY Scaleの変化(1.0から0.0へ)。 | – |
| 1 | 瞬き以外の時間(目を開いている状態)。 | – |
3.2. 瞬きアニメーションの確認
1.Transformノードをビューアに表示し(2キー)、アニメーションを再生します。
2.目のオブジェクトが、縦方向に周期的にスケールダウン(瞬き)していることを確認できます。
瞬きアニメーション時の位置ズレ解消(Pivot調整)
瞬きアニメーションで目が上下に激しく動いてしまう現象は、TransformノードのPivot(ピボット)が、オブジェクトの中心と一致していないために起こります。Fusionでは、スケール(SizeやY Scale)の操作は、このPivotを基準に行われます 。このガイドでは、Pivotを目の中心に正確に合わせることで、瞬きをその場で行うように修正する手順を解説します。
1. 問題の原因:PivotとCenterの違い
| パラメータ | 役割 | デフォルト値 | 瞬きアニメーションでの影響 |
| Center | オブジェクトの位置を制御 | 0.5, 0.5 | オブジェクト全体を移動させます。 |
| Pivot | スケールや回転の基準点を制御 | 0.5, 0.5 | スケール操作時、PivotがCenterから離れていると、オブジェクトがPivotに向かって縮小・拡大するため、位置がズレて見えます。 |
目のオブジェクトが画面上部にある場合、デフォルトのPivot (0.5, 0.5、画面中央) から遠いため、Y Scaleを操作するとPivotに向かって激しく動いてしまうのです。
PivotとはAdobe IllustratorやPhotoshopでいうところの「基準点(アンカーポイント)」と概念的に非常に近いイメージですにゃ〜
2. Pivotを目の中心に合わせる手順
瞬きアニメーションのExpressionが適用されているTransformノード(Xf)で以下の操作を行います。
2.1. 目のCenter座標の確認
まず、目のオブジェクトが現在どこに配置されているかを確認します。1.Transformノードを選択し、インスペクタパネルのCenterパラメータを確認します。
•例として、目が画面上部にあり、Centerが X: 0.5, Y: 0.75 に設定されているとします。
2.2. PivotへのCenter座標のコピー
PivotをCenterと同じ座標に設定することで、スケールの基準点を目の中心に移動させます。
1.Transformノードを選択したまま、インスペクタパネルのPivotパラメータを探します。
2.PivotのXとYの値を、CenterのXとYの値と同じにします。
•例の場合、Pivotを X: 0.5, Y: 0.75 に設定します。
2.3. ビューアでの確認(推奨)
FusionビューアでTransformノードを表示し、以下の手順でPivotが目の中心に移動したかを確認できます。
1.ビューアの左上にあるTransformツールのアイコン(四角の中に矢印があるアイコン)をクリックします。
2.ビューア上に、オブジェクトの中心を示すCenterの十字と、スケール・回転の基準点を示すPivotの小さな円が表示されます。
3.Pivotの円が、目のオブジェクトの中心に重なっていることを確認します。
2.4. アニメーションの確認
この状態でアニメーションを再生すると、目がその場に留まったまま、縦方向にスケールダウン(瞬き)するようになり、位置のズレが解消されます。
3. 補足:CenterとPivotを常に連動させる方法(応用)
CenterとPivotの値を手動で合わせるのが面倒な場合は、Expressionを使って常に連動させることも可能です。
1.Transformノードを選択します。
2.PivotのXパラメータを右クリックし、Expressionを選択します。
3.Expressionに Center.X と入力します。
4.PivotのYパラメータを右クリックし、Expressionを選択します。
5.Expressionに Center.Y と入力します。
これにより、今後Centerの値を変更して目の位置を動かしても、Pivotが自動的に追従するため、瞬きが常に目の中心を基準に行われるようになります。
参考文献
[1] Noah Hähnel. “Blackmagic Fusion Simple Expressions-Cookbook + Tutorial”.
おわりに
本記事がどなたかの参考になれば幸いです。
今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧



コメント