Как установить параметры на узле 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() после того, как вы установите значение, при котором появляются новые параметры.

Это обновляет цикл пользовательского интерфейса и делает доступными новые параметры. Когда это делается через пользовательский интерфейс, это происходит на лету, и поэтому это работает, если делать это вручную.

ОТВЕТ ССЫЛКА

Другие вопросы по тегам