胸揺れ
概要
画像の一部分をオブジェクト移動に合わせて柔らかく揺らすフィルター
詳細説明
Shake_PPP(胸揺れ)
Shake_PPPは、AviUtl2の画像オブジェクトの一部を、移動に少し遅れて揺れる柔らかい領域として変形するフィルタープラグインです。
画像上で「動かす範囲」と「最も大きく動く範囲」をベジェ曲線で指定し、画像オブジェクトのX/Y移動から揺れを自動生成します。胸、髪、衣服、柔らかい装飾など、画像の一部分だけを揺らす用途を想定しています。
重要
現在は開発中です。仕様や保存形式が変更される可能性があります。重要なプロジェクトでは、編集前にバックアップを作成してください。
関連リンク
動作の仕組み
- 外周:変形させる領域の境界です。外周の外側は動きません。
- 重心・頂点範囲:最も大きく動く内側の領域です。
- 外周から重心範囲までの間は、変位量が滑らかにつながるように補間されます。
- AviUtl2から取得した画像オブジェクトのX/Y座標をフレームごとに比較し、移動方向と移動量から遅れ、行き過ぎ、戻りを計算します。
- 形状セット1と2を使うと、1つの画像内に独立した変形範囲を2組設定できます。
必要環境
- Windows 64-bit
- AviUtl2(SDK v2.13の画像パラメータ取得APIに対応したバージョン)
- 画像オブジェクト
現在の実装は画像オブジェクトのX/Y移動を対象とします。回転、拡大率、中心座標の変化は揺れの入力として使用しません。
インストール
配布されたShake_PPP.auf2を次の場所へ配置します。
C:\ProgramData\aviutl2\Plugin\Shake_PPP\Shake_PPP.auf2
AviUtl2を起動中の場合は、終了してからファイルを更新してください。配置後にAviUtl2を起動し、画像オブジェクトへ胸揺れフィルターを追加します。
最短の設定手順
- タイムラインへ画像オブジェクトを配置します。
- 画像オブジェクトへ
胸揺れフィルターを追加します。 - 対象画像がプレビューに表示されているフレームへ再生位置を移動します。
- フィルターの
設定を押します。 形状セット1と外周を編集を選び、揺らしたい部分の外側を左クリックで囲みます。- 最初の頂点をダブルクリックして外周を閉じます。
重心・頂点範囲を編集を選び、最も大きく動かしたい内側の範囲を囲んで閉じます。固定量の変形プレビューまたは動作プレビューで形状を確認します。- 設定画面を閉じて形状を保存します。
- AviUtl2の標準描画などで画像オブジェクトのX/Yを動かし、再生しながら揺れ設定を調整します。
外周と重心範囲は、どちらも閉曲線にする必要があります。
形状設定画面
ツールバー
| 項目 | 内容 |
|---|---|
| 形状セット1 / 2 | 編集・プレビューする変形範囲を切り替えます。2組の形状は独立して保存されます。 |
| 外周を編集 | 変形領域の外側を編集します。 |
| 重心・頂点範囲を編集 | 最も大きく動く内側の範囲を編集します。 |
| 動作プレビュー | 左ドラッグの画像移動を入力として、戻りを含む揺れを確認します。 |
| 鋭角頂点 | 選択中の頂点、またはこれから追加する頂点を鋭角にします。 |
| 滑らかな頂点 | 選択中の頂点、またはこれから追加する頂点を滑らかなベジェ接続にします。 |
| 元画像 | 変形前の画像を表示します。 |
| 固定量の変形プレビュー | 一定量を与えた変形結果を表示します。形状確認用で、実際の揺れ量とは異なります。 |
| 全体表示 | 画像全体が画面内に収まる倍率と位置へ戻します。 |
マウス操作
| 操作 | 動作 |
|---|---|
| 空所を左クリック | 現在選択している種類の頂点を追加します。 |
| 頂点を左ドラッグ | 頂点を移動します。 |
| 頂点を右クリック | 頂点を削除します。 |
| 最初の頂点をダブルクリック | 曲線を閉じます。 |
| 最後の頂点をダブルクリック | 曲線を開きます。 |
| 最後の頂点を最初の頂点へドラッグ | 最後の重複頂点を取り除き、曲線を閉じます。 |
| 閉じている接続線を右クリック | 曲線を開きます。 |
| 空所を右ドラッグ | 揺れを発生させず、画像の表示位置だけを移動します。 |
| 中ボタンドラッグ | 画像の表示位置を移動します。 |
| マウスホイール | 表示を拡大・縮小します。 |
| 動作プレビュー中に左ドラッグ | 画像を移動させ、その動きで変形範囲を揺らします。 |
閉じた曲線の先頭は二重の四角い輪郭で表示されます。閉じる区間はマゼンタ色です。
形状を作るコツ
- 外周は対象物の輪郭より少し内側に置くと、周囲の背景を巻き込みにくくなります。
- 重心範囲は小さくしすぎず、形を保ったまま動かしたい厚みのある部分を囲みます。
- 外周と重心範囲が近すぎると急激な変形になり、離すほど広い範囲でなだらかに変形します。
- 頂点を増やしすぎると編集が難しくなるため、まず少ない滑らかな頂点で形を作り、必要な場所だけ追加します。
- 角を残したい場所だけ
鋭角頂点を使用し、それ以外は滑らかな頂点を推奨します。 - 2か所を別々に設定する場合は、形状セット1と2の外周が大きく重ならないようにします。
保存について
設定画面は、タイトルバーの閉じる操作を含め、閉じると現在の形状を保存します。現在は設定画面内のキャンセル、元に戻す、やり直す機能はありません。
形状はフィルターの形状データ項目へ保存され、AviUtl2プロジェクトと一緒に読み込まれます。形状データは内部用の文字列なので、通常は直接編集しないでください。
AviUtl2側の設定
| 設定 | 範囲 / 初期値 | 内容 |
|---|---|---|
| 時間軸計算 | ON / ON | ONでオブジェクト移動から揺れを計算します。現在の実装ではOFFにすると実映像の揺れ変形を停止します。 |
| 移動X | -10000~10000 / 0 | 通常は使用しません。画像オブジェクトの座標を取得できない場合だけ、代替の入力座標として使用します。 |
| 移動Y | -10000~10000 / 0 | 移動Xと同じです。 |
| 揺れの強さ | 0~200% / 100% | オブジェクトの移動を揺れへ伝える強さです。 |
| 動きの遅れ | 0~100% / 50% | 本体の動きに対して柔らかい部分が残る量です。大きいほど移動直後の変形が強くなります。 |
| やわらかさ | 0~100% / 50% | 元の形へ戻すばねの性質を調整します。大きいほど戻りがゆっくりになります。 |
| 揺れの長さ | 0~100% / 50% | 揺れの残りやすさを調整します。大きいほど減衰しにくくなります。 |
| 最大変形量 | 0~500px / 100px | 大きな移動時の変形量を制限し、画像の破綻を抑えます。 |
| 横方向 | 0~200% / 100% | 横方向の変形だけを増減します。0%で横揺れを止めます。 |
| 縦方向 | 0~200% / 100% | 縦方向の変形だけを増減します。0%で縦揺れを止めます。 |
形状セット1と2では外周と重心範囲だけが独立しています。上表の揺れ設定は2組で共通です。
調整の目安
揺れが弱い
揺れの強さを上げます。動きの遅れを上げます。- 必要な方向の
横方向または縦方向を上げます。 最大変形量が低すぎないか確認します。
揺れは座標そのものではなく、フレーム間の座標差から発生します。同じ距離でもゆっくり移動すると弱く、短時間で大きく移動すると強くなります。
揺れが長く残りすぎる
揺れの長さを下げます。やわらかさを下げ、元へ戻る力を強めます。
形が崩れすぎる
最大変形量を下げます。揺れの強さまたは方向別の影響率を下げます。- 重心範囲を広げ、外周との間に十分な幅を取ります。
トラブルシューティング
設定画面に画像が表示されない
- タイムラインの再生位置が対象画像オブジェクトの表示区間内にあるか確認します。
- AviUtl2のプレビューを一度更新してから
設定を開き直します。 - フィルターより前の段階で画像サイズが0になっていないか確認します。
変形プレビューが表示されない
- 選択中の形状セットで、外周と重心範囲の両方が閉じているか確認します。
- 外周と重心範囲にそれぞれ3個以上の頂点があるか確認します。
- 重心範囲が外周の内側にあるか確認します。
再生しても揺れない
時間軸計算がONか確認します。揺れの強さ、横方向、縦方向が0になっていないか確認します。- 画像オブジェクトの標準描画X/Yがフレーム間で変化しているか確認します。
- フィルターオブジェクトなど、画像座標を取得できない対象では
移動X/Yを実際の移動と同じ値に設定します。 - 大きなシーク、逆再生、長いフレーム飛びでは異常な揺れを防ぐため履歴がリセットされます。通常再生で確認してください。
外周の外側まで動いて見える
- 外周が正しく閉じているか確認します。
- 半透明の髪や影など、元画像の画素自体が外周をまたいでいないか確認します。
- 2つの形状セットの外周が重なっていないか確認します。
現在の制限
- 揺れ入力はX/Y移動のみです。回転、拡大率、中心座標には追従しません。
- 形状編集画面にキャンセル、元に戻す、やり直す機能はありません。
- 形状セットは最大2組です。
- 大きなフレーム飛びや逆再生では物理履歴を初期化します。
- 側面用の専用変形モデルや壁接続範囲は未実装です。
開発者向けビルド
Delphi 37.0でWin64を対象にビルドします。DebugとReleaseの両構成があります。
cmd /c 'call "C:\Program Files (x86)\Embarcadero\Studio\37.0\bin\rsvars.bat" && msbuild "D:\DelphiProg\Shake_PPP\Shake_PPP.dproj" /t:Build /p:Config=Debug /p:Platform=Win64'
ビルド後、プラグインは次の場所へコピーされます。AviUtl2が起動中だとファイルを更新できないため、ビルド前に終了してください。
C:\ProgramData\aviutl2\Plugin\Shake_PPP\Shake_PPP.auf2
Debugビルドでは診断ログを次の場所へ出力します。Releaseビルドではログを出力しません。
C:\ProgramData\aviutl2\Plugin\Shake_PPP\Shake_PPP_debug.log
配布ZIPの作成
Release Win64をビルドした後、次のバッチを実行します。
Setup\make_release_zip.bat
Setup\Shake_PPP.zipが生成されます。ZIPには、インストーラーがそのままプラグインフォルダーへコピーできるShake_PPPフォルダーが入り、その中にShake_PPP.auf2とREADME.mdが含まれます。Debug用のDLLまたはRSMが配備先に残っている場合は、Debug版の誤配布を防ぐためZIPを生成しません。