ビューポートのレンダラーをスクリプトから変えたいなぁーと思いまして。
貰ったシーンのレンダラーが重い奴になってたりとか
プレイブラスト時に一時的に別のレンダラーに切り替えたいとか
そんな場面が何度かありまして。
ものすごくピンポイントで言うと、 pencil4+レンダラーになってるシーンを開くとラインの描画処理がいきなり始まってしまうので ファイル開くときには viewport2.0に強制的にしたいんですね。
逆にプレイブラストを掛ける場合にはラインを乗せたいので、pencil4+ レンダラ0になっていてほしいんですよね。
viewport絡みなので、modelEditorコマンドの中に何かないかなぁ と見てみると、
- rendererList
- rendererName
- rendererOverrideList
- rendererOverrideName
この辺が使えそうですね。
renderer と rendererOverride はどう違うんだろか・・・・
とりあえず それぞれ ~~~List オプションで使えるものを聞き出してみます。
cmds.modelEditor("modelPanel4",q=True,rendererList=True)
# Result: ['vp2Renderer', 'base_OpenGL_Renderer', 'hwRender_OpenGL_Renderer', 'stub_Renderer'] #
cmds.modelEditor("modelPanel4",q=True,rendererOverrideList=True)
# Result: ['Pencil4Line', 'mtohRenderOverride_HdStormRendererPlugin', 'mtohRenderOverride_HdArnoldRendererPlugin', 'arnoldViewOverride', 'stereoOverrideVP2'] #
rendererOverrideList の方に Pencil4Line の表記がありますね。
では試しに切り替わるかどうか・・・・
cmds.modelEditor("modelPanel4",e=True,rendererOverrideName="Pencil4Line")
切り替わりましたね。
さて、元に戻すには・・・・・?
空の文字列を設定すると、現在アクティブなオーバーライドの設定が解除されます。
ちゃんと書いてありました。
cmds.modelEditor("modelPanel4",e=True,rendererOverrideName="")
注意
プレイブラストを掛ける際に、
- 新規でmodelEditorを作成
- rendererOverrideName を Pencil4Line に設定
- プレイブラストを掛ける
という処理を作成したのですが、どうにも表示がデフォルトのままでした。
色々試した結果、
rendererOverrideを切り替えた直後に
- cmds.refresh()で強制再描画
を行わないとダメだということが判りました。


