First Steps

This example covers your first steps with the Guerilla python sdk.

Selection

To start, let’s select something in our scene

from guerilla import Modifier, pynode
with Modifier() as mod:
    # select RenderGraph node
    # replace current selection
    mod.select(['RenderGraph'], mode='replace')

Access Nodes

Access nodes of the scene with their path

from guerilla import pynode
# Look up the Output inside the RenderGraph
n = pynode ('RenderGraph|Output')
# You can also use the _ function, which is equivalent
from guerilla import _
n = _('RenderGraph|Output')
# Both the pynode and _ functions are equivalent to:
from guerilla import Document
n = Document ().findchild ('RenderGraph|Output')

You can also access an immediate child of a node

from guerilla import _
# Look up the Output inside the RenderGraph
rg = _('RenderGraph')
output = rg.getchild ('Output')

Scene Parsing

Now Let’s see what is inside this node

from guerilla import pynode
n = pynode('RenderGraph')
for c in n.children():
    print c.name, type(c)

If we want to list lights

from guerilla import Document
# Note:
# type='Light' to filter lights only
# recursive=True option to iterate deep in hierarchy
for c in Document().children(type='Light',recursive=True):
    print c.name, type(c)

List all the shading overrides of the RenderGraph node

import guerilla
for c in guerilla.pynode("RenderGraph").children ():
        for plug in c.plugs(type="AttributePlug") :
                print plug.getname ()

Dealing with attributes

Let’s add a square light in our scene.

First we need to create a light then we change its Plug (named LightType) to ‘square’

from guerilla import Modifier
with Modifier() as mod:
    ln = mod.doc.loadfile('$(LIBRARY)/lights/pointlight.glight')[0]
    ln.LightType.set('square')

Now we will store the artist name in a new attribute

from guerilla import Modifier, Plug, pynode
with Modifier() as mod:
    ln = pynode('light1') # or create it...
    # create a Dynamic (saved in the scene) user plug (show up in the UI)
    mod.createplug(ln, 'CreatedBy', 'user', 'string', Plug.Dynamic, 'Jimi Hendrix')

And now for experts (yeah!):

  • Add a node with a custom color attributes which will drive our light color
from guerilla import Modifier, Document, Plug, pynode
with Modifier() as mod:
    lr = mod.createnode('lightRig')
    c = mod.createplug(lr, 'Color', 'user', 'color', Plug.Dynamic, [0, 1, 0])
    ln = pynode('light1') # or create it...
    # so now changing light rig color will change the light color
    ln.Color.connect(lr.Color)
    # let's print our light color (to check connection)
    print ln.Color.get()
  • List all attributes of a node
from guerilla import Document
# iterate over all cameras of the scene
for camera in Document ().children (type='Camera'):
    print ("*** "+camera.getpath ())
    # iterate over all plugs
    for plug in camera.plugs ():
        print ("   "+plug.getname ())
        plugtype = plug.gettype ()
        if plugtype != None:
            print ("      type " + plugtype.getname ())
            plugvalue = plug.get ()
            print ("      value " + str (plugvalue))
  • List all textures
from guerilla import Document
# iterate over all nodes of the scene
for node in Document ().children (recursive=True):
    # iterate over all plugs which type is 'texture'
    for plug in node.plugs ():
        plugtype = plug.gettype ()
        if plugtype != None and plugtype.getname () == 'texture':
            print (plug.get ())

or alternatively:

from guerilla import Document
# iterate over all nodes of the scene
for node in Document ().children (recursive=True):
    # iterate over all plugs which type is 'texture'
    for plug in node.plugs (typename='texture'):
        print (plug.get ())

Going further

  • Try the next example in Examples
  • Explore the API documentation