
- 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)

        ○フォルダ選択項目を定義
                スクリプトファイルの先頭で'--folder@変数名:項目名'のように指定すると
                フォルダ選択項目が有効になります。

                --folder@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@変数名:項目名,デフォルト値'のように指定するとテキスト設定項目が有効になります。
                '--string@変数名:項目名,デフォルト値'のように指定すると1行のテキスト設定項目が定義できます。

                --text@txt:テキスト,デフォルト文字\n次の行
                --string@str:文字列,デフォルト文字
                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")

        ○設定グループを定義
                スクリプトファイルの先頭で'--group:グループ名,デフォルト表示状態(true/false)'のように指定すると
                以降の設定項目がグループ化されます。デフォルト表示状態は省略できます。
                ※'--group'(グループ名未指定)の指定でグループの終端を定義することが出来ます。

                --group:座標

        ○オブジェクト追加メニューのラベルを定義
                スクリプトファイルの先頭で'--label:ラベル名'のように指定すると
                オブジェクト追加メニューの階層のラベルの初期値を設定できます。

                --label:加工

        ○フィルタオブジェクト対応
                スクリプトファイル(*.anm2)の先頭で'--filter'のように指定すると
                フィルタオブジェクトに対応することが出来ます。
                ※obj.getinfo("filter")を利用してフィルタオブジェクト処理を分けることが出来ます。

                フィルタオブジェクトではオブジェクトにフレームバッファの画像が入っています。
                ※フレームバッファのデータは不定です。一時バッファとして利用出来ます。

                フィルタオブジェクトでは下記の制限があります。
                ◇オブジェクトのサイズを変更しないこと ※終了時に変わっていなければ大丈夫
                ◇オブジェクトの変数を変更しないこと ※終了時に変わっていなければ大丈夫
                ◇obj.draw()以降のフィルタが継続する
                ◇引数無しのobj.effect()は処理されない
                ※その他もあると思います。。

        ○スクリプト種別を指定
                スクリプトファイルの先頭で'--script:種別'のように指定すると
                スクリプトの種別(luaJIT,lua)を指定できます。
                未指定の場合はluaJITになります。※旧スクリプトファイルではluaになります
                
                --script:lua

        ○スクリプトの情報を指定
                スクリプトファイルの先頭で'--information:ラベル名'のように指定すると
                スクリプトの情報を設定できます。

                --information:テストスクリプト ver2.00 by Kenkun

        ○スクリプトが必要な本体のバージョン番号を指定
                スクリプトファイルの先頭で'--require:必要な本体のバージョン番号'のように指定すると
                スクリプトが必要な本体のバージョンを設定できます。

                --require:2003500

        ○ピクセルシェーダーを定義
                スクリプトファイルの先頭で'--[[pixelshader@登録名:'のような複数行コメントに
                ピクセルシェーダーをHLSLで記述できます。
                ※登録名がエントリーポイントになります。
                ピクセルシェーダーの入力は下記が利用できます。
                    float4 psmain(float4 pos : SV_Position) : SV_Target
                    float4 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も利用できます。個々の設定項目が作成されます。


