Как установить параметры на узле pxrTexture в Katana с помощью python
Я пытаюсь создать узел и установить значение с помощью этой функции:
def createTextureNode(textureNode):
keyword = textureNode
for fname in os.listdir(assetFilePath):
if keyword in fname:
texFilename = fname + ".tex"
newTexNode = NodegraphAPI.CreateNode("PrmanShadingNode", rootNode)
newTexNode.getParameter('name').setValue(assetCode + '_' + textureNode, 0)
newTexNode.getParameter('nodeType').setValue("PxrTexture", 0)
newTexNode = NodegraphAPI.GetNode(assetCode + '_' + textureNode)
if textureNode == "Albedo":
newTexNode.getParameter("parameters.linearize.enable").setValue(True,0)
newTexNode.getParameter("parameters.linearize.value").setValue(True,0)
Это довольно просто, если конкретный файл существует, он создаст для него узел. Однако я не могу установить значение «линеаризации» (или любое другое значение в группе «параметры»)
Если я вручную создам узел и вручную установлю его как PxrTexture и использую этот код:
node = NodegraphAPI.GetNode("PrmanShadingNode")
node.getParameter("parameters.linearize.enable").setValue(1,0)
node.getParameter("parameters.linearize.value").setValue(1,0)
Затем он работает, флажок включается, но если я устанавливаю nodeType через скрипт, он не работает. Но если я запускаю его во второй раз, он работает! Ошибка, которую я продолжаю получать:
AttributeError: объект «NoneType» не имеет атрибута «setValue»
Я знаю, что это означает, что он возвращает «Нет», но подсказка в Katana говорит, что его «parameters.linearize» и первые два параметра можно было установить ... но я думаю, что они находятся в группе?
Поскольку он работает с ручным созданием, должно быть что-то, чего мне не хватает в моем сценарии, но я не могу понять это. Я также пытался использовать finalizeValue после установки моего nodeType, но это не повлияло
Я использую это как ссылку:Получение и установка параметров
1 ответ
ПОНЯТНО!
При прагматической установке динамического параметра вам необходимо запустить checkDynamicParameters() после того, как вы установите значение, при котором появляются новые параметры.
Это обновляет цикл пользовательского интерфейса и делает доступными новые параметры. Когда это делается через пользовательский интерфейс, это происходит на лету, и поэтому это работает, если делать это вручную.