Luaスクリプト
Luaスクリプトについて
スクリプト制御、スクリプトファイル(*.anm2,*.obj2,*.cam2,*.scn2,*.tra2)、テキストのスクリプト制御文字で利用可能なスクリプトにはLua言語が使用出来ます。
また幾つかの変数と関数が拡張されています。
※旧スクリプトファイル(*.anm,*.obj,*.cam,*.scn,*.tra)も利用できますが、一部の機能が非対応となっています。
注意点
- スクリプトの文字コードはUTF-8になります。※旧スクリプトファイルはSJISです。
- スクリプトの配置場所はProgramData\aviutl2\Script\フォルダ(及び一つ下のフォルダ)になります。
- スクリプトからスクリプトを呼び出した場合は上手く動作しない場合があります。
- 「キャッシュを破棄」の操作でスクリプト(シェーダー含む)が再読み込みされますが、設定項目の変更は反映されません。
- 旧スクリプトファイル形式と一部仕様が異なる場合があります。※pixel入出力系の引数等
- スクリプト制御ではtable,string,mathライブラリのみ利用出来ます。os,debug,ffi.Cは共通で外しています。
設定項目
スクリプトファイルの先頭で以下を指定することで設定項目が追加出来ます。
トラックバー項目を定義
スクリプトファイルの先頭で--track@変数名:項目名,最小値,最大値,デフォルト値,移動単位のように指定するとトラックバーが有効になります。移動単位は1,0.1,0.01,0.001か省略が出来ます。
※旧スクリプトファイル形式の--track0:項目名,最小値,最大値,デフォルト値,移動単位も利用できます。
--track@vx:X速度,-10,10,0
obj.ox = obj.ox + vx * obj.timeチェックボックス項目を定義
スクリプトファイルの先頭で--check@変数名:項目名,デフォルト値(0か1またはtrueかfalse)のように指定するとチェックボックスが有効になります。
デフォルト値が0か1の場合は変数がnumber型(0/1)になります。
デフォルト値がtrueかfalseの場合は変数がboolean型(true/false)になります。
※旧スクリプトファイル形式の--check0:項目名,デフォルト値(0か1)も利用できます。(変数はboolean型)
--check@grav:重力,0
--check@speed:速度,false
if grav == 1 then ...
if speed then ...色設定項目を定義
スクリプトファイルの先頭で--color@変数名:項目名,デフォルト値のように指定すると色設定項目が有効になります。
デフォルト値にnilを指定すると透明色の選択が出来るようになります。
※旧スクリプトファイル形式の--color:デフォルト値も利用できます。
--color@col:図形色,0xffffff
obj.load("figure", "四角形", col, 100)ファイル選択項目を定義
スクリプトファイルの先頭で--file@変数名:項目名のように指定するとファイル選択項目が有効になります。
※旧スクリプトファイル形式の--file:も利用できます。
--file@path:画像ファイル
obj.load("image", path)フォント設定項目を定義
スクリプトファイルの先頭で--font@変数名:項目名,デフォルト値のように指定するとフォント設定項目が有効になります。
--font@font:フォント名,MS UI Gothic
obj.setfont(font, 50, deco, col1, col2)図形設定項目を定義
スクリプトファイルの先頭で--figure@変数名:項目名,デフォルト値のように指定すると図形設定項目が有効になります。
--figure@fig:先端図形,三角形
obj.load("figure", fig, col, 100)リスト選択項目を定義
スクリプトファイルの先頭で--select@変数名:項目名=デフォルト値,選択肢=値,選択肢=値,選択肢=値のように指定するとリスト選択項目が有効になります。デフォルト値は省略できます。
--select@deco:装飾タイプ,標準文字=0,影付き文字=1,影付き文字(薄)=2,縁取り文字=3,縁取り文字(細)=4,縁取り文字(太)=5,縁取り文字(角)=6
obj.setfont(font, obj.track2, deco, col1, col2)テキスト設定項目を定義
スクリプトファイルの先頭で--text@変数名:項目名,デフォルト値のように指定するとテキスト設定項目が有効になります。
--text@txt:テキスト,デフォルト文字\n次の行
obj.load("text", txt)変数項目を定義
スクリプトファイルの先頭で--value@変数名:項目名,デフォルト値のように指定すると変数項目が有効になります。
変数項目はテキスト入力項目となり数値、文字列、配列を定義できます。
※デフォルト値の内容で種別が切り替わります。
--value@num:数値,0
--value@text:文字列,"0"
--value@table:配列,{0,0,0}汎用データ領域を定義
スクリプトファイルの先頭で--data@登録名:サイズ(1024バイト以下)のように指定すると汎用データ領域が有効になります。※スクリプトモジュールやDLL向けになります。obj.data("登録名")で汎用データ領域のポインタ(ユーザーデータ)が取得できます。
デフォルト値はユーザーデータの領域を0クリアした値になります。
※保存済みの汎用データのサイズが異なる場合はデフォルト値に初期化されます。
--data@pos:8
local pos = obj.data("pos")オブジェクト追加メニューのラベルを定義
スクリプトファイルの先頭で--label:ラベル名のように指定するとオブジェクト追加メニューの階層のラベルの初期値を設定できます。
--label:加工スクリプト種別を指定
スクリプトファイルの先頭で--script:種別のように指定するとスクリプトの種別(luaJIT,lua)を指定できます。
未指定の場合はluaJITになります。※旧スクリプトファイルではluaになります
--script:luaスクリプトの情報を指定
スクリプトファイルの先頭で--information:ラベル名のように指定するとスクリプトの情報を設定できます。
--information:テストスクリプト ver2.00 by Kenkunピクセルシェーダーを定義
スクリプトファイルの先頭で--[[pixelshader@登録名:のような複数行コメントにピクセルシェーダーをHLSLで記述できます。
※登録名がエントリーポイントになります。
ピクセルシェーダーの入力は下記が利用できます。
float4 psmain(float4 pos : SV_Position) : SV_Targetfloat4 psmain(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target※シェーダーリフレクションを利用してシグネチャから判別しています。
※uvは描画範囲が0.0~1.0になるように設定されます。
--[[pixelshader@psmain:
float4 psmain(float4 pos: SV_Position): SV_Target {
...
}
]]コンピュートシェーダーを定義
スクリプトファイルの先頭で--[[computeshader@登録名:のような複数行コメントにコンピュートシェーダーをHLSLで記述できます。
※登録名がエントリーポイントになります。
--[[computeshader@csmain:
[numthreads(1, 1, 1)]
void csmain(uint2 id: SV_DispatchThreadID) {
...
}
]]その他
※旧スクリプトファイル形式の--dialog、--paramも利用できます。個々の設定項目が作成されます。
変数
対象オブジェクトの情報が以下の変数に入ります。
| 変数名 | 説明 | ReadOnly |
|---|---|---|
obj.ox1 | 基準座標からの相対座標X | |
obj.oy1 | 基準座標からの相対座標Y | |
obj.oz1 | 基準座標からの相対座標Z | |
obj.rx1 | X軸回転角度(360.0で一回転) | |
obj.ry1 | Y軸回転角度(360.0で一回転) | |
obj.rz1 | Z軸回転角度(360.0で一回転) | |
obj.cx1 | 中心の相対座標X | |
obj.cy1 | 中心の相対座標Y | |
obj.cz1 | 中心の相対座標Z | |
obj.sx1 | X座標の拡大率(1.0=等倍) | |
obj.sy1 | Y座標の拡大率(1.0=等倍) | |
obj.sz1 | Z座標の拡大率(1.0=等倍) | |
obj.zoom1、2 | 拡大率(1.0=等倍) | |
obj.aspect1、2 | アスペクト比(-1.0~1.0/プラス=横縮小/マイナス縦縮小) | |
obj.alpha1 | 不透明度(0.0~1.0/0.0=透明/1.0=不透明) | |
obj.x | 表示基準座標X | ○ |
obj.y | 表示基準座標Y | ○ |
obj.z | 表示基準座標Z | ○ |
obj.w3 | 画像サイズW | ○ |
obj.h3 | 画像サイズH | ○ |
obj.screen_w | スクリーンサイズW | ○ |
obj.screen_h | スクリーンサイズH | ○ |
obj.framerate | フレームレート | ○ |
obj.frame | オブジェクト基準での現在のフレーム番号 | ○ |
obj.time | オブジェクト基準での現在の時間(秒) | ○ |
obj.totalframe | オブジェクトの総フレーム数 | ○ |
obj.totaltime | オブジェクトの総時間(秒) | ○ |
obj.layer | オブジェクトが配置されているレイヤー ※描画対象のオブジェクトのレイヤー位置 | ○ |
obj.index | 複数オブジェクト時の番号 ※個別オブジェクト用 | ○ |
obj.num | 複数オブジェクト時の数(1=単体オブジェクト/0=不定) ※個別オブジェクト用 | ○ |
obj.id | オブジェクトのID ※アプリ起動毎の固有ID | ○ |
obj.effect_id | オブジェクトの内の対象エフェクトのID ※アプリ起動毎の固有ID ※処理対象のフィルタ効果、オブジェクト入出力の固有ID | ○ |
- 現時点のオブジェクトの設定値になります。出力項目(標準描画等)の設定値とは別のものになります。
- zoom、aspectは旧スクリプトファイルの利用かで算出反映処理が異なります
- w、hは常にオブジェクトのピクセル数になります
関数
スクリプトには以下の関数が追加されています。
obj.mes(text)
テキストオブジェクトの中で指定のテキストを追加します。
テキストオブジェクトのテキスト内のみ使用出来ます。
※obj.を省略してmes()のみでも使用出来ます。
text:表示するテキストを指定します。
例:
obj.mes("この文字が挿入されて表示されます")obj.effect([name,param1,value1,param2,value2,...])
指定のフィルタ効果を実行します。メディアオブジェクトのみ使用出来ます。
引数なしで呼ぶとスクリプト以降のフィルタ効果を実行します。
name:エフェクトの名前を指定します。param1:エフェクトのパラメータの名前を指定します。value1:エフェクトのパラメータの値を指定します。param?,value?の組み合わせは必要な分だけ指定できます。
※トラックバー、チェックボックス以外の設定のparam,valueはエイリアスファイル等で出力された時の名前や値になります。
※旧スクリプトファイルのパラメータはeffect.confの定義を参照して読み替えを行います。足りない定義は適宜追加します。
例:
obj.effect("色調補正", "明るさ", 150, "色相", 180)obj.draw([ox,oy,oz,zoom,alpha,rx,ry,rz])
現在のオブジェクトを描画します。
通常何もしなくても最後に描画されますがobj.draw()を使うことによりオブジェクトを複数回描画することが出来ます。
※obj.draw()を使用した場合スクリプト以降のフィルタ効果は実行されません。
※obj.effect()を引数なしで呼ぶことで事前にスクリプト以降のフィルタ効果を実行出来ます。
ox:相対座標Xoy:相対座標Yoz:相対座標Zzoom:拡大率(1.0=等倍)alpha:不透明度(0.0=透明/1.0=不透明)rx:X軸回転角度(360.0で一回転)ry:Y軸回転角度(360.0で一回転)rz:Z軸回転角度(360.0で一回転)
例:
obj.draw(2, 10, 0)obj.drawpoly(x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3[,u0,v0,u1,v1,u2,v2,u3,v3,alpha])
現在のオブジェクトの任意部分を任意の四角形で描画します。
※内角が全て180度以下の平面以外は正しく描画されません。
※頂点0から3が時計回りになる面が表面になります。
※obj.drawpoly()を使用した場合スクリプト以降のフィルタ効果は実行されません。
x0,y0,z0:四角形の頂点0の座標x1,y1,z1:四角形の頂点1の座標x2,y2,z2:四角形の頂点2の座標x3,y3,z3:四角形の頂点3の座標u0,v0:頂点0に対応するオブジェクトの画像の座標u1,v1:頂点1に対応するオブジェクトの画像の座標u2,v2:頂点2に対応するオブジェクトの画像の座標u3,v3:頂点3に対応するオブジェクトの画像の座標
例:
obj.drawpoly(-50, -50, 0, 50, -50, 0, 50, 50, 0, -50, 50, 0, 0, 0, obj.w, 0, obj.w, obj.h, 0, obj.h)補注
AviUtl1と違い、この座標はオブジェクトのローカル座標になります。
(1では実際に描画する座標でした)
obj.drawpoly({table}[,alpha])
複数分のobj.drawpoly()の引数をテーブルで指定することが出来ます。
obj.drawpoly()を複数回呼び出すより描画が速くなります。
テーブルの形式は下記が対応しています。※異なる形式を混在させる事はできません
{x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,u0,v0,u1,v1,u2,v2,u3,v3}{x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,u0,v0,u1,v1,u2,v2,u3,v3,vx0,vy0,vz0,vx1,vy1,vz1,vx2,vy2,vz2,vx3,vy3,vz3}{x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,r0,g0,b0,a0,r1,g1,b1,a1,r2,g2,b2,a2,r3,g3,b3,a3}{x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,r0,g0,b0,a0,r1,g1,b1,a1,r2,g2,b2,a2,r3,g3,b3,a3,vx0,vy0,vz0,vx1,vy1,vz1,vx2,vy2,vz2,vx3,vy3,vz3}
※vx,vy,vzは法線ベクトル
※r,g,b,aは描画色(0.0~1.0の乗算済みα) ※色の指定時はオブジェクトの画像は利用されません
例:
table.insert(vertex, { x0, y0, 0, x1, y1, 0, x2, y2, 0, x3, y3, 0, u0, v0, u1, v1, u2, v2, u3, v3 })
table.insert(vertex, { x0, y0, 100, x1, y1, 100, x2, y2, 100, x3, y3, 100, u0, v0, u1, v1, u2, v2, u3, v3 })
obj.drawpoly(vertex)obj.drawpoly({table}[,vertex_num,alpha])
頂点リストのテーブルを指定して四角形、三角形を描画することが出来ます。
テーブルの形式は下記が対応しています。※異なる形式を混在させる事はできません
{x,y,z,u,v}:頂点座標 + テクスチャ座標{x,y,z,u,v,vx,vy,vz}:頂点座標 + テクスチャ座標 + 法線ベクトル{x,y,z,r,g,b,a}:頂点座標 + 頂点の色{x,y,z,r,g,b,a,vx,vy,vz}:頂点座標 + 頂点の色 + 法線ベクトルvertex_num:面の頂点数( 4<デフォルト>:四角形 / 3:三角形 )
※テーブルは面の頂点数で割り切れる数になります
※u,vはオブジェクトの正規化座標(0.0~1.0)
※vx,vy,vzは法線ベクトル
※r,g,b,aは描画色(0.0~1.0の乗算済みα) ※色の指定時はオブジェクトの画像は利用されません
例:
vertex = {}
table.insert(vertex, { 0, 0, 0, 0, 0 })
table.insert(vertex, { 100, 0, 0, 1, 0 })
table.insert(vertex, { 100, 100, 0, 1, 1 })
table.insert(vertex, { 0, 100, 0, 0, 1 })
obj.drawpoly(vertex)vertex = {}
for z = 100, 1000, 100 do
table.insert(vertex, { 0, 0, z, 1, 1, 1, 1 })
table.insert(vertex, { 100, 0, z, 1, 1, 1, 1 })
table.insert(vertex, { 100, 100, z, 1, 1, 1, 1 })
end
obj.drawpoly(vertex, 3)obj.load([type],...)
現在のオブジェクトの画像を読み込みます。
typeを省略した場合は自動的に判別します。
※読み込まれていた画像は破棄されます。
動画ファイル
obj.load("movie",file[,time])
動画ファイルから指定時間の画像を読み込みます。
file:動画ファイル名time:表示する画像の時間(秒)(省略時はオブジェクトの現時間)- 戻り値:動画の総時間(秒)
例:
obj.load("movie", "c:\\test.avi")画像ファイル
obj.load("image",file)
画像ファイルを読み込みます。
file:画像ファイル名
例:
obj.load("image", "c:\\test.bmp")テキスト
obj.load("text",text[,speed,time])
テキストを読み込みます。
色とサイズ、フォントの制御文字が使用出来ます。
speed,timeを設定すると表示する文字数を変更出来ます。
※テキストオブジェクトには使用出来ません。
text:読み込むテキストspeed:timeパラメータの1秒間で表示する文字数time:speedパラメータに対する経過時間
例:
obj.load("text", "この文字が画像として読み込まれます")図形
図形を読み込みます。obj.load("figure",name[,color,size,line,round])
name:図形名、SVGファイル名color:色(0x000000~0xffffff)size:図形のサイズline:図形のライン幅round:角を丸くするか?(true:する /false<デフォルト>:しない )
例:
obj.load("figure", "円", 0xffffff, 100, true)フレームバッファ
フレームバッファから読み込みます。load("framebuffer"[,x,y,w,h][,alpha])
x,y,w,h:フレームバッファから取得する範囲(省略時は全体)alpha:アルファチャンネルを維持(true:する /false<デフォルト>:しない )
仮想バッファ
仮想バッファから読み込みます。
※仮想バッファはobj.copybuffer(),obj.setoption()で作成することが出来ます。load("tempbuffer"[,x,y,w,h])
x,y,w,h:仮想バッファから取得する範囲(省略時は全体)
レイヤー上のオブジェクト
指定のレイヤー上のオブジェクトを読み込みます。obj.load("layer",no[,effect])
no:レイヤー番号(1~)effect:追加エフェクトの実行(true:する /false<デフォルト>:しない )
直前オブジェクト
直前オブジェクトを読み込みます。obj.load("before");
カスタムオブジェクトで他のオブジェクトを読み込む前の時のみ使えます。
obj.setfont(name,size[,type,col1,col2])
obj.load()のテキストで使うフォントを指定します。
※スクリプトの呼び出し毎に指定する必要があります。
name:フォント名size:フォントサイズtype:文字の装飾(0~6)- 0=標準文字 / 1=影付き文字 / 2=影付き文字(薄)
- 3=縁取り文字 / 4=縁取り文字(細) / 5=縁取り文字(太) / 6=縁取り文字(角)
col1:文字の色(0x000000~0xffffff)col2:影・縁の色(0x000000~0xffffff)
obj.rand(st_num,ed_num[,seed,frame])
乱数を発生させます。通常の乱数と異なり同一時間のフレームで
常に同じ値が出るように乱数を発生させます。
※obj.を省略してrand()のみでも使用出来ます。
st_num:乱数の最小値ed_num:乱数の最大値seed:乱数の種(省略時はオブジェクト毎に異なる乱数になります。プラスの値を指定すると種が同じでもオブジェクト毎に異なる乱数になり、マイナスの値では種が同じならば全てのオブジェクトで同じ乱数になります)frame:フレーム番号(省略時は現在のフレームになります)
例:
obj.rand(10, 20)obj.rand1([seed,frame])
0.0以上1.0未満の乱数を発生させます。通常の乱数と異なり同一時間のフレームで常に同じ値が出るように乱数を発生させます。
※obj.を省略してrand1()のみでも使用出来ます。
seed:乱数の種(省略時はオブジェクト毎に異なる乱数になります。プラスの値を指定すると種が同じでもオブジェクト毎に異なる乱数になり、マイナスの値では種が同じならば全てのオブジェクトで同じ乱数になります)frame:フレーム番号(省略時は現在のフレームになります)
例:
obj.rand1()obj.setoption(name,value)
現在のオブジェクトの各種オプションを設定します。
※スクリプトの呼び出し毎に指定する必要があります。
name:オプション名value:オプション値
裏面を表示しない
obj.setoption("culling",value)
value:0=表示 / 1=非表示
カメラの方向を向く
obj.setoption("billboard",value)
value:0=向かない / 1=横方向のみ / 2=縦方向のみ / 3=向く
合成モード
obj.setoption("blend",value[,option])
value:"none":通常"add":加算"sub":減算"mul":乗算"screen":スクリーン"overlay":オーバーレイ"light":比較(明)"dark":比較(暗)"brightness":輝度"chroma":色差"shadow":陰影"light_dark":明暗"diff":差分- 以下は仮想バッファ専用の合成モードです。
"alpha_add":色情報は加重平均してアルファ値は加算します"alpha_max":色情報は加重平均してアルファ値は大きい方を採用します"alpha_sub":色情報は何もせずにアルファ値を減算します"alpha_add2":色情報は重ね合わせしてアルファ値は加算します
※旧スクリプトファイル形式の数値指定も利用できます。
※合成モードを利用すると描画処理が重くなります。
描画先を仮想バッファに変更する
obj.setoption("drawtarget","tempbuffer"[,w,h])
w,h:仮想バッファのサイズ(省略時は初期化しません)
描画先を仮想バッファにするとobj.draw(),obj.drawpoly()での描画が仮想バッファに対して行われます。
この場合はオブジェクトの持っている座標等の設定は反映せず引数の座標そのままで描画されます。
サイズを指定すると仮想バッファを透明色で初期化します。
仮想バッファは全てのオブジェクトで共用になります。
描画先をフレームバッファに変更する
obj.setoption("drawtarget","framebuffer")
obj.draw(),obj.drawpoly()の描画先をフレームバッファにします。
フレームバッファに対してdraw()等で描画を行っていない場合にはsetoption()で変更しなくてもスクリプト終了後には自動的にフレームバッファに対しての描画となります。
スクリプト内でフレームバッファに描画されたかのステータスを変更する
obj.setoption("draw_state",flag)
flag:true:描画済み /false:未描画
オブジェクトのフォーカス枠モード
obj.setoption("focus_mode",value)
value:"fixed_size":大きさ固定の枠にする
カメラのパラメータを設定する
カメラの各種パラメータを設定します。
カメラがエディットモードの時は反映されません。
※カメラ効果のみ使用可obj.setoption("camera_param",cam)
cam:カメラのパラメータ(テーブル).x:カメラの座標X.y:カメラの座標Y.z:カメラの座標Z.tx:カメラの目標座標X.ty:カメラの目標座標Y.tz:カメラの目標座標Z.rz:カメラの傾き.ux:カメラの上方向単位ベクトルX.uy:カメラの上方向単位ベクトルY.uz:カメラの上方向単位ベクトルZ.d:カメラからスクリーンまでの距離(焦点距離)
例:
cam = obj.getoption("camera_param")サンプラーモード
obj.draw(),obj.drawpoly()描画時のサンプラーを変更します。
※obj.drawpoly()でuv座標を引数で指定した場合はuv座標が領域範囲でクリップされます ※互換対応obj.setoption("sampler",value)
value:"clip":領域外は透明色 ※obj.draw()のデフォルト設定"clamp":領域外は一番外側の色 ※obj.drawpoly()のデフォルト設定"loop":領域外はループ"mirror":領域外は領域を反転しながらループ"dot":拡大縮小補間をしない(領域外は透明色)
※省略時はデフォルト設定になります
obj.getoption(name,...)
現在のオブジェクトの各種オプションを取得します。
name:オプション名
トラックバーの移動モード
obj.getoption("track_mode",value)
value:トラックバーの変数名または番号--track@変数名:で定義した場合は変数名を指定します--track0:で定義した場合は番号を指定します- 戻り値:移動無し=0
移動無し以外の場合は移動モードの名称を返却
例:
--track@vx:X速度,-10,10,0
obj.getoption("track_mode","vx")オブジェクトの区間の数
obj.getoption("section_num")
- 戻り値:区間の数(中間点の数+1)
スクリプト名を取得する
obj.getoption("script_name"[,value][,skip])
value:フィルタ効果の上下の相対位置(0は自分/マイナスは上/プラスは下)skip:無効になっているフィルタ効果をスキップするか(true:する /false<デフォルト>:しない )- 戻り値:スクリプト名(対象がスクリプト以外なら空のテキスト)
例:
if obj.getoption("script_name") == obj.getoption("script_name", -1) thenGUIの表示状態を調べる
obj.getoption("gui")
- 戻り値:
true:表示 /false:非表示
※動画の出力中は非表示状態になります。
カメラ制御状態を取得する
obj.getoption("camera_mode")
- 戻り値:0=カメラ制御対象外 / 0以外=カメラ制御対象
補注
実際にはtrue/falseで返されます。
カメラのパラメータを取得する
obj.getoption("camera_param")
- 戻り値:カメラのパラメータ(テーブル)
※テーブルの内容はobj.setoption("camera_param")と同じです。
例:
cam = obj.getoption("camera_param")個別オブジェクトが有効かを調べる
obj.getoption("multi_object")
- 戻り値:
true:有効 /false:無効
obj.getvalue(target[,time,section])
現在のオブジェクトの設定値を取得します。
target:設定種別0:トラックバー0の値1:トラックバー1の値2:トラックバー2の値3:トラックバー3の値"x":基準座標X1"y":基準座標Y1"z":基準座標Z1"rx":基準X軸回転角度1"ry":基準Y軸回転角度1"rz":基準Z軸回転角度1"cx":基準中心座標X1"cy":基準中心座標Y1"cz":基準中心座標Z1"sx":基準拡大率X(1.0=等倍)1"sy":基準拡大率Y(1.0=等倍)1"sz":基準拡大率Z(1.0=等倍)1"zoom":基準拡大率(100=等倍)1、2
※obj.zoom(1.0=等倍)と異なっているので注意 ※互換対応"aspect":基準アスペクト比(-1.0~1.0/プラス=横縮小/マイナス縦縮小)1、2 ※互換対応"alpha":基準不透明度(0.0~1.0/0.0=透明/1.0=不透明)1"time":オブジェクト基準の時間"layer7.x":レイヤー7のオブジェクトの基準座標X
※layer[レイヤー番号].[設定種別]で別レイヤーのオブジェクトの値を取得出来ます
※layer[レイヤー番号]でオブジェクトの有無が確認出来ます(true/false)"scenechange":シーンチェンジでの表示割合(0.0~1.0) シーンチェンジのみ使用可
※使い方はシーンチェンジスクリプトの例を参照してください
time:どの時点の値を取得するかの時間(秒)(省略時は現時間)section:時間の基準となる区間の番号(省略時は開始点)0:開始点1:最初の中間点2:2個目の中間点-1:終了点
- 上記の基準xxxxはオブジェクトの出力項目(標準描画等)の設定値になります
- zoom、aspectは基準拡大率XYZから算出した値になります
obj.setanchor(name,num[,option,..])
アンカーポイントを表示します。
この関数を呼び出した時にアンカーポイントの表示設定とアンカーが移動していた場合の変数への反映を行います。
呼び出し順序や回数を変更すると正しく反映されない場合があります。
name:--value、--dialogの配列で定義されている座標を格納する変数名を指定します。※変数名を文字列として指定"track"を指定すると--track0から指定されているトラックバーの始点終点中間点の値を参照します。
※直接テーブル変数名を指定するとアンカー表示や移動なしで線だけを表示します。num:アンカーポイントの数を指定します。name="track"の場合は0を指定して下さい。アンカーポイント数は開始終了中間点の数になります。option:各種オプションを列挙出来ます。"line":アンカーポイントを線で結びます。"loop":アンカーポイントを線で結び一周させます。"star":アンカーポイントをオブジェクトの中心とそれぞれ線で結びます。"arm":アンカーポイントとオブジェクトの中心を線で結びます。"color":上記オプションの線の色を変更します。後続の引数に色(0x000000~0xffffff)を指定します。"inout":上記オプションの線の表示をIN,OUT側の2個として表示します。(アンカー数は半々になります)"xyz":アンカーポイントを3D座標で制御します。※デフォルトは2D座標
※カメラ制御+シャドーで使用する場合にプレビューで影部分が少しずれる場合があります。
- 戻り値:取得したアンカーポイントの数
例:
obj.setanchor("pos", 3)
n = obj.setanchor("track", 0, "line")obj.getpixel(x,y[,type])
現在のオブジェクトのピクセル情報を取得します。
引数なしで呼ぶとオブジェクトのピクセル数を取得できます。
※getpixel()はVRAMアクセスを低減する為にキャッシュしたものから値を返却します。
状況によってキャッシュが更新されずに正しい値が取得出来ない場合があります。(draw,pixel系の描画関連)
obj.pixeloption("get",xxx)を処理することで能動的にキャッシュを破棄することが出来ます。
x,y:取得するピクセルの座標type:ピクセル情報のタイプ("col"、"rgb")
※省略時はobj.pixeloption("type")で指定したタイプ(通常は"col")- 戻り値:
タイプが
"col"の場合
色情報(0x000000~0xffffff)と不透明度(0.0=透明/1.0=不透明)AviUtl2 Luacol, a = obj.getpixel(0, 0, "col")タイプが
"rgb"の場合
各8bit(0~255)のRGBA情報AviUtl2 Luar, g, b, a = obj.getpixel(0, 0, "rgb")タイプが
"yc"の場合
YCbCr旧内部形式AviUtl2 Luay, cb, cr, a = obj.getpixel(0, 0, "yc")引数なし
横、縦のピクセル数AviUtl2 Luaw, h = obj.getpixel()
obj.putpixel(x,y,...)
現在のオブジェクトのピクセル情報を書き換えます。
引数なしで呼ぶとオブジェクトのピクセル数を取得できます。
受け渡すピクセル情報のタイプは obj.pixeloption("type") で指定したタイプになります。
※putpixel()はピクセル毎にコンピュートシェーダーで実行するので処理は速くないです。
x,y:書き換えるピクセルの座標- 色情報:
- タイプが
"col"の場合
色情報(0x000000~0xffffff)と不透明度(0.0=透明/1.0=不透明)obj.putpixel(0,0,col,a) - タイプが
"rgb"の場合
各8bit(0~255)のRGBA情報obj.putpixel(0,0,r,g,b,a) - タイプが
"yc"の場合
YCbCr内部形式obj.putpixel(0,0,y,cb,cr,a)
- タイプが
obj.copypixel(dst_x,dst_y,src_x,src_y)
現在のオブジェクトのピクセル情報をコピーします。
※copypixel()はピクセル毎にコンピュートシェーダーで実行するので処理は速くないです。
dst_x,dst_y:コピー先の座標src_x,src_y:コピー元の座標
obj.pixeloption(name,value)
obj.getpixel(),obj.putpixel(),obj.copypixel() の処理オプションを設定します。
※スクリプトの呼び出し毎に指定する必要があります。
name:オプション名value:オプション値
ピクセル情報タイプを指定する
obj.pixeloption("type",value)
value:"col"/"rgb"/"yc"
ピクセル情報の読み出し先を指定する
obj.pixeloption("get",value)
value:"object":オブジェクト /"framebuffer":フレームバッファ
ピクセル情報の書き込み先を指定する
obj.pixeloption("put",value)
value:"object":オブジェクト /"framebuffer":フレームバッファ
書き込む時のブレンドタイプを指定する
obj.pixeloption("blend",value)
value:引数なし=置き換え / 0=通常 / 1=加算 / 2=減算 / 3=乗算
obj.getpixeldata(target[,format])
画像バッファからRGBA(32bit)形式でデータを読み出します。
この関数はスクリプトモジュールやDLLを利用して画像処理をする為のものです。
※VRAMからデータを取得するので処理は速くないです。
target:読み込む画像バッファ"object":オブジェクト"tempbuffer":仮想バッファ"cache:xxxx":キャッシュバッファ(xxxxは任意の名前)"framebuffer":フレームバッファ
format:画像データのフォーマット ※デフォルトはRGBA32bit"rgba":RGBA32bit"bgra":BGRA32bit
- 戻り値:画像データのポインタ(ユーザーデータ)、横、縦のピクセル数
例:
data, w, h = obj.getpixeldata("object", "rgba")obj.putpixeldata(target,data,w,h[,format])
RGBA(32bit)形式のデータを画像バッファへ書き込みます。
この関数はスクリプトモジュールやDLLを利用して画像処理をする為のものです。
※VRAMへデータを書き込むので処理は速くないです。
target:書き込む画像バッファ"object":オブジェクト"tempbuffer":仮想バッファ"cache:xxxx":キャッシュバッファ(xxxxは任意の前)"framebuffer":フレームバッファ(同サイズのみ対応)
data:画像データのポインタ(ユーザーデータ)w:横のピクセル数h:縦のピクセル数format:画像データのフォーマット ※デフォルトはRGBA32bit"rgba":RGBA32bit"bgra":BGRA32bit
例:
obj.putpixeldata("object", data, w, h, "rgba")obj.getaudio(buf,file,type,size)
音声ファイルからオーディオデータを取得します。
オブジェクトの時間を基準とした位置のデータを取得します。
buf:データを受け取るテーブルを指定します。
※nilを指定すると第3戻り値でテーブルを返します。file:音声ファイル名("audiobuffer"を指定すると編集中の音声データが取得出来ます)type:取得データの種類"pcm":PCMサンプリングデータ(16bitモノラルのスケール基準)"spectrum":周波数毎の音量データ"fourier":音声を離散フーリエ変換したデータ(sizeの指定は不要)
※元周波数の1/2048~1/2まで1/2048刻みの1024個のデータになります"xxxx.l":左チャンネルの音声で取得(xxxxは取得データ種別)"xxxx.r":右チャンネルの音声で取得(xxxxは取得データ種別)
size:取得するデータ数(指定した値より少ない場合があります)- 戻り値:取得したデータ数、サンプリングレート
例:
n = obj.getaudio(buf, "audiobuffer", "spectrum", 32)
n, rate = obj.getaudio(buf, "c:\\test.wav", "pcm", 1000)
n, rate, buf = obj.getaudio(nil, "c:\\test.wav", "pcm.r", 1000)obj.copybuffer(dst,src)
画像バッファをコピーします。
※コピー先の画像バッファのサイズはコピー元のサイズに変更されます。
dst:コピー先のバッファ"tempbuffer":仮想バッファ"object":オブジェクト"cache:xxxx":キャッシュバッファ(xxxxは任意の名前)"framebuffer":フレームバッファ(コピー元が同サイズのオブジェクト、仮想バッファ、キャッシュバッファのみ対応)
src:コピー元のバッファ"framebuffer":フレームバッファ"object":オブジェクト"tempbuffer":仮想バッファ"cache:xxxx":キャッシュバッファ(xxxxは任意の名前)"image:xxxx":画像ファイル(xxxxはスクリプトフォルダからの相対パスの画像ファイル名)
- 戻り値:
true:成功 /false:失敗
キャッシュバッファの名前は全てのオブジェクトで共通となります。
キャッシュバッファは1フレームの描画毎に破棄されます。
obj.clearbuffer(target[,color])
画像バッファをクリアします。
target:クリアするバッファ名"object":オブジェクト"tempbuffer":仮想バッファ"framebuffer":フレームバッファ"cache:xxxx":キャッシュバッファ(xxxxは任意の名前)
color:色(0x000000~0xffffff) ※未指定の場合は透明色
obj.pixelshader(name,target,{resource,...}[,{constant,...},blend,sampler])
ピクセルシェーダーを実行します。
name:シェーダーの登録名 ※登録したシェーダー名を文字列で指定します。target:出力先のバッファ名
Direct3Dのレンダーターゲットに設定されます。"object":オブジェクト"tempbuffer":仮想バッファ"framebuffer":フレームバッファ"cache:xxxx":キャッシュバッファ(xxxxは任意の名前)
resource:参照するバッファ名の配列(1つの場合は直接バッファ名で指定出来ます)
Direct3Dのシェーダーリソース(t0~)に設定されます。
※レンダーターゲットと同一の場合は複製して設定されます"object":オブジェクト"tempbuffer":仮想バッファ"framebuffer":フレームバッファ"cache:xxxx":キャッシュバッファ(xxxxは任意の名前)"random":乱数バッファ(0.0~1.0の乱数値の256x256の領域)※DXGI_FORMAT_R32_FLOAT(r値のみ)になります
constant:参照する定数の配列
Direct3Dの定数バッファ(b0)にfloatの配列として設定されます。blend:出力先へのブレンド方法
Direct3DのBlendStateを変更します。※デフォルトは"copy""copy":出力をそのままコピーします"mask":α値のみを乗算します ※RGB値は利用されません"draw":出力をアルファブレンドします"add":出力を加算合成します
sampler:サンプラーの種別
Direct3DのSamplerState(s0)を設定します。※デフォルトは未設定"clip":領域外(0.0~1.0の範囲外)は透明色"clamp":領域外は境界の色"loop":領域外は領域をループ"mirror":領域外は領域を反転しながらループ"dot":拡大縮小補間をしない(領域外は透明色)
obj.computeshader(name,{target},{resource,...}[,{constant,...},countX,countY,countZ,sampler])
コンピュートシェーダーを実行します。
name:シェーダーの登録名 ※登録したシェーダー名を文字列で指定します。target:読み書き先のバッファ名の配列(1つの場合は直接バッファ名で指定出来ます)
Direct3DのUnorderedAccessリソース(u0~)に設定されます。"object":オブジェクト"tempbuffer":仮想バッファ"framebuffer":フレームバッファ"cache:xxxx":キャッシュバッファ(xxxxは任意の名前)
resource:参照するバッファ名の配列(1つの場合は直接バッファ名で指定出来ます)
Direct3Dのシェーダーリソース(t0~)に設定されます。
※UnorderedAccessと同一の場合は複製して設定されます"object":オブジェクト"tempbuffer":仮想バッファ"framebuffer":フレームバッファ"cache:xxxx":キャッシュバッファ(xxxxは任意の名前)"random":乱数バッファ(0.0~1.0の乱数値の256x256の領域)※DXGI_FORMAT_R32_FLOAT(r値のみ)になります
constant:参照する定数の配列
Direct3Dの定数バッファ(b0)にfloatの配列として設定されます。countX:X軸スレッドグループ数 ※未指定の場合は1countY:Y軸スレッドグループ数 ※未指定の場合は1countZ:Z軸スレッドグループ数 ※未指定の場合は1sampler:サンプラーの種別
Direct3DのSamplerState(s0)を設定します。※デフォルトは未設定"clip":領域外(0.0~1.0の範囲外)は透明色"clamp":領域外は境界の色"loop":領域外は領域をループ"mirror":領域外は領域を反転しながらループ"dot":拡大縮小補間をしない(領域外は透明色)
obj.getpoint(target[,option])
トラックバーの値を取得します。
トラックバー移動スクリプトのみ使用出来ます。
target:- 整数=各区間でのトラックバー値
0=開始点 / 1=最初の中間点 / 2=2個目の中間点 / ...
optionで取得する関連トラックの相対位置を指定することが出来ます。 "index":現在の区間での位置を取得します。
開始点と最初の中間点の間の場合は0.5等の少数で表されます。"num":開始終了中間点の総数を取得します。"time":現在の時間を取得します。
optionで時間を取得する区間を指定することができます。"accelerate":加速度が設定されているかを取得します。
戻り値:true:有効 /false:無効"decelerate":減速度が設定されているかを取得します。
戻り値:true:有効 /false:無効"param":トラックバーの設定値を取得します。"link":関連トラックでのインデックスと総数を取得します。index, num = obj.getpoint("link")
関連トラックは座標等で他のトラックの値を取得する為に使用します。
X座標での戻り値:0,3 / Y座標での戻り値:1,3 / Z座標での戻り値:2,3"framerate":フレームレートを取得します。"timecontrol":時間制御を反映した現在の値を取得します。option:取得する値の種別"index"= 時間制御を反映した区間での位置を取得"time"= 時間制御を反映した時間を取得
- 整数=各区間でのトラックバー値
obj.getinfo(name,...)
各種環境情報を取得します。
name:取得する情報の名前
スクリプトフォルダのパスを取得する
obj.getinfo("script_path")- 戻り値:スクリプトフォルダのパス
動画の出力中かを調べる
obj.getinfo("saving")- 戻り値:
true:出力中 /false:非出力中
最大画像サイズを取得する
max_x, max_y = obj.getinfo("image_max")- 戻り値:最大画像サイズ(横幅,高さ)
アプリ起動からの経過時間を取得する
sec = obj.getinfo("clock")- 戻り値:アプリ起動からの経過時間(秒)
※パフォーマンスカウンターで計測しています
スクリプトの処理時間を取得する
msec = obj.getinfo("script_time")- 戻り値:スクリプト実行開始からの経過時間(ミリ秒)
※パフォーマンスカウンターで計測しています
バージョン情報を取得
version = obj.getinfo("version")- 戻り値:本体のバージョン番号
obj.data(name)
汎用データ領域を取得します。
※スクリプトモジュールやDLL向けになります。
name:汎用データ領域の登録名戻り値:汎用データ領域のポインタ(ユーザーデータ)
obj.module(name)
スクリプトモジュール(.mod2)の関数を取得します。
name:モジュール名(スクリプトモジュールのファイル名本体)- 戻り値:スクリプトモジュールの関数テーブル
例:
local func = obj.module("ScriptModule")
local total = func.sum(1, 2, 3)obj.interpolation(time,x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3)
連続した点p0(x0,y0,z0),p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3)から
時間time(0~1)に応じたp1,p2間の座標を計算します。
※y,z座標は省略することが出来ます。
例:
x, y, z = obj.interpolation(time, x0, y0, z0, x1, y1, z1, x2, y2, z2, x3, y3, z3)
x, y = obj.interpolation(time, x0, y0, x1, y1, x2, y2, x3, y3)RGB(r,g,b)
色情報(0x000000~0xffffff)と赤(0~255),緑(0~255),青(0~255)各要素の相互変換をします。
r,g,bを2つ指定した場合はオブジェクトの時間経過に応じて色を変化させます。
例:
col = RGB(r, g, b)
r, g, b = RGB(col)
col = RGB(r1, g1, b1, r2, g2, b2)HSV(h,s,v)
色情報(0x000000~0xffffff)と色相(0~360),彩度(0~100),明度(0~100)各要素の相互変換をします。
h,s,vを2つ指定した場合はオブジェクトの時間経過に応じて色を変化させます。
例:
col = HSV(h, s, v)
h, s, v = HSV(col)
col = HSV(h1, s1, v1, h2, s2, v2)OR(a,b) / AND(a,b) / XOR(a,b)
OR,AND,XORのビット演算をします。
例:
c = OR(a, b)SHIFT(a,shift)
算術シフトをします。shiftが正の数だと左シフト、負の数だと右シフトになります。
例:
b = SHIFT(a, 1)rotation(x0,y0,x1,y1,x2,y2,x3,y3,zoom,r)
原点(0,0)を中心に指定の座標を拡大縮小回転します。
x0,y0:頂点0の座標x1,y1:頂点1の座標x2,y2:頂点2の座標x3,y3:頂点3の座標zoom:拡大率(1.0=等倍)r:回転角度(360.0で一回転)
例:
x0, y0, x1, y1, x2, y2, x3, y3 = rotation(x0, y0, x1, y1, x2, y2, x3, y3, zoom, r)debug_print(text)
指定の文字をログに出力します。デバッグ用です。
※スクリプト実行エラーのメッセージもログに出力されます。
※ログの設定からOutputDebugString等にも出力されるように設定を変更出来ます。
text:デバッグ表示文字
例:
debug_print("デバッグ表示")