- 変数 -

        対象オブジェクトの情報が以下の変数に入ります。

        obj.ox : 基準座標からの相対座標X
        obj.oy : 基準座標からの相対座標Y
        obj.oz : 基準座標からの相対座標Z
        obj.rx : X軸回転角度(360.0で一回転)
        obj.ry : Y軸回転角度(360.0で一回転)
        obj.rz : Z軸回転角度(360.0で一回転)
        obj.cx : 中心の相対座標X
        obj.cy : 中心の相対座標Y
        obj.cz : 中心の相対座標Z
        obj.sx : X座標の拡大率(1.0=等倍)
        obj.sy : Y座標の拡大率(1.0=等倍)
        obj.sz : Z座標の拡大率(1.0=等倍)
        obj.zoom : 拡大率(1.0=等倍) ※互換対応
        obj.aspect : アスペクト比(-1.0～1.0/プラス=横縮小/マイナス縦縮小) ※互換対応
        ※zoom,aspectは旧スクリプトファイルの利用かで算出反映処理が異なります
        obj.alpha : 不透明度(0.0～1.0/0.0=透明/1.0=不透明)
        ※上記の各項目は現時点のオブジェクトの設定値になります。出力項目(標準描画等)の設定値とは別のものになります。
        obj.x : 表示基準座標X (ReadOnly)
        obj.y : 表示基準座標Y (ReadOnly)
        obj.z : 表示基準座標Z (ReadOnly)
        obj.w : 画像サイズW (ReadOnly)
        obj.h : 画像サイズH (ReadOnly)
        ※w,hは常にオブジェクトのピクセル数になります
        obj.screen_w : スクリーンサイズW (ReadOnly)
        obj.screen_h : スクリーンサイズH (ReadOnly)
        obj.framerate : フレームレート (ReadOnly)
        obj.frame : オブジェクト基準での現在のフレーム番号 (ReadOnly)
        obj.time : オブジェクト基準での現在の時間(秒) (ReadOnly)
        ※オブジェクトがシーンチェンジ対象の場合はframe,timeがtotalframe,totaltimeを超える場合があります
        obj.totalframe : オブジェクトの総フレーム数 (ReadOnly)
        obj.totaltime : オブジェクトの総時間(秒) (ReadOnly)
        obj.layer : オブジェクトが配置されているレイヤー (ReadOnly) ※描画対象のオブジェクトのレイヤー位置
        obj.index : 複数オブジェクト時の番号 ※個別オブジェクト用
        obj.num : 複数オブジェクト時の数(1=単体オブジェクト/0=不定) ※個別オブジェクト用
        obj.id : オブジェクトのID (ReadOnly) ※アプリ起動毎の固有ID
        ※描画対象のオブジェクトの固有ID
        obj.effect_id : オブジェクトの内の対象エフェクトのID (ReadOnly) ※アプリ起動毎の固有ID
		※処理対象のフィルタ効果、オブジェクト入出力の固有ID


