スクリプトでパスを複数回繰り返す
あらすじ:ラジアルブラーを複数回かけたいけど、パスを手動で書くのよりいいのがあるんじゃないのか?と模索する。
描画の制御が出来るスクリプトってものがMMEにはあります。MME落としたらREFERENCEがついてくるのでそれを参照!そのなかに、スクリプトのループ系の命令がいくつかありました。
- LoopByCount=(パラメータ名)
- LoopEnd=
- LoopGetIndex=(パラメータ名)
適当に int Count = 3 とか作っておいて、LoopByCount=Countとか置いてやると、それ以降でLoopEnd=までをCount分だけ繰り返してくれるようだ。しかもLoopGetIndex=パラメータとか置いてあげると、そのパラメータに値を受け渡すことが出来るみたい。
ということは、ラジアルブラーのパワーを変えつつ複数回描画するには別に手動で似たようなパスを複数作る必要ないんじゃないか?と思い、作成したのが以下のスクリプト
float COUNT = 3.0f; //------------------------------------- // ラジアル3回描画 //------------------------------------- technique Radial < string Script = "RenderColorTarget0=ScnMap;" "RenderDepthStencilTarget=DepthBuffer;" "ClearSetColor=ClearColor;" "ClearSetDepth=ClearDepth;" "Clear=Color;" "Clear=Depth;" "ScriptExternal=Color;" "LoopByCount=COUNT;" "LoopGetIndex=blur_power;" "RenderColorTarget0=;" "RenderDepthStencilTarget=;" "ClearSetColor=ClearColor;" "ClearSetDepth=ClearDepth;" "Clear=Color;" "Clear=Depth;" "Pass=Radial;" "LoopEnd=;" ; > { pass Radial < string Script= "Draw=Buffer;"; > { AlphaBlendEnable = FALSE; VertexShader = compile vs_3_0 VS(); PixelShader = compile ps_3_0 PS_Radial(); } }
"RenderColorTarget0=;" "RenderDepthStencilTarget=;" "ClearSetColor=ClearColor;" "ClearSetDepth=ClearDepth;" "Clear=Color;" "Clear=Depth;" "Pass=Radial;"
を三回描画して、COUNTの値をradial_powerに受け渡してみた。内部でradial_pwoerを*20.0fとかしておけば、ラジアルパワー20.0f,40.0f,60.0fで描画できてるはず!
しかし結果は…。
何故かわわかりませんが・・・。
比較の為に次はラジアルを複数パス作ってやってみます。今日はここまで…。
スクリプトの理解は深まったのでよしとしよう…!