単語記事: AviUtlスクリプト講座

編集

 AviUtlスクリプト講座とは、フリー動画編集&エンコードソフトであるAviUtlの拡編集プラグインに追加された機である、カスタムオブジェクトアニメーション効果に関する講座スクリプトを扱った動画につけることが推奨されるタグである。

概要

 現在AviUtlの拡編集にはLuaスクリプトによりユーザー自由に新しいオブジェクトアニメーション効果を追加することができる。
 とはいえ、初心者には非常に敷居が高いし、プログラミング上級者にも発想められる。昨今はAviUtlLua講座や、様々なスクリプトとその解説動画開されているので是非参照していただきたい。

 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」と対応していることが推測できます。
    (値の対応がよくわからない場合は、値を変えてエクスポートして確認してみればわかります。)

 ※lua.txtのobj.effect()の説明より引用

トラックバーチェックボックス以外の設定の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などを利用するとよいようです。

AviUtl好会コミュ掲示板593より引用

現状はスクリプトのバッファが約16KBとなっていますので上限ということになります。
この辺は後々変えていくかも知れませんが、require等で別ファイルから読み込んでしまえば
現状でも上限を気にせず扱えると思います。

 

dofile()で外部データの読み込み

 dofile()を使うと、外部ファイルデータ読み込むことができます。
例えば、PMDモデルデータ読み込んで表示する「ポリゴンモデル表示.obj」などで利用されています。

 

何かありましたら追加・修正をお願いいたします。

 こんな感じで色々書いていったら良いと思うのですが如何でしょうか?

関連動画

関連コミュニティ

関連商品

関連項目

外部サイト


【スポンサーリンク】

携帯版URL:
http://dic.nicomoba.jp/k/a/aviutl%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E8%AC%9B%E5%BA%A7
ページ番号: 4699074 リビジョン番号: 1274432
読み:エーヴイアイユーティルスクリプトコウザ
初版作成日: 11/08/15 00:30 ◆ 最終更新日: 11/08/29 22:36
編集内容についての説明/コメント: drawpoly()で三角形を描く場合の注意と、描画の破綻例(台形ポリゴン)について追記。
記事編集 / 編集履歴を閲覧

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

AviUtlスクリプト講座について語るスレ

3 : ななしのよっしん :2011/08/15(月) 08:21:41 ID: aA0SiuHSZv
@FI走査線2(移動)
--track0:濃さ,0,100,40
--track1:ライン幅,1,100,2
--track2:間隔補正,-100,100,0
--track3:範囲拡大,0,800,100
--dialog:反転(1or0),dir=0;速度,v=10;
obj.load("figure","四形",0x000000,2)
a = obj.track0/100
l = obj.track1
s = obj.track2
if( l < 1 ) then
l = 1
(省略しています。全て読むにはこのリンクをクリック!)
4 : ななしのよっしん :2011/08/15(月) 08:23:42 ID: aA0SiuHSZv
if( dir == 1 ) then --反転の条件分岐
while( y > h*2+t ) do --上に移動する処理
if( -y+h+t < h ) then
obj.drawpoly(-w, -y+h+t,0,w, -y+h+t,0,w, -y+l+h+t,0,-w, -y+l+h+t,0, 0,0,1,0,1,1,0,1,0)
else
obj.drawpoly(-w, -y+h+t,0,w, -y+h+t,0,w, -y+l+h+t,0,-w, -y+l+h+t,0, 0,0,1,0,1,1,0,1,a)
end
y = y+(l*2+s)*p
end
else
while( y < h*2+t ) do --下に移動する処理
if( -y+h+t > h ) then
(省略しています。全て読むにはこのリンクをクリック!)
5 : ななしのよっしん :2011/08/15(月) 09:18:09 ID: s1lwNYLcLe
うーん、ここにソースを貼っていくというのも悩みものかなぁ
スペース入らないし見にくい)
外部にwikiでもあると便利かもねー。
6 : ななしのよっしん :2011/08/15(月) 12:23:36 ID: aA0SiuHSZv
ですよねー。貼ってから思った。
文字数制限と行数制限がきついし過去ログを遡るのが厳しい;
現状ではさつきさんのユーザー記事がまとめになっていて
非常に助かっているけれど、、
個人では拾いきれないものもあるからwiki難かなぁ。
そうなると管理やら何やらという問題も発生してくるのが悩みどころ。
7 : ななしのよっしん :2011/08/16(火) 02:13:24 ID: grgONShcnH
wikiコミュ管理のアカギさんに頼むとかなんとか
8 : ななしのよっしん :2011/08/16(火) 16:32:59 ID: aA0SiuHSZv
wiki作ってくれた方がいるみたいなのでペタリ。
http://aviutlscript.wiki.fc2.com/
9 : ななしのよっしん :2011/08/18(木) 06:37:03 ID: aA0SiuHSZv
wiki編集頑ってみるかーと思ってあれこれやってまする。
初めてなので変なになってたらごめんね。
とりあえず練習用ページを作って練習してみよう。
10 : ななしのよっしん :2011/08/18(木) 09:50:12 ID: aA0SiuHSZv
wiki適当ページ作ってみた
このデザインはないだろJK・・・っていうところがあれば
遠慮なく変えちゃってください。センスないんです。
あとスクリプトの記載ルールを決めかねてるので
wiki見てコメントしてくれるとありがたいです。
11 : ななしのよっしん :2011/08/20(土) 12:24:47 ID: s1lwNYLcLe
何か記事が凄く充実してきましたね!
自分が知りたかった内容もあり、大変役に立ちます。
ありがとうございます!
12 : ななしのよっしん :2011/08/20(土) 21:41:25 ID: aA0SiuHSZv
スクリプトの記載ルール決めちゃったぞー。
あとは任せた・・・・・・!ガクッ
どんどんページや項増やしていってね。
あと私の致命的にデザインセンスのないページも修正してくれると嬉しい。
  JASRAC許諾番号: 9011622001Y31015