- 関数 -

        スクリプトには以下の関数が追加されています。
  
        ○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      : 相対座標X
                oy      : 相対座標Y
                oz      : 相対座標Z
                zoom    : 拡大率(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)

        ○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("textlayout",text[,speed,time])
                        obj.load("text")で読み込むテキストの画像サイズを取得します。※引数は同じです
                        現在のオブジェクト情報を更新しないでサイズの返却のみをします。
                        戻り値  : 横、縦のピクセル数
                        例：w,h = obj.load("textlayout","この文字を画像として読み込んだ時のサイズ")
                ◇図形
                        図形を読み込みます。
                        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,bold,italic,charspacing,linespacing])
                obj.load()のテキストで使うフォントを指定します。
                ※スクリプトの呼び出し毎に指定する必要があります。
                name    : フォント名
                size    : フォントサイズ
                type    : 文字の装飾(0～6)
                          0=標準文字 / 1=影付き文字 / 2=影付き文字(薄)
                          3=縁取り文字 / 4=縁取り文字(細) / 5=縁取り文字(太) / 6=縁取り文字(角) 
                col1    : 文字の色(0x000000～0xffffff)
                col2    : 影・縁の色(0x000000～0xffffff)
		        bold    : 太文字か？(true / false<デフォルト>)
                italic  : 斜体か？(true / false<デフォルト>)
                charspacing : 文字間隔
                linespacing : 行間隔

        ○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) then

                ◇GUIの表示状態を調べる
                        obj.getoption("gui")
                        戻り値  : true=表示 / false=非表示
                        ※動画の出力中は非表示状態になります。

                ◇カメラ制御状態を取得する
                        obj.getoption("camera_mode")
                        戻り値  : 0=カメラ制御対象外 / 0以外=カメラ制御対象

                ◇カメラのパラメータを取得する
                        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の値
                          "track.xxx"=変数名xxxのトラックバーの値
                          ※track.[変数名]で変数名付きトラックバーの値を取得出来ます
                          "x"=基準座標X
                          "y"=基準座標Y
                          "z"=基準座標Z
                          "rx"=基準X軸回転角度
                          "ry"=基準Y軸回転角度
                          "rz"=基準Z軸回転角度
                          "cx"=基準中心座標X
                          "cy"=基準中心座標Y
                          "cz"=基準中心座標Z
                          "sx"=基準拡大率X(1.0=等倍)
                          "sy"=基準拡大率Y(1.0=等倍)
                          "sz"=基準拡大率Z(1.0=等倍)
                          "zoom"=基準拡大率(100=等倍) ※obj.zoom(1.0=等倍)と異なっているので注意 ※互換対応
                          "aspect"=基準アスペクト比(-1.0～1.0/プラス=横縮小/マイナス縦縮小) ※互換対応
                          ※zoom,aspectは基準拡大率XYZから算出した値になります
                          "alpha"=基準不透明度(0.0～1.0/0.0=透明/1.0=不透明)
                          ※上記の基準xxxxはオブジェクトの出力項目(標準描画等)の設定値になります
                          "time"=オブジェクト基準の時間
                          "frame_s"=全体基準のオブジェクトの開始フレーム(0からの整数)
                          "frame_e"=全体基準のオブジェクトの終了フレーム(0からの整数)
                          "layer7.x"=レイヤー7のオブジェクトの基準座標X
                          ※layer[レイヤー番号].[設定種別]で別レイヤーのオブジェクトの値を取得出来ます
                          ※layer[レイヤー番号]でオブジェクトの有無が確認出来ます(true/false)
                          "scenechange"=シーンチェンジでの表示割合(0.0～1.0) シーンチェンジのみ使用可
                          ※使い方はシーンチェンジスクリプトの例を参照してください
                time    : どの時点の値を取得するかの時間(秒)(省略時は現時間)
                section : 時間の基準となる区間の番号(省略時は開始点)
                          0=開始点 / 1=最初の中間点 / 2=2個目の中間点 / -1=終了点

        ○obj.getvalue(effect,item[,time,section])
                現在のオブジェクトの設定値を取得します。
                effect  : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
                          同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
                item    : 対象の設定項目の名称 (エイリアスファイルのキーの名称) ※名称が数値の場合は利用出来ません
                time    : どの時点の値を取得するかの時間(秒)(省略時は現時間)
                section : 時間の基準となる区間の番号(省略時は開始点)
                          0=開始点 / 1=最初の中間点 / 2=2個目の中間点 / -1=終了点
                戻り値  : トラックバーの場合は指定時間の設定値
                          トラックバー以外の場合はエイリアスファイルの設定値と同じフォーマットの値
                例：font = obj.getvalue("テキスト","フォント")
                    range = obj.getvalue("ぼかし:1","範囲")

        ○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=不透明)
                                col,a = obj.getpixel(0,0,"col")
                          タイプが"rgb"の場合
                                各8bit(0～255)のRGBA情報
                                r,g,b,a = obj.getpixel(0,0,"rgb")
                          タイプが"yc"の場合
                                YCbCr旧内部形式
                                y,cb,cr,a = obj.getpixel(0,0,"yc")
                          引数なし
                                横、縦のピクセル数
                                w,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.clearbuffer(target,w,h[,color])
                画像バッファのサイズを変更してクリアします。
                target  : クリアするバッファ名(フレームバッファはサイズを変更出来ません)
                w       : 横のピクセル数
                h       : 縦のピクセル数
                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軸スレッドグループ数 ※未指定の場合は1
                countY    : Y軸スレッドグループ数 ※未指定の場合は1
                countZ    : Z軸スレッドグループ数 ※未指定の場合は1
                sampler   : サンプラーの種別
                            Direct3DのSamplerState(s0)を設定します。※デフォルトは未設定
                            "clip"      = 領域外(0.0～1.0の範囲外)は透明色
                            "clamp"     = 領域外は境界の色
                            "loop"      = 領域外は領域をループ
                            "mirror"    = 領域外は領域を反転しながらループ
                            "dot"       = 拡大縮小補間をしない(領域外は透明色)

        ○obj.getpoint(target[,option,option2])
                トラックバーの値を取得します。
                トラックバー移動スクリプトのみ使用出来ます。
                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
                          "timecontrol" : 時間制御を反映した現在の値を取得します。
                                option : 取得する値の種別
                                "index" = 時間制御を反映した区間での位置を取得
                                "time"  = 時間制御を反映した時間を取得
                                "value" = 時間制御の時間位置(開始点=0.0/終了点=1.0)を取得
                                option2で取得する時間を指定することが出来ます。※未指定の場合は現在の時間
                          "framerate" : フレームレートを取得します。

        ○obj.getinfo(name,...)
                各種環境情報を取得します。
                name    : 取得する情報の名前

                ◇スクリプトフォルダのパスを取得する
                        obj.getinfo("script_path")
                        戻り値  : スクリプトフォルダのパス

                ◇フィルタオブジェクトの処理中かを調べる
                        obj.getinfo("filter")
                        戻り値  : true=フィルタオブジェクトの処理中

                ◇動画の出力中かを調べる
                        obj.getinfo("saving")
                        戻り値  : true=出力中 / false=非出力中

                ◇最大画像サイズを取得する
                        max_x,max_y = obj.getinfo("image_max")
                        戻り値  : 最大画像サイズ(横幅,高さ)

                ◇グリッド(BPM)の情報を取得する
                        tempo,beat,offset = obj.getinfo("bpm")
                        戻り値  : テンポ,拍子,基準時間

                ◇アプリ起動からの経過時間を取得する
                        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("デバッグ表示")


