Tips
このページの目的
AviUtlのスクリプトを作成するor使用する上で、役立つ豆知識やコツなどをまとめるためのページです。
ネット上では情報がすぐに流れてしまい、貴重なものも探すのが困難になります。
あなたが知っている、あるいは見かけた豆知識やコツなどをどんどん追加していってください。
豆知識
obj.load("tempbuffer") と obj.copybuffer("obj", "tmp") の違い
load をすると、ox,oy,oz 等はリセットされる。
load する前にそれらを退避しておき、load 後に復元する手もある。
アラインメント情報は、cx, cy, cz に含まれています。
一方、copybuffer では、それらは全て保持される。
コツ
共通機能の関数化と外部ファイル化について
関数化の目的
・複数のアニメーション効果で使用しているロジックを改変する際の効率化を図る
外部ファイル化の目的
・.anm はAVIUTL本体の起動時に1度だけ読み込まれるものであるため、スクリプトのデバッグ/改修を行う際にはAVIUTLの再起動が頻繁に発生してしまいがちである。
この頻度を低減させたい
方法
1.script フォルダに、yamada_tarou.lua ファイルを作成し、作成したファイルに関数を記述する
ファイルの文字エンコードは UTF-8 SJIS にすること!!
2.アニメーション効果、@山田太郎 を作成し、その冒頭で dofile("script/yamada_tarou.lua") を実行することで、外部ファイルに定義した関数を読み込む
以上
サンプル
この例では、ひとつの関数しか定義しないが、複数の関数を定義することもできる
- yamada_tarou.lua の内容
--絶対値座標にオブジェクトを配置する
function setAbsolutePosition(obj, x, y, z)
obj.ox=0
obj.oy=0
obj.oz=0
obj.ox = -obj.x+x
obj.oy = -obj.y+y
obj.oz = -obj.z+z
end
- @山田太郎.anm の内容
@山田太郎
--track0:X座標,-1000,1000,0
--track1:Y座標,-1000,1000,0
--track2:Z座標,-1000,1000,0
dofile("script/yamada_tarou.lua")
setAbsolutePosition(obj, obj.track0, obj.track1, obj.track2)
getpixel()について
次のようにパラメタなしで getpixel() を実行することにより、ビットマップのサイズを得ることができる。
w,h=obj.getpixel()
ここで得られるのは、拡大縮小・移動・回転・パース計算が施されていない生ビットマップのサイズである。
obj.w, obj.h は拡大縮小トラックバーの値、縦横比率トラックバーの値が掛け合わせられている値であるため、ビットマップサイズと一致するとは限らない。
ビットマップ縦方向の並び順は見た目と一致する。
(通常のビットマップとは逆順である。余談であるが、ビットマップの高さがマイナスの値であるビットマップはAVIUTLではサポートされていないようである)
フォントにおいては、ビットマップは最小矩形領域に切り詰められている。
font-metricsが取得できないため、load -> draw でテキストを描画する場合、
厳密にアラインメントを揃えるのは不可能である。
オブジェクトのプロパティーとトラックバーの値の関連について
プロパティー | トラックバー値との関連 |
---|---|
ox | Xトラックバー値と加算した座標が描画座標となる |
oy | Yトラックバー値と加算した座標が描画座標となる |
oz | Zトラックバー値と加算した座標が描画座標となる |
rx | X軸回転トラックバー値と加算した角度が描画角度となる 通常はX軸回転トラックバーと同値であり、この値が最終的な描画角度となる。(20111224時点) |
ry | Y軸回転トラックバー値と加算した角度が描画角度となる rxと同様 |
rz | Z軸回転トラックバー値と加算した角度が描画角度となる rxと同様 |
zoom | 拡大率トラックバー値と掛け算した倍率が描画倍率となる |
aspect | 縦横比トラックバー値と、aspect を、それぞれ横倍率・縦倍率に分解した値を方向別に掛け算した倍率が描画倍率となる |
alpha | 透明度トラックバー値を不透明度に変換した値と掛け算した不透明度が描画時の不透明度となる |
・"割合"で表されるプロパティーは掛け算、それ以外は足し算で最終的な値が決まる。
・obj.load() を実行すると、それまでに設定した値は失われるため、必要に応じて最設定しなければならない。
・obj.draw() でもこれらの値を設定することができるが、この場合の最終的な値も同様にして決まる。
例.
X座標:obj.x + obj.ox + (drawで指定したX座標)
拡大率:obj.getvalue("zoom") * obj.zoom * (drawで指定した拡大率)
描画されるpxサイズを求めるには、さらにサイズトラックバーの値、縦横比トラックバーの値、および obj.aspect を考慮しなければならない
・obj.drawpoly() ではこれらの値のほとんどは直接的に指定することはできないが、基本的には同様の考え方ができる。
例.
drawpoly() で描いた図形の中心座標に、obj.x と obj.ox が加算される。
drawpoly() で描いた図形に、トラックバーの回転角と obj.rx を足した回転角が適用される。
drawpoly() で描いた図形に、obj.zoom の倍率が適用される。(トラックバーの拡大率は、obj.w/obj.h に適用されている)
※draw系についてまとめると、ローカル座標系に正体した状態で絵を描くと、
拡張編集がトラックバーと ox,rx,zoom などの値を参照してワールド座標系に変換した絵を描いてくれるという、
スクリプトの書き手に優しい仕様になっていると言えます。
lua を知るうえで参考になりそうなページの紹介
Lua 5.1 リファレンスマニュアル
luaリファレンスマニュアル本家を和訳したもののようです。
良いもの。悪いもの。/Lua基礎文法最速マスター
初心者向けにわかりやすくまとめられています。
- 最終更新:2012-04-10 21:54:53