任何人都有一个很好的解决方案来查询python中当前的maya视口渲染器(Viewport 2.0,默认视口,高质量视口)?
@Tomek的答案将完美无缺.如果你要去PyMEL路线,你可以这样做:
import pymel.core.uitypes as pmui
model_panel = pmui.ModelEditor(pm.getPanel(withFocus=True))
print pmui.ModelEditor.getRendererName(model_panel)
Run Code Online (Sandbox Code Playgroud)
虽然,那个片段似乎很有气质.它有时会抛出错误,抱怨未找到模型编辑器,尤其是从架子上执行时.
另一种方式有点罗嗦,但它每次都有效:
import pymel.core as pm
import pymel.core.uitypes as pmui
modelPanelList = []
modelEditorList = pm.lsUI(editors=True)
for myModelPanel in modelEditorList:
if myModelPanel.find('modelPanel') != -1:
modelPanelList.append(myModelPanel)
for modelPanel in modelPanelList:
if pmui.ModelEditor(modelPanel).getActiveView():
try:
# Always better to try in the case of active panel operations
# as the active panel might not be a viewport.
print pmui.ModelEditor(modelPanel).getRendererName()
except Exception as e:
# Handle exception
print e
Run Code Online (Sandbox Code Playgroud)
一个简洁的伪PyMEL方式就是PyMEL-ify Tomek的答案:
import pymel.core as pm
print pm.modelEditor(pm.getPanel(wf=True), q=True, rnm=True)
Run Code Online (Sandbox Code Playgroud)
要获取视口渲染器列表:
import pymel.core.uitypes as pmui
print pmui.ModelEditor().getRendererList()
Run Code Online (Sandbox Code Playgroud)
以下是模型编辑器和视口渲染器的一些额外信息.获得他们"友好"的名字:
import pymel.core.uitypes as pmui
print pmui.ModelEditor().getRendererListUI()
Run Code Online (Sandbox Code Playgroud)
简单地说,设置它们,我会使用PyMEL并执行:
import pymel.core.uitypes as pmui
# assuming you know which modelPanel you want to affect
pmui.ModelEditor("modelPanel4").setRendererName("ogsRenderer")
Run Code Online (Sandbox Code Playgroud)
要影响所有视口(modelPanels),我会这样做:
import pymel.core as pm
import pymel.core.uitypes as pmui
modelPanelList = []
modelEditorList = pm.lsUI(editors=True)
for myModelPanel in modelEditorList:
if myModelPanel.find('modelPanel') != -1:
modelPanelList.append(myModelPanel)
for modelPanel in modelPanelList:
pmui.ModelEditor(modelPanel).setRendererName("ogsRenderer")
Run Code Online (Sandbox Code Playgroud)
仅影响焦点视口:
import pymel.core as pm
import pymel.core.uitypes as pmui
modelPanelList = []
modelEditorList = pm.lsUI(editors=True)
for myModelPanel in modelEditorList:
if myModelPanel.find('modelPanel') != -1:
modelPanelList.append(myModelPanel)
for modelPanel in modelPanelList:
if pmui.ModelEditor(modelPanel).getActiveView():
try:
# Always better to try in the case of active panel operations
# as the active panel might not be a viewport.
pmui.ModelEditor(modelPanel).setRendererName("ogsRenderer")
except Exception as e:
# Handle exception
print e
Run Code Online (Sandbox Code Playgroud)