AviUtlスクリプト講座とは、フリーの動画編集&エンコードソフトであるAviUtlの拡張編集プラグインに追加された機能である、カスタムオブジェクトやアニメーション効果に関する講座や公開スクリプトを扱った動画につけることが推奨されるタグである。
概要
現在AviUtlの拡張編集にはLuaスクリプトによりユーザーが自由に新しいオブジェクトやアニメーション効果を追加することができる。
とはいえ、初心者には非常に敷居が高いし、プログラミング上級者にも発想力が求められる。昨今はAviUtlとLuaの講座や、様々なスクリプトとその解説動画が公開されているので是非参照していただきたい。
Luaに関する基本的な知識はGoogleを、AviUtlとの連携に関する基本的な技術については同封のlua.txtかさつきさんの大百科を参考にしていただきたい。
Tips
画素を扱う場合の工夫
getpixelなどの画素を扱う関数を使用する場合について、画素データのメモリ上の配置の関係から y 座標の変化のループを外側にした方が高速になると思われる。(・・・・・・多分。お詳しい方、間違ってましたら修正して下さい。)
for y = 1, height do
for x = 1, width do
obj.getpixel(x, y, "col")
end
end
エフェクトのパラメータ名を調べる方法
obj.effect()を使うと、スクリプトからフィルタ効果をかけることができます。
その際、フィルタ効果のパラメータを渡してやる必要がありますが、中にはパラメータ名がわかりにくいものもあります。
たとえば「ミラー」では鏡像をつくる方向(上下左右)を指定するボックスがありますが、そのパラメータ名は見ただけではわかりません。
このような場合は、適当なオブジェクトにそのフィルタ効果をかけて、オブジェクトファイルのエクスポートを行なって
パラメータ名を調べる必要があります。以下にその手順を述べます。
手順1.適当なオブジェクト(例えば図形)に調べたいフィルタ効果(ここでは「ミラー」)をかける。
手順2.拡張編集タイムライン上での右クリックメニューから「ファイル→オブジェクトファイルのエクスポート」を実行し、
適当な名前で*.exoファイルを作成します。
手順3.手順2で作成した*.exoファイルをメモ帳で開きます。目的のフィルタ効果の部分を見ると、
以下のような感じでパラメータ名と値が羅列されています。
_name=ミラー
透明度=0.0
減衰=0.0
境目調整=0
中心の位置を変更=0
type=1
4.「ミラー」の操作画面と見比べると、鏡像を作る方向を指定するパラメータの名前は「type」であることがわかります。
値も「上側・下側・左側・右側」が「0・1・2・3」と対応していることが推測できます。
(値の対応がよくわからない場合は、値を変えてエクスポートして確認してみればわかります。)
※トラックバー、チェックボックス以外の設定のparam,valueは
オブジェクトファイルのエクスポート等で出力された時の名前や値になります。
drawpoly()を使う際はポリゴンの表と裏を意識する
drawpoly()で描くポリゴンには表面と裏面があります。
引数に渡す頂点0→頂点1→頂点2→頂点3を結んだとき、それが時計回りになるほうが表面となります。
拡張描画オブジェクトに「裏面を表示しない」というチェックボックスがありますが、
これにチェックを入れると、裏面がカメラのほうを向いているポリゴンは描画されなくなります。
(図形や動画、画像、テキストなどのオブジェクト自体も1枚のポリゴンと考える。)
「裏面を表示しない」にチェックを入れると、裏面ポリゴンを描かなくなる分、描画が軽くなるという効果もあります。
(裏面も見えたほうがよい場合もあるので使い方次第ですが。)
そのため、drawpoly()を使って「閉じた立体」などを描くような場合は、なるべく表裏を意識したほうがよいでしょう。
drawpoly()で三角形を描く場合の注意点
drawpoly()は本来4つの頂点(頂点0~3)を指定して四角形を描くものです。
また、lua.txtにも「内角が全て180度以下の平面以外は正しく描画されません。」というただし書きがあります。
4つのうち2つの頂点を同一座標にしてやれば三角形を描くこともできますが、この場合は、同一座標となる頂点を
drawpoly()の頂点0および頂点1に渡してやる必要があるようです。
(つまりA,B,Cの3頂点からなる三角形の場合、drawpoly()へはA-A-B-Cという渡し方をする必要がある。)
そうしないと、ポリゴンの表裏判定がうまくいかなかったり、シャドーの働きがおかしくなったりすることがあります。
drawpoly()での破綻例
drawpoly()で、長方形のテクスチャを台形のように歪めた形のポリゴンとして描画するとテクスチャが崩れることがあります。
例えば、適当な画像に以下のスクリプトを適用して台形ポリゴンを描き、オブジェクトをZ回転させるとテキスチャが崩れます。
(AviUtl0.99j+拡張編集0.87eで確認。)
AviUtl愛好会コミュ掲示板743での回答によると、現状こうなるのはやむを得ないということで、仕様とされています。
obj.drawpoly(-10,-100,0, 10,-100,0, 100,100,0, -100,100,0, 0,0, obj.w,0, obj.w,obj.h, 0,obj.h)
.anmや.objでの1つのスクリプト定義のサイズ上限は約16KB
.anmや.objの中には複数のスクリプト定義を記述することができますが、個々のスクリプト定義のサイズ上限は
約16KB(半角英数字で約16000字)となります。
(.anmや.objのファイルサイズ上限ではなく、中に書く個々のスクリプト定義の上限であることに注意。)
それ以上長いスクリプトを書きたい場合はrequireなどを利用するとよいようです。
現状はスクリプトのバッファが約16KBとなっていますので上限ということになります。
この辺は後々変えていくかも知れませんが、require等で別ファイルから読み込んでしまえば
現状でも上限を気にせず扱えると思います。
dofile()で外部データの読み込み
dofile()を使うと、外部ファイルのデータを読み込むことができます。
例えば、PMDモデルデータを読み込んで表示する「ポリゴンモデル表示.obj」などで利用されています。
何かありましたら追加・修正をお願いいたします。
こんな感じで色々書いていったら良いと思うのですが如何でしょうか?
関連動画
関連コミュニティ
関連商品
関連項目
外部サイト
- AviUtlスクリプト Wiki
- AviUtl配布先
- AviUtlの導入方法あれこれ
- 拡張編集の使い方
- さつき(ニコニコ大百科ユーザ記事)
- Lua 5.1 リファレンスマニュアル和訳(yunoの雑記帳)
- 6
- 0pt