- 使用例 -

        ○テキスト内でスクリプトを使う例
                以下のテキストでオブジェクト時間のタイムカウンタが表示します。

                現在のオブジェクトの時間=<?mes(string.format("%02d:%02d.%02d",obj.time/60,obj.time%60,(obj.time*100)%100))?>

        ○オブジェクトの座標や角度を時間経過で変化させる例
                以下のスクリプトで時間と共に右方向に移動しながら右回転します。

                obj.ox = obj.ox + obj.time*10
                obj.rz = obj.rz + obj.time*360

        ○オブジェクトにフィルタ効果をかける例
                以下のスクリプトで時間と共に明るくなったり暗くなったりします。

                i = math.cos(obj.time*math.pi*2)*50
                obj.effect("色調補正","明るさ",100+i)

        ○オブジェクトを複数描画させる例
                以下のスクリプトでオブジェクトを円状に10個描画します。

                n = 10
                l = obj.w*2
                for i=0,n do
                  r = 360*i/n
                  x = math.sin(r*math.pi/180)*l
                  y = -math.cos(r*math.pi/180)*l
                  obj.draw(x,y,0,1,1,0,0,r)
                end

        ○アニメーション効果、カスタムオブジェクト等を1ファイルで複数登録する例
                スクリプトファイル(*.anm2,*.obj2,*.scn2,*.cam2,*.tra2)のファイル名の先頭を'@'にして
                以下のように各スクリプトの先頭に'@名前'のように定義すると
                複数のスクリプトを纏めて定義することが出来ます。
                ※script.anm2,script.obj2のスクリプトもこの形式になっています。

                ◇複数登録する場合のファイル内容 [@複数登録例.anm]
                @sample1
                --track0:速度,-10,10,10
                obj.ox = obj.ox + obj.track0*obj.time
                @sample2
                --track0:速度,-10,10,10
                obj.oy = obj.oy + obj.track0*obj.time

                ◇単独登録する場合のファイル内容 [単独登録例.anm]
                --track0:速度,-10,10,10
                obj.ox = obj.ox + obj.track0*obj.time

        ○シーンチェンジスクリプトの例
                以下のスクリプトで時間と共にクロスフェードします。
                シーンチェンジスクリプトではフレームバッファにシーンチェンジ後の画像
                オブジェクトにシーンチェンジ前の画像が入っていてどちらを表示するかの
                割合をobj.getvalue("scenechange")で取得して処理します。
                ※0ならオブジェクト、1ならフレームバッファ側になります。

                a = 1-obj.getvalue("scenechange")
                obj.draw(0,0,0,1,a)

        ○アンカーポイントの表示と座標の取得をする例
                以下のスクリプトでアンカーポイントの表示と座標の取得をします。

                ◇変数項目の配列を使う場合
                --value@pos:座標,{}
                num = 3
                obj.setanchor("pos",num,"loop");
                for i=0,num-1 do
                        x = pos[i*2+1]
                        y = pos[i*2+2]
                end
                ※3D座標の場合はXYZの3座標ずつ配列に入ります。
                ※pos={}は初期値を入れておくことも出来ます。

                ◇トラックバーを使う場合
                --track0:X,-1000,1000,0
                --track1:Y,-1000,1000,0
                --track2:Z,-1000,1000,0
                num = obj.setanchor("track",0,"xyz","line");
                for i=0,num-1 do
                        x = obj.getvalue(0,0,i)
                        y = obj.getvalue(1,0,i)
                        z = obj.getvalue(2,0,i)
                end

                ◇複数回のobj.setanchor()を使う場合
                --value@pos1:座標1,{}
                --value@pos2:座標2,{}
                obj.setanchor("pos1",4,"loop","color",RGB(0,255,255));
                obj.setanchor("pos2",2,"line","color",RGB(0,255,0));

        ○トラックバー移動スクリプトの例
                以下のスクリプトでトラックバーの値を開始点から終了点まで等速で移動させます。
                トラックバー移動スクリプトでは通常のオブジェクト関係の変数や関数は使用出来ません。
                スクリプトファイル(*.tra2)の先頭で'--twopoint'のように指定すると中間点を無視する設定になります。
                '--speed:加速初期値(0/1),減速初期値(0/1)'のように指定すると加減速の設定が出来るようになります。
                '--param:初期値'のように指定するとトラックバーの設定値が指定出来るようになります。
                '--param:項目名,初期値'のように指定すると設定ダイアログの項目名を指定することが出来ます。
                '--param'を複数行指定することで複数の設定値を持つことが出来ます。
                '--timecontrol'のように指定するとトラックバーの時間制御編集が出来るようになります。
                
                index,ratio = math.modf(obj.getpoint("index"))
                st = obj.getpoint(index);
                ed = obj.getpoint(index+1);
                return st + (ed-st)*ratio;

                ◇複数の設定値を指定した場合
                param1,param2 = obj.getpoint("param"); 

        ○ピクセルシェーダーを利用する例
               以下のスクリプトでオブジェクトの明るさを調整することが出来ます。

                --track@bright:明るさ,-100,100,0,0.01
                --[[pixelshader@psmain:
                cbuffer constant0 : register(b0) {
                    float bright;
                };
                float4 psmain(float4 pos : SV_Position) : SV_Target {
                    return float4(bright, bright, bright, 1);
                }
                ]]
                obj.pixelshader("psmain","object",nil,{bright/100},"add")


