Bearbeiten des Material-Diagramms (GUI und Headless)
Das Manipulieren des Material-Diagramms per Scripting ist eine erweiterte Funktion, die in KeyShot 11 hinzugefügt wurde.
Im Folgenden werden die grundlegenden Funktionen zur Bearbeitung des Material-Diagramms beschrieben. Um eine vollständige Liste der verfügbaren Funktionen anzuzeigen, geben Sie help(lux)
in die Scripting Konsole ein oder besuchen Sie die Online-Dokumentation für GUI– oder Headless-Scripting.
Auf das Material-Diagramm zugreifen
Sie können wie folgt auf das Material-Diagramm zugreifen:
graph = lux.getMaterialGraph("name")
Der graph
ist eine Instanz vom Typ lux.MaterialGraph
, mit der Sie interagieren können.
Auf den Root-Knoten zugreifen
Sie können wie folgt auf den Root-Knoten zugreifen:
rootNode = graph.getRoot()
Der rootNode
ist eine Instanz vom Typ lux.ShaderNode
, mit der Sie interagieren können.
Eingabe Edges eines Knotens abrufen
Wie auch immer eine node
Instanz erzeugt wurde, Sie können die Edges aus einem Material-Diagramm erhalten, indem Sie Folgendes eingeben:
edges = node.getInputEdges()
Jede Edge-Instanz ist vom Typ lux.ShaderEdge
, mit dem Sie interagieren können.
Eine bestimmte Edge kann erhalten werden über:
edge = node.getInputEdge("parameter name")
Dies ergibt eine Instanz des Typs lux.ShaderEdge
oder einen Fehler, wenn der Name unbekannt ist.
Ausgabe Edges eines Knotens abrufen
Wie auch immer eine node
Instanz erzeugt wurde, Sie können die Edges aus einem Material-Diagramm erhalten, indem Sie Folgendes eingeben:
edges = node.getOutputEdges()
Jede Edge-Instanz ist vom Typ lux.ShaderEdge
, mit dem Sie interagieren können.
Parameter eines Knotens abrufen
Wie auch immer eine node
Instanz erzeugt wurde, Sie können die Parameter aus einem Material-Diagramm erhalten, indem Sie Folgendes eingeben:
parameters = node.getParameters()
Jede Parameter-Instanz ist vom Typ lux.ShaderParameter
, mit dem Sie interagieren können.
Ein bestimmter Parameter kann abgerufen werden über:
parameter = node.getParameter("parameter name")
Dies ergibt eine Instanz des Typs lux.ShaderParameter
oder einen Fehler, wenn der Name unbekannt ist.
Parameterwert ändern
Ein Parameter, parameter
, erzeugt via lux.SceneNode.getParameter()
oder lux.SceneNode.getParameters()
, kann seinen Wert modifiziert bekommen durch lux.ShaderParameter.setValue()
.
Wenn der Typ des Parameters beispielsweise ein boolescher Wert (true oder false) ist, können Sie den Wert ändern über:
parameter.setValue(True)
Wird der Wert als Eingabe unterstützt, aber falsch eingegeben, wird er in einer Python-Exception angezeigt.
Wenn der Parameter beispielsweise eine RGB-Farbe war und Sie den booleschen Wert angewendet haben, würde dies den Fehler ergeben:
Der Farbparameter akzeptiert nur Werte vom Typ "Tupel" oder "Liste" der Größe 3, die Floats oder ints enthalten innerhalb des Bereichs [0.0,1.0]; oder einen Farbnamen!
Die korrekte Eingabe für einen Farbparameter wäre also:
parameter.setValue((0.5, 0, 0)) # Red, (0x7F, 0x00, 0x00)
parameter.setValue("Amber") # Color known by the color library in KeyShot
Sie können einen Python-Wert über lux.ShaderParameter.getValue()
abrufen, um zu verstehen, was unterstützt wird, oder Sie können eine Darstellung der Instanz (str()
oder repr()
) printen.
Einen Knoten entfernen
Sie können eine node
entweder über die Instanz entfernen:
graph.removeNode(node)
Oder ihre ID:
graph.removeNode(node.getID())
Neuen Knoten erstellen
Sie können beispielsweise einen Metallknoten wie folgt erstellen:
metalNode = graph.newNode(lux.SHADER_TYPE_METAL)
Edge entfernen
Sie können eine edge
entfernen, entweder über die Instanz:
graph.removeEdge(edge)
Oder ihre ID:
graph.removeEdge(edge.getID())
Erstellen Sie eine Edge zwischen zwei Knoten
Sie können beispielsweise eine Edge zwischen node1
und node2
auf dem Oberflächen-Parameter erstellen:
edge = graph.newEdge(source=node1, target=node2, param="surface")