modo501 – イラディアンスキャッシュのスクリプトの一部
#python import os file = lx.eval('query sceneservice scene.file ? current') file, ext = os.path.splitext(file) cache = os.path.join(file+'.lxi') zfile = os.path.isfile(cache) if zfile == 1: os.remove(cache)
ソースの表示が重いようなので、躊躇しておりましたが久しぶりのスクリプトです。
イラディアンスキャッシュを指定の解像度の数倍で作成し、それを保存して、読み込み、解像度を戻してレンダリングするスクリプトです。
この後にメイン部分が入りますが、それはXSRの物をほぼそのまま拝借させていただいたので、省きます。
何をしているかというと、
5行目でmodoに対して開いているシーンの絶対パスを含めたファイル名を聞いて、それを「file」という変数に入れています。
6行目で、その変数に入ったパスからファイル名までと拡張子を分離し、それぞれ「file」と「ext」に入れます。
7行目で拡張子の取られた「file」に「.lxi」modoのイラディアンスキャッシュの拡張子をつなげ「zfile」に入れます。
8、9行目で「zfile」が存在するのであれば、それを削除するようにします。
そしてそのあとは「try」につなげて「for」のループ文で命令を回すと完成です。
多分コマンドなので、別にして書けば問題ないかと思うので、一応書いておきます。
「query sceneservice polyRender.N ?」でシーンの「Render」の数を調べます。
それを元にfor文を始め、「query sceneservice polyRender.ID ?」でIDを取得し、
「select.item」で「Render」を選択し、「render.res 0 ?*3.0」、「render.res 1 ?*3.0」で解像度をここでは3倍に設定したりします。
この要領でその他のコマンドをつなげてゆけば完成します。
全部自分で書いたわけではないので、公開がはばかられるのが残念ですが完成するととても便利です。
JavaScriptのように取得したパスをStringとして扱い、トリミングするのかと思いきやPythonではパスとして扱ったほうがこの場合は都合がいいようです。
「render.res 0 ?*3.0」とうのに驚かされました。指定の解像度を問い合わせ、それに3をかけてしまおうというものです。「3.0」を「2.0」にすれば2倍のものが出来ます。
ちなみにXSRではfor文で「xrange」というものが使われておりますが、これは行く行く無くなるコマンドのようです。
コメントする
トラックバックする
トラックバック用URL: