質問: 今、Aviutlでバイオハザードの死亡シーンを作りたいのですが、Aviutlのスクリプトか何かで画像のように水?
回答: バイオハザードの映像は、 動画編集ソフトで作っているのではなく、 3D モデリングソフトを使用して、 3D 形状の作成や表面材質の設定、 光源や光の行路計算などを行って出力している。 Aviutl を含め「動画編集ソフト」はあくまで、 そういった映像制作手段で作成された動画素材を読込んで、 カット編集、フィルタ加工するためのソフトだから、 同じレベルの 3D オブジェクトを作成するのは無理。 ただ、 フィルタ効果やスクリプトを使って 「似たようなもの」を表現するくらいならできるんで、 Aviutl での方法の一例を紹介する(やり方は何通りでもあると思う)。 ■■■ 概要 ■■■ 円(図形オブジェクト)を、 フィルタ効果を使って大量にランダム配置させ、 ノイズパターンをマップとした「ディスプレイスメントマップ」を掛ける。 すると、 ランダム配置でバラ撒かれた円が、 ノイズパターンに従って歪な形に歪んで散らばり、 液体のような表現になる。 あとは、 ランダム配置の散らばり範囲を、 時間経過に従って変化させればいいだけ。 ■■■ 即席サンプル ■■■ いま即席でサンプルを作ってみた。 [ サンプル ] Google ドライブに上げておいたんで、 ダウンロードしたら zip 解凍すれば 中にサンプルのプロジェクトファイル .aup が2つ入っている。 「サンプル1.フィルタ効果.aup」はフィルタ効果を使って実現した例。 配布されている追加スクリプトを使うと、 開いた側にそのスクリプトが導入されていなければ表示されないんで、 Aviutl の拡張編集に標準で装備されているフィルタのみで作成した。 形状的に不自然な点が多いかもしれん。 「サンプル2.スクリプト制御.aup」は、 Aviutl 標準のフィルタだけではやりにくい表現を、 「スクリプト制御」にスクリプトのコードを自前で記述して作成。 まだ作り込みや調整の余地はあると思うが、 いちおうそれなりの形にはなっていると思う。 ちなみに、 「スクリプト制御」に記述できるスクリプトは、 1024 文字程度までの字数制限があるから、 記述すべきスクリプト全体を3つの「スクリプト制御」に分けた。 あと参考までに、 各「スクリプト制御」に記述しているコードの内容を、 テキストファイルでも添付しておいた。 ■■■ サンプル1の説明 ■■■ 円(図形オブジェクト)をランダムに散らして、 ディスプレイスメントマップで歪ませて液体風にする。 まずは、 ディスプレイスメントマップで使用する変形マップを、 別シーン(Scene2)で作成しておく。 白い背景(図形オブジェクト)に、 フィルタ効果「ノイズ」をかけて、周期X, Y を 適切に調節。 これだけでは、 マップのノイズのザラツキが邪魔なのと、 マップのコントラストが低くて変形の振幅が得られないから、 フィルタ効果「ぼかし」を掛けてザラツキを抑え、 フィルタ効果「色調補正」で明るさと輝度を上げておく。 つぎに、 別シーン(Scene1)にて、 円(図形オブジェクト)を配置したら、 フィルタ効果「グラデーション」で液体に色を付け、 アニメーション効果「ランダム配置」で散らす。 この「ランダム配置」の「範囲」を、 時間経過に従って 0 → 500 のように広げて配置を拡散させる。 (※) 円(図形オブジェクト)を散らす際、 標準装備の「ランダム配置」の代わりに、 さつき氏が配布している「キラキラ@ANM1」を使えば、 散らした円のサイズなどもランダムに変えれるし、 時間変化の方法には、 同じくさつき氏配布の「@加減速TRA」を使えば、 もう少し自然な広がり方を表現できる。 同時に、 円(図形オブジェクト)の拡大率も変化させるのだが、 拡散とのタイミングが揃うと不自然だから、 円の「拡大率」は中間点を使って序盤に大きく変化させ、 ランダム配置の「範囲」は加減速移動させている。 あとは、 この別シーン(Scene1)を Root シーンに読込んで、 フィルタ効果「ディスプレイスメントマップ」を掛け、 マップの種類を「シーンから > Scene1」に、 変化方法を「移動変形」にして、 変形X, Y をそれぞれ時間変化させれば完成。 ついでに、 液体的な光沢を出すためにフィルタ効果「グロー」を追加し、 輪郭を馴染ませるのに「縁取り」も追加しているが、 この辺は自分の思った表現に近づくように色々やってみればいいと思う。 ■■■ サンプル2の説明 ■■■ サンプル1の手順で、 円の大きさをランダムに変更できなかったり、 時間変化の方法が限定されていた問題を回避するために、 サンプル1と同じ順を、 「スクリプト制御」で自前でスクリプトを記述して実行している。 「スクリプト制御」に記述できるコードの文字数に制限があるんで、 全体の処理を、 ──────────────── (1)円を飛散させる処理 (2)変形マップを作成する処理 (3)マップをつかって変形させる処理 ──────────────── の3つの「スクリプト制御」に分けて記述した。 (※) rikky 氏が配布している dll ファイル「rikky_module」を導入すると、 スクリプトコードを別のテキストファイルに記述して、 それを「スクリプト制御」に読込んで使えるんで、 実質スクリプトの文字制限がなくなる。 rikky_module がなくても、 テキストファイルに記載したスクリプトを読込めるが、 記載したファイルの置き場所が、 Aviutl の本体 aviutl.exe がある場所の [script] フォルダ内に制限される。 (1)のスクリプトでは、 円(図形オブジェクト)を複数描画し、 その位置と大きさを時間変化に従って変化させることで、 飛散させている。 時間に対する座標変化の指数を 4 にすることで、 通常の「加減速移動」ではできない「急さ」の加減速にしている。 この移動方法は、 さつき氏配布の「@加減速TRA」を導入してもできる。 (2)のスクリプトでは、 単に白い背景(図形オブジェクト)を描画して、 obj.effect() でフィルタ効果「ノイズ」をかけているだけ。 周囲が透過していると、 ディスプレイスメントマップでの変化量が 透過部分では 0 になってしまうんで、 黒い部分でマイナス方向の変化になるように、 黒い背景も一緒に描画している。 マップの描画先を仮想バッファ(tempbuffer)にすることで、 「ディスプレイスメントマップ」にて 「*tempbuffer」として指定できるようにしている。 (3)のスクリプトでは、 (2)で仮想バッファに描画したマップを、 フィルタ効果「ディスプレイスメントマップ」で読み込んで適用。 変形量の時間変化は、例によって指数 4 の減速移動にしている。 また追加の仕上げとして、 透過処理、グロ―、縁取りも一緒に実行している。