問題:

<aside> 💡 スクリプトでレンダラーをVRayにした場合、VRayを設定にするために必要なノードが作られない場合がある。

Arnoldなどでも同様のエラーを経験しているので、レンダラー毎に処理が必要かも

</aside>

(※ RenderSettingsパネルは開かない状態で実行した場合の結果。)

  1. Render を V-Rayに

    import maya.cmds as cmds
    
    render_globals = cmds.ls(type='renderGlobals')[0]
    renderer = 'vray'
    cmds.setAttr(f'{render_globals}.currentRenderer', renderer , type='string')
    
  2. Renderのアニメーションタイプを変更しようとする

    settings_node = 'vraySettings'
    cmds.setAttr(f'{settings_node}.animType', 1)
    

結果:

vraySettingsが存在しない。と警告がでる。

# Error: RuntimeError: file <maya console> line 2: setAttr: No object matches name: vraySettings.animType


対応策:

  1. 関連するGUIを表示すると、GUI作成時に必要なものが作成される。

    vraySettings → レンダー設定パネル

  2. 以下の記事を参考に必要なものをスクリプトで作成する。

    vraySettingsの例

    if not cmds.ls('vraySettings'):
    	cmds.shadingNode("VRaySettingsNode", asUtility=True, name = "vraySettings")
    

    <aside> 💡 cmds.shadingNode("VRaySettingsNode", asUtility=True, name = "vraySettings") だけを実行するとvraySettingsが沢山出来てしまうので注意

    Untitled

    </aside>

参考

python - maya.standalone creating vraySettings node

サンプルコード

import maya.cmds as cmds
#Load Vray Plugin
try:
    cmds.loadPlugin('vrayformaya', quiet=True)
    cmds.pluginInfo('vrayformaya', edit=True, autoload=True)
except Exception, e: print e
#Try and register vray
try:
    cmds.renderer('vray')
except RuntimeError:
    print "Vray already Registered"
    
#Collect all vray-Attributes
globalsTabLabels = cmds.renderer( 'vray', query=True, globalsTabLabels=True )
globalsTabCreateProcNames = cmds.renderer( 'vray', query=True, globalsTabCreateProcNames=True )
globalsTabUpdateProcNames = cmds.renderer( 'vray', query=True, globalsTabUpdateProcNames=True )

#Construct Vray-Renderer
for tab_id in range(len(globalsTabLabels)):
    cmds.renderer('vray', edit=True, addGlobalsTab=[str(globalsTabLabels[tab_id]), str(globalsTabCreateProcNames[tab_id]), str(globalsTabUpdateProcNames[tab_id])])

#Create DAG for VRAYSETTINGS
cmds.shadingNode("VRaySettingsNode", asUtility=True, name = "vraySettings")
#Get Render-Node
nod = cmds.ls(type="VRaySettingsNode")
#This is test-case, to just set some basic params
if len(nod) > 0:
    cmds.setAttr("vraySettings.vrscene_on", 1)
    cmds.setAttr("vraySettings.misc_separateFiles", 1)
    cmds.setAttr("vraySettings.misc_exportLights", 1)
    cmds.setAttr("vraySettings.misc_exportNodes", 1)
    cmds.setAttr("vraySettings.misc_exportGeometry", 1)
    cmds.setAttr("vraySettings.misc_exportMaterials", 1)
    cmds.setAttr("vraySettings.misc_exportTextures", 1)
    cmds.setAttr("vraySettings.misc_exportBitmaps", 1)
    cmds.setAttr("vraySettings.misc_meshAsHex", 1)
    cmds.setAttr("vraySettings.misc_transformAsHex", 1)
    cmds.setAttr("vraySettings.misc_compressedVrscene", 1)
else:
    print "Render Node VRAY is not found"