アウトライン。
2017年10月18日(Wed)
ここにGR-700があるじゃろ?

これがこうなって

あとこうして

こうじゃ。

って、ちょうど一年ぐらい前にも同じネタやってるし。ファンアートだから載せないとか言ってた舌の根も乾かないうちにこれだし。まあ、枡久田マスクさんのR-707に合わせる絵がやっとできたから、自分で自分を大目に見ることにする。
足元に置くものの絵を作ろうと思ったら、どうしても俯瞰にならざるを得ないというか。すると今度は人物の頭しか見えないし、ギターも見せようと思ったら構図もありそうなシチュエーションも限られてくるし。案外楽器絵って厳しい。というか、無知だけに何か間違えてそうで怖い(笑)。
人物とケーブルは手描き、右の椅子に載ってるマニュアルは公式のものを貼り込んじゃった。
で、一枚の絵を作るのにSuperflyとFireflyとプレビューと手描きを合成したわけだけども。Fireflyとプレビューは輪郭線だけを描画するためにレンダリングしたわけで、このFIreflyの輪郭線がちょっとめんどくさかった。

Fireflyレンダリングオプションのトゥーンの輪郭(Toon outline)はマテリアルのToon IDごとに、ノイズは入るけれどもなかなかいい感じで輪郭線を引いてくれる機能だ。たとえば頭と胴体でマテリアルが分かれているけれど、境界線を区切りたくないという場合には、同じIDを振っておけば線が描画されない。
ところがまあ、Superfly用にマテリアルを調整したり、色々やっているとこのToon IDがどうなっているかなんてまったく把握できないわけだ。同じ材質っぽいところは同じマテリアルファイルを適用してるけど、そうすると逆に線を引きたい箇所なのに描画されない、なんてことが起こる。そもそも物理サーフェイスノードを使っていたらIDそのものが定義されてない。万全を期すなら、すべてのマテリアルグループごとにPoserサーフェイスノードを作成して、個別のIDを振っておきたい。
そこでシーンに並べたアイテムを眺めて暗澹とするわけだ。なにせ自分で作ったターナーだけでも20近いマテリアルグループがある。

誰か、そういうPythonスクリプト作ってー!><
と絶叫しながら、とりあえずその場は手作業で乗り切った。だってモデリング脳からようやく絵作り脳になって、次はお絵描き脳にならないといけないのに、プログラミング脳に切り替える余裕なんてないしー。
でも次は手作業ではやりたくない。じゃあ絵が完成した今やるしかないよね。
細かく書くとややこしくなるから省略するけど、とりあえずPoserサーフェイスノードは新しく作成された時、必ず重複しないToon IDを持っている。ということは、全部のマテリアルグループに新しくルートノードを作成する、というスクリプトがあればいい。全部のマテリアルグループにアクセスするのは難しそうだから、WacroのShiftキーを押したら全部に適用される機能、あれを使おう。
というような感じでマニュアルと既存のスクリプトをコピーしながらPythonスクリプトを書く。リファレンスマニュアル、引数の記述が間違ってたんだけど……勘弁して。

でもって作ったスクリプトをアプリケーションフォルダのRuntime>Python>poserScripts>Wacros>UserDefinedフォルダに放り込む。

Poserを再起動すると、マテリアルルームのWacroの下にスクリプトが表示される。ところが、これはShiftキーを押下しながら起動しても、残念ながら全部のマテリアルグループに適用されることはないみたい。
仕方ないので、元からあるWacroボタンを書き換えることにする。どうせ元からあるやつ、古いものばかりでRemove Detached Node(未接続のノードを消すやつ)しか使ってないし。

WacrosフォルダにあるmainWacors.pyというファイルがWacroボタンを定義していて、毎回起動時に実行されている。これの適当な行を自分の作ったスクリプトを参照するように書き換える。

するとこうなる。

ついでにレンダラやレンダリングオプションを書き換えるように記述を追加して、とりあえず適当なフィギュアを選択してShift+クリック。で、そのままレンダリング。

これが

こうなる。らくちーん。
Python、書いているうちにちょっと思い出してきて、別にWacro機能使わなくても作れるような気がしてきたんだけど。まあいいかな、需要もなさそうな気がするし……。