－ 更新履歴 －

        [2025/7/12] ver 2.00 beta2
        copybuffer()のコピー先種別を追加

        [2025/7/27] ver 2.00 beta4
        仮想バッファ、キャッシュバッファが正しく生成されない場合があるのを修正

        [2025/8/3]
        obj.effect()のパラメータ値を数値型で指定した場合の対策を追加

        [2025/8/10]
        obj.copybuffer()で画像ファイルのコピーが正しく反映されない場合があるのを修正
        obj.copybuffer()でオブジェクトを更新した時にobj変数が更新されていないのを修正
        オブジェクトの画像が無い状態でobj.drawpoly()を呼び出すと落ちる場合があるのを修正

        [2025/8/24]
        出力ログの内容によって落ちる場合があるのを修正
        obj.getpixel()のキャッシュ処理の修正と処理説明を追加
        obj.putpixel(),obj.copypixel()を追加
        obj.pixeloption()のオプションを一部追加
        obj.setoption()の合成モードの処理を一部修正

        [2025/8/30]
        トラックバー移動スクリプトでのobj.randのデフォルトの種の計算を修正
        テキストの個別オブジェクトの表示タイミングがobj変数に反映されないのを修正

        [2025/9/7]
        obj.setanchor()で直接テーブル変数を指定した場合に落ちるのを修正
        スクリプト制御に不要なluaのライブラリ関数を含めないように修正

        [2025/9/13]
        スクリプト制御、スクリプトファイルの種別で含めるライブラリを変更
        obj.copybuffer()でオブジェクトを更新した時に一部のobj変数の変更が破棄されるのを修正
        obj.layerの値を描画対象のオブジェクトのレイヤー番号となるように修正
        obj.drawpoly()の配列指定(座標+色+法線)が正しく描画出来ないのを修正
        obj.drawpoly()に頂点リストのテーブルで指定する方法を追加
        obj.getinfo("clock"),obj.getinfo("script_time")を追加

        [2025/9/21]
        obj.getvalue("layer.x")で指定したレイヤーにオブジェクトが無い場合は値を返却しないように修正
        シーンチェンジスクリプトでobj.setanchor()を利用出来るように修正
        設定項目の定義にテキスト設定項目(--text)を追加
        obj.getvalue()に基準中心座標("cx","cy","cz")の指定を追加

        [2025/9/27]
        テキスト設定項目に入力したダブルクォート文字が正しく変数に反映されないのを修正
        obj.getpixeldata(),obj.putpixeldata()を追加
        obj.getinfo("version")を追加

        [2025/10/5]
        テキスト設定項目に入力したバックスラッシュ文字が正しく変数に反映されないのを修正
        obj.idを追加

        [2025/10/12]
        obj.module()を追加
        obj.getaudio()に音声チャンネルの指定方法を追加

        [2025/10/19]
        オブジェクトが無い状態で引数無しのobj.getpixel()の返却が正しくないのを修正
        obj.getvalue()にオブジェクトの存在確認の指定方法を追加

        [2025/10/26]
        obj.rand()の最大最小値の引数の精度を修正
        obj.rand1()を追加

        [2025/11/1]
        obj.rand1()の乱数範囲を調整
        obj.pixelshader()にサンプラーの指定を追加
        ピクセルシェーダー定義の説明を追加
        チェックボックス項目定義にboolean型にする指定を追加
        obj.getoption("track_mode")の説明を追加

        [2025/11/2]
        '--dialog'の'/chk'をnumber型で返却するように修正
        obj.effect_idを追加

        [2025/11/8]
        グループ制御に追加したスクリプトのobj.draw()が正しく描画されないのを修正
        obj.getvalue("scenechange")の精度を修正
        obj.computeshader()にサンプラーの指定を追加
        obj.pixelshader(),obj.computeshader()のresourceに"random"を追加
        obj.data(),'--data'の定義を追加

        [2025/11/16]
        obj.sx,obj.sy,obj.szの項目を追加
        obj.getvalue()に基準拡大率("sx","sy","sz")の指定を追加

        [2025/11/22]
        obj.setoption("sampler")のサンプラーの種類を追加

        [2025/11/30]
        '--group'の定義を追加
        obj.getpoint("timecontrol")の引数を追加

        [2025/12/2]
        '--group'にグループの終端の設定方法を追加

        [2025/12/6]
        obj.getvalue()に"frame_s","frame_e"の指定を追加

        [2025/12/7]
        obj.getinfo("bpm")を追加

        [2025/12/14]
        フィルタオブジェクト対応向けの'--filter'の定義,obj.getinfo("filter")を追加

        [2025/12/27]
        フィルタオブジェクトからobj.effect()を利用した時にフィルタ効果として処理されないのを修正
        オブジェクトの出力が基本出力の時に仮想バッファへのobj.draw()が処理されないのを修正
        トラックバー移動スクリプトの'--param'を複数指定出来るようにした

        [2026/1/11]
        obj.getoption("gui")の返却が正しくないのを修正
        obj.clearbuffer()にサイズ変更の引数を追加

        [2026/1/12]
        '--folder'の定義を追加

        [2026/1/17]
        オブジェクトがシーンチェンジ対象の時のobj.frame,obj.timeの値を修正

        [2026/1/25]
        obj.getvalue()に"track.xxx"の指定方法を追加
        '--string'の定義を追加

        [2026/2/8]
        obj.idの値を描画対象のオブジェクトIDとなるように修正
        obj.getvalue()にエフェクト・設定項目名の指定方法を追加
        obj.setfont()に太文字,斜体,文字間隔,行間隔の引数を追加
        obj.load()に"textlayout"の指定を追加

        [2026/2/23]
        obj.load("textlayout")でオブジェクトのパラメータがクリアされていたのを修正

        [2026/2/28]
        obj.index,obj.numを変更出来るようにした
        '--require'の定義を追加


- Lua/LuaJITのバイナリについて -

        付属のlua.dllはLuaのサイトにあるバージョン5.1.4に
        5.1.4-2のパッチを当ててビルドしたものです。

        付属のluaJIT.dllはLuaJITのサイトにあるバージョン2.1をビルドしたものです。

        Luaのサイト
        http://www.lua.org/

        LuaJITのサイト
        https://luajit.org/


- Luaのライセンス -

        Lua License
        -----------

        Lua is licensed under the terms of the MIT license reproduced below.
        This means that Lua is free software and can be used for both academic
        and commercial purposes at absolutely no cost.

        For details and rationale, see http://www.lua.org/license.html .

        ===============================================================================

        Copyright (C) 1994-2008 Lua.org, PUC-Rio.

        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:

        The above copyright notice and this permission notice shall be included in
        all copies or substantial portions of the Software.

        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
        THE SOFTWARE.

        ===============================================================================


- LuaJITのライセンス -

        ===============================================================================
        LuaJIT -- a Just-In-Time Compiler for Lua. https://luajit.org/

        Copyright (C) 2005-2025 Mike Pall. All rights reserved.

        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:

        The above copyright notice and this permission notice shall be included in
        all copies or substantial portions of the Software.

        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
        THE SOFTWARE.

        [ MIT license: https://www.opensource.org/licenses/mit-license.php ]

        ===============================================================================
        [ LuaJIT includes code from Lua 5.1/5.2, which has this license statement: ]

        Copyright (C) 1994-2012 Lua.org, PUC-Rio.

        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:

        The above copyright notice and this permission notice shall be included in
        all copies or substantial portions of the Software.

        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
        THE SOFTWARE.

        ===============================================================================
        [ LuaJIT includes code from dlmalloc, which has this license statement: ]

        This is a version (aka dlmalloc) of malloc/free/realloc written by
        Doug Lea and released to the public domain, as explained at
        https://creativecommons.org/licenses/publicdomain

        ===============================================================================

