示例#1
0
def buildScene(): # Assemble NK scene
    dataShotDic = buildShotDic() 
    exrPath = dataShotDic['EXR']
    endFrame = dataShotDic['endFrame']
    
    # Define Pathes for  Write Nodes
    exrPathFull = '{0}{1}/{2}/SHOT_{3}/MASTER/{4}'.format(root3D, codePart, codeSequence, codeShot, exrPath)
    dpxPathFull = '{3}{4}/{0}/{1}/SHOT_{2}/v{5}/E{1}_S{2}_v{5}.%04d.dpx'.format(codePart, codeSequence, codeShot, rootRND, 'DPX', '[knob VERSION.label]')
    movPathFull = '{3}{4}/{0}/{1}/SHOT_{2}/E{1}_S{2}_v{5}.mov'.format(codePart, codeSequence, codeShot, rootRND, 'MOV','[knob VERSION.label]' )
    nameBase = 'E{0}_S{1}'.format(codeSequence, codeShot)
    reader = nuke.nodes.Read(name = 'REA_E{0}_S{1}'.format(codeSequence, codeShot), file = exrPathFull, first = 101, last = endFrame, xpos = 0, ypos = 0) #creating Reader Node

    dot_A = nuke.nodes.Dot(name = 'DOT', xpos = 34, ypos = 250)
    dot_A.setInput(0, reader)
    dot_B = nuke.nodes.Dot(name = 'DOT', xpos = 184, ypos = 250)
    dot_B.setInput(0, dot_A)

    verser = nuke.nodes.StickyNote(name = "VERSION", xpos = 0, ypos = 380) # Node to DRIVE VESIONS of Nuke renders
    verser['label'].setValue('001')
    # Create WRITE nodes
    writeDPX = nuke.nodes.Write( name ='DPX_E{0}_S{1}'.format(codeSequence, codeShot),file = dpxPathFull, file_type = 'dpx', colorspace='Cineon', first = 101, last = endFrame, xpos = 0, ypos = 300)
    writeDPX.setInput(0, dot_A)
    writeDPX['beforeRender'].setValue("if not os.path.isdir(os.path.dirname(nuke.thisNode()['file'].evaluate())):os.makedirs(os.path.dirname(nuke.thisNode()['file'].evaluate()))") # Create folder for writer output, if its not exists
    writeMOV = nuke.nodes.Write( name ='MOV_E{0}_S{1}'.format(codeSequence, codeShot),file = movPathFull, file_type = 'dpx', colorspace='sRGB', first = 101, last = endFrame, xpos = 150, ypos = 300)
    writeMOV.setInput(0, dot_B)
    writeMOV['beforeRender'].setValue("if not os.path.isdir(os.path.dirname(nuke.thisNode()['file'].evaluate())):os.makedirs(os.path.dirname(nuke.thisNode()['file'].evaluate()))") # Create folder for writer output, if its not exists
    # Setup NK scene
    view = nuke.toNode('Viewer1')
    view['xpos'].setValue( -140 )
    view['ypos'].setValue( 30 )
    nuke.knob('root.first_frame', str(frameStart) )
    nuke.knob('root.last_frame', endFrame)
    nuke.connectViewer(0, reader)
def navUp():
    av = nuke.activeViewer()
    ai = av.activeInput()
    avn = av.node()
    curr = avn.input(ai)
    prev = curr.input(0)
    nuke.connectViewer(ai, prev)
示例#3
0
def precomp_write():

	first_node = nuke.selectedNode()

	read_node = nuke.selectedNode().dependencies()
	nodes_list = []

	while read_node:
	    read_node = read_node[0].dependencies()
	    nodes_list.append(read_node)

	read_node = nodes_list[-2][0]
	read_path = read_node.knob("file").value()
	file_name = read_path.split("/")[-1].split(".")[0]

	file_path = read_path.split("/")[:-1]
	file_path = "/".join(file_path)
	write_path = "{0}/precomp/{1}_precomp.%04d.jpg".format(file_path, file_name)

	write_node = nuke.nodes.Write()
	write_node.setInput(0, first_node)
	write_node.setSelected(True)
	write_node.knob("file").setValue(write_path)
	write_node.knob("file_type").setValue("jpeg")
	#write_node.knob("channels").setValue("rgba")
	write_node.knob("_jpeg_quality").setValue(100)
	write_node.knob("beforeRender").setValue("import os\nif not os.path.isdir(os.path.dirname(nuke.thisNode()[\'file\'].evaluate())):\n\tos.makedirs(os.path.dirname(nuke.thisNode()[\'file\'].evaluate()))")

	nuke.connectViewer(0,write_node)
def navDown():
    av = nuke.activeViewer()
    ai = av.activeInput()
    avn = av.node()
    curr = avn.input(ai)
    nextlist = curr.dependent()
    next = nextlist[0]
    nuke.connectViewer(ai, next)
示例#5
0
def renderOut():
    if len(lista) >= 2:
        a = nuke.createNode("Write")
        a.connectInput(0, node)
        nuke.connectViewer(0, node)
        a["channels"].setValue("all")
        a["file_type"].setValue("exr")
        a.autoplace()
        renderPath()
        a["file"].setValue(newdir)
    else:
        pass
示例#6
0
def renderOut():
    if len(lista) >= 2:
        a = nuke.createNode("Write")      
        a.connectInput(0, node)
        nuke.connectViewer(0, node)
        a["channels"].setValue("all")
        a["file_type"].setValue("exr")
        a.autoplace()
        renderPath()
        a["file"].setValue(newdir)
    else:
        pass
示例#7
0
文件: Wipe.py 项目: kuchinal/lamakaha
def Wipe():
    
  
    # Creating requred nodes
    u = nuke.selectedNode()
    b = nuke.createNode('Grid')
    b['number'].setValue([38.4,21.6])
    b['size'].setValue(0.2)
    
    x=u.knob("xpos").value()
    y=u.knob("ypos").value()
    
    left = nuke.nodes.OneView()
    Ltext= nuke.createNode("Text")
    Ltext['message'].setValue("LEFT")
    Ltext['box'].setValue([0,50,0,0])
    Ltext['name'].setValue("Ltext")
    Ltext['hide_input'].setValue(1)
    left['view'].setValue("left")
    left['name'].setValue("left")
    left['hide_input'].setValue(1)

    left.setInput(0,b)
    Ltext.setInput(0,left)
    
    Rtext= nuke.createNode("Text")
    Rtext['message'].setValue("RIGHT")
    Rtext['box'].setValue([0,50,0,0])
    Rtext['name'].setValue("Rtext")
    Rtext['hide_input'].setValue(1)
    Rtext.setInput(0,b)
    Rtext['label'].setValue("Delete After Use")
    right = nuke.createNode('OneView')
    right['view'].setValue("right")
    right['name'].setValue("right")
    right['hide_input'].setValue(1)
    right['label'].setValue("Delete After Use")

    

    
    # Connecting to Viewer
    nuke.connectViewer(0,Ltext)
    nuke.connectViewer(1,right)
    
    #Positioning nodes somewhere :)
    x = int(x)
    y = int(y)
    left.setXYpos(x,y+150)
    right.setXYpos(x,y+150)
    Ltext.setXYpos(x,y+150)
    Rtext.setXYpos(x,y+150)
    b.setXYpos(x,y+150)
示例#8
0
def scatterObjects():
    '''
    Places an object on each selected vertex. The new Scene node gets user knobs to control the new objects.
    args:
        obj  -  class of object to scatter (default = Card2)
    '''
    # pop up a panel to ask for the desired object type
    # the dictionary maps the name in the panel to the actual class used
    typeDict = dict(Axis='Axis',
                    Card='Card2',
                    Sphere='Sphere',
                    Cylinder='Cylinder',
                    Cube='Cube')

    # create the initial panel and give it a title
    p = nuke.Panel('Pick object type to scatter')

    # add a drop down list with the dictionary's keys as choices
    p.addEnumerationPulldown('object', ' '.join(typeDict.keys()))

    # adjust the panel's width a bit
    p.setWidth(250)

    # if the user confirms the dialogsave the choice for later, otherwise do nothing
    if p.show():
        objType = typeDict[p.value('object')]
    else:
        return

    vsel = nukescripts.snap3d.getSelection()
    sc = nuke.nodes.Scene()
    # add user knobs to control new nodes:
    offsetKnob = nuke.XYZ_Knob('offset')
    sc.addKnob(offsetKnob)
    scaleKnob = nuke.Double_Knob('scale')
    scaleKnob.setValue(1)
    sc.addKnob(scaleKnob)

    for i, v in enumerate(vsel):
        obj = eval('nuke.nodes.%s()' % objType)
        # assign expressions to link to scene node's user knobs
        obj['translate'].setExpression(
            '%s + %s.offset' % (v.position.x, sc.name()), 0)
        obj['translate'].setExpression(
            '%s + %s.offset' % (v.position.y, sc.name()), 1)
        obj['translate'].setExpression(
            '%s + %s.offset' % (v.position.z, sc.name()), 2)
        obj['uniform_scale'].setExpression('%s.scale' % sc.name())
        sc.setInput(i, obj)

    sc.setInput(i + 1, nuke.thisNode())
    nuke.connectViewer(1, sc)
示例#9
0
def connect_selected_to_viewer(inputIndex):
    """Connects the selected node to the given viewer input index, ignoring errors if no node is selected."""

    selection = None
    try:
        selection = nuke.selectedNode()
    except ValueError:  # no node selected
        pass

    if selection is not None and selection.Class() == 'Viewer':
        selection = None

    nuke.connectViewer(inputIndex, selection)
示例#10
0
def createShadowNodeTree():
    """
    This method creates all the necessary nodes needed for a shadow pass.
    This is basically like a preset which is followed in every similar scenario
    :return:
    """
    node = nuke.toNode("shadowRead")
    node['selected'].setValue(True)
    nuke.createNode('Shuffle')
    nuke.createNode('Grade')
    nuke.createNode('Premult')
    blurNode = nuke.createNode('Blur')
    blurNode.knob('name').setValue('blurNode')

    node['selected'].setValue(False)

    bmNode = nuke.createNode('Blur')
    bmNode.knob('name').setValue('blurMaskGrade')

    nuke.nodes.Merge(name="finalMerge", inputs=[nuke.toNode("blurMaskGrade"), nuke.toNode("beautyGrade")])
    nuke.connectViewer(0, nuke.toNode("finalMerge"))
示例#11
0
def PlusCrop():
    #Variables
    target = nuke.selectedNode()
    bbox = target.bbox()
    origname = target.name()

    #Creating the crop
    pluscrop = nuke.nodes.Crop(name=(origname + '_Crop'), reformat=1)
    pluscrop.setInput(0, target)

    #Setting values through expression
    pluscrop['box'].setExpression("input0.bbox.x()", 0)
    pluscrop['box'].setExpression("input0.bbox.y()", 1)
    pluscrop['box'].setExpression("input0.bbox.r()", 2)
    pluscrop['box'].setExpression("input0.bbox.t()", 3)

    #Selecting the new crop node
    for each in nuke.allNodes():
        each.knob("selected").setValue(False)
    pluscrop.knob('selected').setValue(True)
    pluscrop.showControlPanel()
    nuke.connectViewer(0, pluscrop)
示例#12
0
def togglePreviousNode():
    global main
    global prev
    av = nuke.activeViewer()
    try:
        ai = av.activeInput()
        avn = av.node()
        curr = avn.input(ai)
        try:
            if main:
                if not (curr == main or curr == prev):
                    del main
        except:
            main = avn.input(ai)
        if main == curr:
            prev = curr.input(0)
            nuke.connectViewer(ai, prev)
        else:
            nuke.connectViewer(ai, main)
            prev = main.input(0)
            del main
    except:
        print 'no active viewer'
示例#13
0
    def submit(self):
        """Does the work to submit the current Nuke script to Zync, given that the parameters on the dialog are set."""

        selected_write_names = []
        selected_write_nodes = []
        for k in self.writeNodes:
            if k.value():
                selected_write_names.append(k.label())
                selected_write_nodes.append(nuke.toNode(k.label()))

        active_viewer = nuke.activeViewer()
        if active_viewer:
            viewer_input = active_viewer.activeInput()
            if viewer_input is None:
                viewed_node = None
            else:
                viewed_node = active_viewer.node().input(viewer_input)
        else:
            viewer_input, viewed_node = None, None

        script_path = nuke.root().knob('name').getValue()
        new_script = self.maybe_correct_path_separators(script_path)
        write_node_to_user_path_map = dict()
        read_dependencies = []

        with WriteChanges(new_script):
            # Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only run on versions other than those.
            if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8:
                # Remove all nodes that aren't connected to the Write nodes being rendered.
                select_deps(selected_write_nodes)
                for node in nuke.allNodes():
                    if node.isSelected():
                        node.setSelected(False)
                    else:
                        node.setSelected(True)
                nuke.nodeDelete()
                # Freeze expressions on all nodes. Catch errors for Nuke versions that don't support the recurseGroups option.
                try:
                    node_list = nuke.allNodes(recurseGroups=True)
                except:
                    node_list = nuke.allNodes()
                for node in node_list:
                    freeze_node(node)

                _collect_write_node_paths(selected_write_names,
                                          write_node_to_user_path_map)
                read_nodes = [
                    read_node for read_node in node_list
                    if read_node.Class() in READ_NODE_CLASSES
                ]
                _collect_read_node_paths(read_nodes, read_dependencies)

        # reconnect the viewer
        if viewer_input is not None and viewed_node is not None:
            nuke.connectViewer(viewer_input, viewed_node)

        # exec before render
        # nuke.callbacks.beforeRenders

        try:
            render_params = self.get_params()
            if render_params is None:
                return
            render_params['scene_info'][
                'write_node_to_output_map'] = write_node_to_user_path_map
            render_params['scene_info']['files'] = read_dependencies
            self.zync_conn.submit_job('nuke', new_script,
                                      ','.join(selected_write_names),
                                      render_params)
        except zync.ZyncPreflightError as e:
            raise Exception('Preflight Check Failed:\n\n%s' % (str(e), ))

        nuke.message('Job submitted to ZYNC.')
示例#14
0
def display_node(node_name):
    node = nuke.toNode(node_name)
    nuke.connectViewer(0, node)
示例#15
0
def preCompForArnold():
    # set a ordered list of input layer
    layerlist = ['indirect_diffuse', 'direct_diffuse', 'indirect_specular', 'direct_specular', 'reflection',
                 'refraction',
                 'AO', 'depth', 'MV', 'alpha']
    gradelayers = ['indirect_diffuse', 'direct_diffuse', 'indirect_specular', 'direct_specular', 'reflection',
                   'refraction',
                   'AO']
    # Get The Layers Of Selected Read Node

    orderedmerge = []

    Read = nuke.selectedNode()
    layers = nuke.layers(Read)

    for i in layerlist:
        for n in layers:
            if i == n:
                orderedmerge.append(i)

    for o in orderedmerge:
        for l in layers:
            if l == o:
                layers.remove(l)

    layers.remove('rgba')
    layers.remove('rgb')
    orderedshow = layers

    ################Create Shuffle########################################

    x = Read['xpos'].getValue()
    y = Read['ypos'].getValue()

    shufflegroup = []
    gradegroup = []
    dotYgroup = []
    mergegroup = []
    for k in orderedmerge:
        shuffle = nuke.nodes.Shuffle(name=k, postage_stamp=1, note_font_size=25)
        shuffle.setInput(0, Read)
        shuffle.knob('in').setValue(k)
        num = int(orderedmerge.index(k))
        shuffle.setXYpos(int(x + 150 * num), int(y + 250))
        shuffleX = shuffle['xpos'].getValue()
        shuffleY = shuffle['ypos'].getValue()
        shufflegroup.append(shuffle)

        ###Create Grade###
        if num < 7:
            gradenode = nuke.nodes.Grade(name=k, note_font_size=15)
            gradenode.setInput(0, shuffle)
            gradegroup.append(gradenode)
        else:
            pass

        ###Create Dot#####

        if num >= 1 and num < 7:
            dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25)
            dot.setInput(0, gradenode)
            dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num))
            dotX = dot['xpos'].getValue()
            dotY = dot['ypos'].getValue()
            dotYgroup.append(dotY)

        elif num > 6:
            dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25)
            dot.setInput(0, shuffle)
            dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num))
            dotX = dot['xpos'].getValue()
            dotY = dot['ypos'].getValue()
            dotYgroup.append(dotY)

        ###Create Merge####

        if num < 1:
            pass
        elif num > 0 and num < 2:
            merge = nuke.nodes.Merge(name=k, operation='plus', mix=1, inputs=[gradegroup[0], dot], note_font_size=15)
            merge.setXYpos(int(x), int(dotY - 6))
            mergegroup.append(merge)
        elif num > 1 and num < 6:
            merge = nuke.nodes.Merge(name=k, operation='plus', mix=1, inputs=[mergegroup[num - 2], dot],
                                     note_font_size=15)
            mergegroup.append(merge)
            merge.setXYpos(int(x), int(dotY - 6))
        elif num > 5 and num < 7:
            merge = nuke.nodes.Merge(name=k, operation='multiply', mix=0.15, inputs=[mergegroup[num - 2], dot],
                                     note_font_size=15)
            mergegroup.append(merge)
            merge.setXYpos(int(x), int(dotY - 6))
        elif num > 6 and num < 8:
            copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='depth.Z', inputs=[mergegroup[num - 2], dot],
                                   note_font_size=15)
            mergegroup.append(copy)
            copy.setXYpos(int(x), int(dotY - 14))
        elif num > 7 and num < 9:
            copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='MV.red', from1='rgba.green', to1='MV.green',
                                   inputs=[mergegroup[num - 2], dot], note_font_size=15)
            mergegroup.append(copy)
            copy.setXYpos(int(x), int(dotY - 26))
        elif num > 8 and num < 10:
            copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='rgba.alpha', inputs=[mergegroup[num - 2], dot],
                                   note_font_size=15)
            mergegroup.append(copy)
            copy.setXYpos(int(x), int(dotY - 14))
            ###Create show Layers####

    for element in orderedshow:
        num += 1
        shuffle = nuke.nodes.Shuffle(name=element, postage_stamp=1, note_font_size=25)
        shuffle.setInput(0, Read)
        shuffle.knob('in').setValue(element)
        shuffle.setXYpos(int(x + 150 * num), int(y + 250))

    nuke.connectViewer(0, mergegroup[-1])
示例#16
0
        ct['format'].setValue('C4D Format')
        ct.setName("BackGround")
        sc = nuke.nodes.Scene()
        sc.setName("C4DScene")
        rnd = nuke.nodes.ScanlineRender()
        rnd.setInput(1, sc)
        rnd.setInput(2, cam2)
        rnd.setInput(0, ct)
        m = nuke.nodes.Merge2(operation='plus', inputs=[lastmerge, rnd])
        xPos = rnd.xpos()
        yPos = rnd.ypos()
        ct.setYpos(yPos - 24)
        ct.setXpos(xPos - 150)
        sc.setXpos(xPos + 150)
        sc.setYpos(yPos - 21)
        cam2.setXpos(xPos + 10)
        return m

    m = Built3dScene(cam1, cam2)
    nuke.delete(cam1)
    nuke.connectViewer(0, m)
    v = nuke.toNode("Viewer1")
    mPosX = m.xpos()
    mPosY = m.ypos()
    v.setXpos(mPosX)
    v.setYpos(mPosY + 50)
    ####################

    end = nuke.message("AutoComp done.\nSequence is " + str(lf - ff + 1) +
                       " frames.")
示例#17
0
  def submit(self, username=None, password=None):
    """
    Does the work to submit the current Nuke script to Zync,
    given that the parameters on the dialog are set.
    """

    if self.existing_project.value().strip() == '' and self.new_project.value().strip() == '':
      nuke.message('Project name cannot be blank. Please either choose ' +
        'an existing project from the dropdown or enter the desired ' +
        'project name in the New Project field.')
      return

    if self.skip_check.value():
      skip_answer = nuke.ask('You\'ve asked Zync to skip the file check ' +
        'for this job. If you\'ve added new files to your script this ' +
        'job WILL error. Your nuke script will still be uploaded. Are ' +
        'you sure you want to continue?')
      if not skip_answer:
        return

    # prompt for login 
    msg = 'Zync Login'
    pw_prompt = PasswordPrompt(title=msg, user_default=self.usernameDefault)
    try:
      login_type, user, pw = pw_prompt.get_authentication_info()
    except Exception:
      msg = 'You must have a Zync account to submit a job.'
      raise Exception(msg)

    selected_write_names = []
    selected_write_nodes = []
    for k in self.writeNodes:
      if k.value():
        selected_write_names.append(k.label())
        selected_write_nodes.append(nuke.toNode(k.label()))

    active_viewer = nuke.activeViewer()
    if active_viewer:
      viewer_input = active_viewer.activeInput()
      if viewer_input == None:
        viewed_node = None
      else:
        viewed_node = active_viewer.node().input(viewer_input)
    else:
      viewer_input, viewed_node = None, None

    new_script = ZYNC.generate_file_path(nuke.root().knob('name').getValue())
    with WriteChanges(new_script):
      # The WriteChanges context manager allows us to save the
      # changes to the current session to the given script, leaving
      # the current session unchanged once the context manager is
      # exited.
      preflight_result = preflight()

      #
      #   Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only
      #   run on versions other than those.
      #
      if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8:
        #
        #   Remove all nodes that aren't connected to the Write
        #   nodes being rendered.
        #
        select_deps(selected_write_nodes)
        for node in nuke.allNodes():
          if node.isSelected():
            node.setSelected(False)
          else:
            node.setSelected(True)
        nuke.nodeDelete()
        #
        #   Freeze expressions on all nodes. Catch errors for Nuke
        #   versions that don't support the recurseGroups option.
        #
        try:
          node_list = nuke.allNodes(recurseGroups=True)
        except:
          node_list = nuke.allNodes()
        for node in node_list: 
          freeze_node(node)
      
    if not preflight_result:
      return

    # reconnect the viewer
    if viewer_input != None and viewed_node != None:
      nuke.connectViewer(viewer_input, viewed_node)

    # exec before render
    #nuke.callbacks.beforeRenders

    try:
      if login_type == 'google':
        ZYNC.login_with_google()
      else:
        ZYNC.login(username=user, password=pw)
    except zync.ZyncAuthenticationError as e:
      raise Exception('Zync Login Failed:\n\n%s' % (str(e),))

    try:
      render_params = self.get_params()
      if render_params == None:
        return
      ZYNC.submit_job('nuke', new_script, ','.join(selected_write_names), render_params)
    except zync.ZyncPreflightError as e:
      raise Exception('Preflight Check Failed:\n\n%s' % (str(e),))

    nuke.message('Job submitted to ZYNC.')
示例#18
0
def preCompForArnold():
    # set a ordered list of input layer
    layerlist = [
        'indirect_diffuse', 'direct_diffuse', 'indirect_specular',
        'direct_specular', 'reflection', 'refraction', 'AO', 'depth', 'MV',
        'alpha'
    ]
    gradelayers = [
        'indirect_diffuse', 'direct_diffuse', 'indirect_specular',
        'direct_specular', 'reflection', 'refraction', 'AO'
    ]
    # Get The Layers Of Selected Read Node

    orderedmerge = []

    Read = nuke.selectedNode()
    layers = nuke.layers(Read)

    for i in layerlist:
        for n in layers:
            if i == n:
                orderedmerge.append(i)

    for o in orderedmerge:
        for l in layers:
            if l == o:
                layers.remove(l)

    layers.remove('rgba')
    layers.remove('rgb')
    orderedshow = layers

    ################Create Shuffle########################################

    x = Read['xpos'].getValue()
    y = Read['ypos'].getValue()

    shufflegroup = []
    gradegroup = []
    dotYgroup = []
    mergegroup = []
    for k in orderedmerge:
        shuffle = nuke.nodes.Shuffle(name=k,
                                     postage_stamp=1,
                                     note_font_size=25)
        shuffle.setInput(0, Read)
        shuffle.knob('in').setValue(k)
        num = int(orderedmerge.index(k))
        shuffle.setXYpos(int(x + 150 * num), int(y + 250))
        shuffleX = shuffle['xpos'].getValue()
        shuffleY = shuffle['ypos'].getValue()
        shufflegroup.append(shuffle)

        ###Create Grade###
        if num < 7:
            gradenode = nuke.nodes.Grade(name=k, note_font_size=15)
            gradenode.setInput(0, shuffle)
            gradegroup.append(gradenode)
        else:
            pass

        ###Create Dot#####

        if num >= 1 and num < 7:
            dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25)
            dot.setInput(0, gradenode)
            dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num))
            dotX = dot['xpos'].getValue()
            dotY = dot['ypos'].getValue()
            dotYgroup.append(dotY)

        elif num > 6:
            dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25)
            dot.setInput(0, shuffle)
            dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num))
            dotX = dot['xpos'].getValue()
            dotY = dot['ypos'].getValue()
            dotYgroup.append(dotY)

        ###Create Merge####

        if num < 1:
            pass
        elif num > 0 and num < 2:
            merge = nuke.nodes.Merge(name=k,
                                     operation='plus',
                                     mix=1,
                                     inputs=[gradegroup[0], dot],
                                     note_font_size=15)
            merge.setXYpos(int(x), int(dotY - 6))
            mergegroup.append(merge)
        elif num > 1 and num < 6:
            merge = nuke.nodes.Merge(name=k,
                                     operation='plus',
                                     mix=1,
                                     inputs=[mergegroup[num - 2], dot],
                                     note_font_size=15)
            mergegroup.append(merge)
            merge.setXYpos(int(x), int(dotY - 6))
        elif num > 5 and num < 7:
            merge = nuke.nodes.Merge(name=k,
                                     operation='multiply',
                                     mix=0.15,
                                     inputs=[mergegroup[num - 2], dot],
                                     note_font_size=15)
            mergegroup.append(merge)
            merge.setXYpos(int(x), int(dotY - 6))
        elif num > 6 and num < 8:
            copy = nuke.nodes.Copy(name=k,
                                   from0='rgba.red',
                                   to0='depth.Z',
                                   inputs=[mergegroup[num - 2], dot],
                                   note_font_size=15)
            mergegroup.append(copy)
            copy.setXYpos(int(x), int(dotY - 14))
        elif num > 7 and num < 9:
            copy = nuke.nodes.Copy(name=k,
                                   from0='rgba.red',
                                   to0='MV.red',
                                   from1='rgba.green',
                                   to1='MV.green',
                                   inputs=[mergegroup[num - 2], dot],
                                   note_font_size=15)
            mergegroup.append(copy)
            copy.setXYpos(int(x), int(dotY - 26))
        elif num > 8 and num < 10:
            copy = nuke.nodes.Copy(name=k,
                                   from0='rgba.red',
                                   to0='rgba.alpha',
                                   inputs=[mergegroup[num - 2], dot],
                                   note_font_size=15)
            mergegroup.append(copy)
            copy.setXYpos(int(x), int(dotY - 14))
            ###Create show Layers####

    for element in orderedshow:
        num += 1
        shuffle = nuke.nodes.Shuffle(name=element,
                                     postage_stamp=1,
                                     note_font_size=25)
        shuffle.setInput(0, Read)
        shuffle.knob('in').setValue(element)
        shuffle.setXYpos(int(x + 150 * num), int(y + 250))

    nuke.connectViewer(0, mergegroup[-1])
示例#19
0
def buildScene():  # Assemble NK scene
    dataShotDic = buildShotDic()
    exrPath = dataShotDic['EXR']
    endFrame = dataShotDic['endFrame']

    # Define Pathes for  Write Nodes
    exrPathFull = '{0}{1}/{2}/SHOT_{3}/MASTER/{4}'.format(
        root3D, codePart, codeSequence, codeShot, exrPath)
    dpxPathFull = '{3}{4}/{0}/{1}/SHOT_{2}/v{5}/E{1}_S{2}_v{5}.%04d.dpx'.format(
        codePart, codeSequence, codeShot, rootRND, 'DPX',
        '[knob VERSION.label]')
    movPathFull = '{3}{4}/{0}/{1}/SHOT_{2}/E{1}_S{2}_v{5}.mov'.format(
        codePart, codeSequence, codeShot, rootRND, 'MOV',
        '[knob VERSION.label]')
    nameBase = 'E{0}_S{1}'.format(codeSequence, codeShot)
    reader = nuke.nodes.Read(name='REA_E{0}_S{1}'.format(
        codeSequence, codeShot),
                             file=exrPathFull,
                             first=101,
                             last=endFrame,
                             xpos=0,
                             ypos=0)  #creating Reader Node

    dot_A = nuke.nodes.Dot(name='DOT', xpos=34, ypos=250)
    dot_A.setInput(0, reader)
    dot_B = nuke.nodes.Dot(name='DOT', xpos=184, ypos=250)
    dot_B.setInput(0, dot_A)

    verser = nuke.nodes.StickyNote(
        name="VERSION", xpos=0,
        ypos=380)  # Node to DRIVE VESIONS of Nuke renders
    verser['label'].setValue('001')
    # Create WRITE nodes
    writeDPX = nuke.nodes.Write(name='DPX_E{0}_S{1}'.format(
        codeSequence, codeShot),
                                file=dpxPathFull,
                                file_type='dpx',
                                colorspace='Cineon',
                                first=101,
                                last=endFrame,
                                xpos=0,
                                ypos=300)
    writeDPX.setInput(0, dot_A)
    writeDPX['beforeRender'].setValue(
        "if not os.path.isdir(os.path.dirname(nuke.thisNode()['file'].evaluate())):os.makedirs(os.path.dirname(nuke.thisNode()['file'].evaluate()))"
    )  # Create folder for writer output, if its not exists
    writeMOV = nuke.nodes.Write(name='MOV_E{0}_S{1}'.format(
        codeSequence, codeShot),
                                file=movPathFull,
                                file_type='dpx',
                                colorspace='sRGB',
                                first=101,
                                last=endFrame,
                                xpos=150,
                                ypos=300)
    writeMOV.setInput(0, dot_B)
    writeMOV['beforeRender'].setValue(
        "if not os.path.isdir(os.path.dirname(nuke.thisNode()['file'].evaluate())):os.makedirs(os.path.dirname(nuke.thisNode()['file'].evaluate()))"
    )  # Create folder for writer output, if its not exists
    # Setup NK scene
    view = nuke.toNode('Viewer1')
    view['xpos'].setValue(-140)
    view['ypos'].setValue(30)
    nuke.knob('root.first_frame', str(frameStart))
    nuke.knob('root.last_frame', endFrame)
    nuke.connectViewer(0, reader)
示例#20
0
  def submit(self):
    """
    Does the work to submit the current Nuke script to Zync,
    given that the parameters on the dialog are set.
    """

    selected_write_names = []
    selected_write_nodes = []
    for k in self.writeNodes:
      if k.value():
        selected_write_names.append(k.label())
        selected_write_nodes.append(nuke.toNode(k.label()))

    active_viewer = nuke.activeViewer()
    if active_viewer:
      viewer_input = active_viewer.activeInput()
      if viewer_input == None:
        viewed_node = None
      else:
        viewed_node = active_viewer.node().input(viewer_input)
    else:
      viewer_input, viewed_node = None, None

    new_script = self.zync_conn.generate_file_path(nuke.root().knob('name').getValue())
    with WriteChanges(new_script):
      # The WriteChanges context manager allows us to save the
      # changes to the current session to the given script, leaving
      # the current session unchanged once the context manager is
      # exited.
      preflight_result = preflight()

      #
      #   Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only
      #   run on versions other than those.
      #
      if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8:
        #
        #   Remove all nodes that aren't connected to the Write
        #   nodes being rendered.
        #
        select_deps(selected_write_nodes)
        for node in nuke.allNodes():
          if node.isSelected():
            node.setSelected(False)
          else:
            node.setSelected(True)
        nuke.nodeDelete()
        #
        #   Freeze expressions on all nodes. Catch errors for Nuke
        #   versions that don't support the recurseGroups option.
        #
        try:
          node_list = nuke.allNodes(recurseGroups=True)
        except:
          node_list = nuke.allNodes()
        for node in node_list:
          freeze_node(node)

    if not preflight_result:
      return

    # reconnect the viewer
    if viewer_input != None and viewed_node != None:
      nuke.connectViewer(viewer_input, viewed_node)

    # exec before render
    #nuke.callbacks.beforeRenders

    try:
      render_params = self.get_params()
      if render_params == None:
        return
      self.zync_conn.submit_job('nuke', new_script, ','.join(selected_write_names), render_params)
    except zync.ZyncPreflightError as e:
      raise Exception('Preflight Check Failed:\n\n%s' % (str(e),))

    nuke.message('Job submitted to ZYNC.')
示例#21
0
    def submit(self, username=None, password=None):
        """
        Does the work to submit the current Nuke script to ZYNC,
        given that the parameters on the dialog are set.

        TODO: factor the bulk of this out of the ZyncRenderPanel object
        """

        if self.existing_project.value().strip(
        ) == '' and self.new_project.value().strip() == '':
            nuke.message(
                'Project name cannot be blank. Please either choose an existing project from the dropdown or enter the desired project name in the New Project field.'
            )
            return

        if self.skip_check.value():
            skip_answer = nuke.ask(
                "You've asked ZYNC to skip the file check for this job. If you've added new files to your script this job WILL error. Your nuke script will still be uploaded. Are you sure you want to continue?"
            )
            if not skip_answer:
                return

        if not username and not password:
            if hasattr(nuke, 'zync_creds') and nuke.zync_creds.get('user'):
                # get username and password
                user = nuke.zync_creds.get('user')
                pw = nuke.zync_creds.get('pw')
            else:
                # prompt username and password:
                msg = 'Enter your ZYNC Render Username/Password'
                pw_prompt = PasswordPrompt(title=msg,
                                           user_default=self.usernameDefault)
                try:
                    user, pw = pw_prompt.get_password()
                except Exception:
                    msg = 'You must have a ZYNC account to submit!'
                    raise Exception(msg)
                else:
                    nuke.zync_creds = dict(user=user, pw=pw)

        #selected_write = self.writeListNames[int(self.writeNode.getValue())]
        selected_write_names = []
        selected_write_nodes = []
        for k in self.writeNodes:
            if k.value():
                selected_write_names.append(k.label())
                selected_write_nodes.append(nuke.toNode(k.label()))

        active_viewer = nuke.activeViewer()
        if active_viewer:
            viewer_input = active_viewer.activeInput()
            if viewer_input == None:
                viewed_node = None
            else:
                viewed_node = active_viewer.node().input(viewer_input)
        else:
            viewer_input, viewed_node = None, None

        new_script = generate_script_path()
        with WriteChanges(new_script):
            # The WriteChanges context manager allows us to save the
            # changes to the current session to the given script, leaving
            # the current session unchanged once the context manager is
            # exited.
            preflight_result = preflight()

            #
            #   Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only
            #   run on versions other than those.
            #
            if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8:
                #
                #   Remove all nodes that aren't connected to the Write
                #   nodes being rendered.
                #
                select_deps(selected_write_nodes)
                for node in nuke.allNodes():
                    if node.isSelected():
                        node.setSelected(False)
                    else:
                        node.setSelected(True)
                nuke.nodeDelete()
                #
                #   Freeze expressions on all nodes. Catch errors for Nuke
                #   versions that don't support the recurseGroups option.
                #
                try:
                    node_list = nuke.allNodes(recurseGroups=True)
                except:
                    node_list = nuke.allNodes()
                for node in node_list:
                    freeze_node(node)

        if not preflight_result:
            return

        # reconnect the viewer
        if viewer_input != None and viewed_node != None:
            nuke.connectViewer(viewer_input, viewed_node)

        # exec before render
        #nuke.callbacks.beforeRenders

        try:
            ZYNC.login(username=user, password=pw)
        except zync.ZyncAuthenticationError as e:
            nuke.zync_creds['user'] = None
            nuke.zync_creds['pw'] = None
            raise Exception('ZYNC Login Failed:\n\n%s' % (str(e), ))

        try:
            render_params = self.get_params()
            if render_params == None:
                return
            ZYNC.submit_job('nuke', new_script, ','.join(selected_write_names),
                            render_params)
        except zync.ZyncPreflightError as e:
            raise Exception('Preflight Check Failed:\n\n%s' % (str(e), ))

        nuke.message('Job submitted to ZYNC.')
def watermark_proc(in_node, w_type, w_text, w_file, w_path):

    in_node_name = in_node['name'].getValue()

    with nuke.Root():
        watermark = nuke.createNode('dushyant_info_watermark_node')

        print watermark
        is_text = False
        if w_type == 'text':
            is_text = True
        elif w_type == 'image':
            is_text = False
        print is_text
        watermark.setName("%s_Watermark" % in_node_name)

        #Setting knobs
        # calling nodes from the Gizmo
        w_read = nuke.toNode('%s.watermark_image' % watermark.name())
        w_write = nuke.toNode('%s.Write' % watermark.name())
        print w_write
        # Processing write node paths

        read_file = in_node['file'].getValue()
        basename = os.path.basename(read_file)
        if w_path == 'None':
            write_file = '%s/watermark/%s' % (os.path.dirname(read_file),
                                              basename)

        else:
            write_file = os.path.join(
                w_path,
                os.path.splitext(basename)[0].split('.')[0], basename)

        w_write['file'].fromScript(write_file)

        createWriteDirs(w_write)

        # Setting Input/Output

        # Adding root I/O

        watermark.setInput(0, in_node)

        # Setting watermark defaults

        if w_type == 'text':
            watermark['w_text_knob'].setEnabled(True)
            watermark['wm_file'].setEnabled(False)
            watermark['opt_knob'].setValue(0)
            watermark['w_text_knob'].setValue(
                w_text)  #This is the text knob string on group node
            watermark['wm_file'].setValue('')
            w_read['file'].setValue('')

            watermark['translate'].setValue(
                [nuke.Root().width() / 2, -nuke.Root().height() / 2])
            watermark['rotate'].setValue(34)
            watermark['scale'].setValue(6.3)
            nuke.toNode('%s.Text1' % watermark.name())['box'].setT(
                nuke.Root().height())
            nuke.toNode('%s.Text1' %
                        watermark.name())['box'].setY(nuke.Root().height() -
                                                      101)
        elif w_type == 'image':
            watermark['wm_file'].setEnabled(True)
            watermark['w_text_knob'].setEnabled(False)
            watermark['opt_knob'].setValue(1)
            watermark['wm_file'].fromScript(w_file)
            w_read['file'].fromScript('[value parent.wm_file]')

            watermark['translate'].setValue([0, 0])
            watermark['rotate'].setValue(0)
            watermark['scale'].setValue(1)

        watermark['tiles'].setValue(7.4)
        watermark['opacity'].setValue(0.185)

        nuke.connectViewer(0, watermark)
示例#23
0
    def submit(self, username=None, password=None):
        """
        Does the work to submit the current Nuke script to ZYNC,
        given that the parameters on the dialog are set.

        TODO: factor the bulk of this out of the ZyncRenderPanel object
        """

        if self.existing_project.value().strip() == '' and self.new_project.value().strip() == '':
            nuke.message('Project name cannot be blank. Please either choose an existing project from the dropdown or enter the desired project name in the New Project field.')
            return

        if self.skip_check.value():
            skip_answer = nuke.ask( "You've asked ZYNC to skip the file check for this job. If you've added new files to your script this job WILL error. Your nuke script will still be uploaded. Are you sure you want to continue?" )
            if not skip_answer:
                return

        if not username and not password:
            if hasattr(nuke, 'zync_creds') and nuke.zync_creds.get('user'):
                # get username and password
                user = nuke.zync_creds.get('user')
                pw = nuke.zync_creds.get('pw')
            else:
                # prompt username and password:
                msg = 'Enter your ZYNC Render Username/Password'
                pw_prompt = PasswordPrompt( title=msg, user_default=self.usernameDefault )
                try:
                    user, pw = pw_prompt.get_password()
                except Exception:
                    msg = 'You must have a ZYNC account to submit!'
                    raise Exception(msg)
                else:
                    nuke.zync_creds = dict(user=user, pw=pw)

        #selected_write = self.writeListNames[int(self.writeNode.getValue())]
        selected_write_names = []
        selected_write_nodes = []
        for k in self.writeNodes:
            if k.value():
                selected_write_names.append( k.label() )
                selected_write_nodes.append( nuke.toNode( k.label() ) )

        active_viewer = nuke.activeViewer()
        if active_viewer:
            viewer_input = active_viewer.activeInput()
            if viewer_input == None:
                viewed_node = None
            else:
                viewed_node = active_viewer.node().input(viewer_input)
        else:
            viewer_input, viewed_node = None, None

        new_script = generate_script_path()
        with WriteChanges(new_script):
            # The WriteChanges context manager allows us to save the
            # changes to the current session to the given script, leaving
            # the current session unchanged once the context manager is
            # exited.
            preflight_result = preflight()

            #
            #   Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only
            #   run on versions other than those.
            #
            if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8:
                #
                #   Remove all nodes that aren't connected to the Write
                #   nodes being rendered.
                #
                select_deps(selected_write_nodes)
                for node in nuke.allNodes():
                    if node.isSelected():
                        node.setSelected(False)
                    else:
                        node.setSelected(True)
                nuke.nodeDelete()
                #
                #   Freeze expressions on all nodes. Catch errors for Nuke
                #   versions that don't support the recurseGroups option.
                #
                try:
                    node_list = nuke.allNodes(recurseGroups=True)
                except:
                    node_list = nuke.allNodes()
                for node in node_list: 
                    freeze_node(node)
            
        if not preflight_result:
            return

        # reconnect the viewer
        if viewer_input != None and viewed_node != None:
            nuke.connectViewer(viewer_input, viewed_node)

        # exec before render
        #nuke.callbacks.beforeRenders

        try:
            ZYNC.login( username=user, password=pw )
        except zync.ZyncAuthenticationError as e:
            nuke.zync_creds['user'] = None
            nuke.zync_creds['pw'] = None
            raise Exception('ZYNC Login Failed:\n\n%s' % (str(e),))

        try:
            render_params = self.get_params()
            if render_params == None:
                return
            ZYNC.submit_job('nuke', new_script, ','.join( selected_write_names ), render_params)
        except zync.ZyncPreflightError as e:
            raise Exception('Preflight Check Failed:\n\n%s' % (str(e),))

        nuke.message('Job submitted to ZYNC.')
示例#24
0
  def submit(self):
    """Does the work to submit the current Nuke script to Zync, given that the parameters on the dialog are set."""

    selected_write_names = []
    selected_write_nodes = []
    for k in self.writeNodes:
      if k.value():
        selected_write_names.append(k.label())
        selected_write_nodes.append(nuke.toNode(k.label()))

    active_viewer = nuke.activeViewer()
    if active_viewer:
      viewer_input = active_viewer.activeInput()
      if viewer_input is None:
        viewed_node = None
      else:
        viewed_node = active_viewer.node().input(viewer_input)
    else:
      viewer_input, viewed_node = None, None

    script_path = nuke.root().knob('name').getValue()
    new_script = self.maybe_correct_path_separators(script_path)
    write_node_to_user_path_map = dict()
    read_dependencies = []

    with WriteChanges(new_script):
      # Nuke 7.0v1 through 7.0v8 broke its own undo() functionality, so this will only run on versions other than those.
      if nuke.NUKE_VERSION_MAJOR != 7 or nuke.NUKE_VERSION_MINOR > 0 or nuke.NUKE_VERSION_RELEASE > 8:
        # Remove all nodes that aren't connected to the Write nodes being rendered.
        select_deps(selected_write_nodes)
        for node in nuke.allNodes():
          if node.isSelected():
            node.setSelected(False)
          else:
            node.setSelected(True)
        nuke.nodeDelete()
        # Freeze expressions on all nodes. Catch errors for Nuke versions that don't support the recurseGroups option.
        try:
          node_list = nuke.allNodes(recurseGroups=True)
        except:
          node_list = nuke.allNodes()
        for node in node_list:
          freeze_node(node)

        _collect_write_node_paths(selected_write_names, write_node_to_user_path_map)
        read_nodes = [read_node for read_node in node_list if read_node.Class() == 'Read']
        _collect_read_node_paths(read_nodes, read_dependencies)

    # reconnect the viewer
    if viewer_input is not None and viewed_node is not None:
      nuke.connectViewer(viewer_input, viewed_node)

    # exec before render
    # nuke.callbacks.beforeRenders

    try:
      render_params = self.get_params()
      if render_params is None:
        return
      render_params['scene_info']['write_node_to_output_map'] = write_node_to_user_path_map
      render_params['scene_info']['files'] = read_dependencies
      self.zync_conn.submit_job('nuke', new_script, ','.join(selected_write_names), render_params)
    except zync.ZyncPreflightError as e:
      raise Exception('Preflight Check Failed:\n\n%s' % (str(e),))

    nuke.message('Job submitted to ZYNC.')
def watermark_proc(in_node, w_type, w_text, w_file, w_path):

    in_node_name = in_node['name'].getValue()

    with nuke.Root():
        watermark = nuke.createNode('dushyant_info_watermark_node')

        print watermark
        is_text = False
        if w_type == 'text':
            is_text = True
        elif w_type == 'image':
            is_text = False
        print is_text
        watermark.setName( "%s_Watermark" % in_node_name )


        #Setting knobs
        # calling nodes from the Gizmo
        w_read = nuke.toNode( '%s.watermark_image' % watermark.name() )
        w_write = nuke.toNode( '%s.Write' % watermark.name() )
        print w_write
        # Processing write node paths

        read_file = in_node['file'].getValue()
        basename = os.path.basename(read_file)
        if w_path == 'None':
            write_file = '%s/watermark/%s' % ( os.path.dirname(read_file), basename )

        else:
            write_file = os.path.join( w_path, os.path.splitext(basename)[0].split('.')[0], basename )

        w_write['file'].fromScript(write_file)

        createWriteDirs(w_write)

        # Setting Input/Output

        # Adding root I/O

        watermark.setInput(0, in_node)

        # Setting watermark defaults

        if w_type == 'text':
            watermark['w_text_knob'].setEnabled(True)
            watermark['wm_file'].setEnabled(False)
            watermark['opt_knob'].setValue(0)
            watermark['w_text_knob'].setValue(w_text) #This is the text knob string on group node
            watermark['wm_file'].setValue('')
            w_read['file'].setValue('')

            watermark['translate'].setValue([nuke.Root().width()/2, -nuke.Root().height()/2])
            watermark['rotate'].setValue(34)
            watermark['scale'].setValue(6.3)
            nuke.toNode('%s.Text1' % watermark.name())['box'].setT(nuke.Root().height())
            nuke.toNode('%s.Text1' % watermark.name())['box'].setY(nuke.Root().height()-101)
        elif w_type == 'image':
            watermark['wm_file'].setEnabled(True)
            watermark['w_text_knob'].setEnabled(False)
            watermark['opt_knob'].setValue(1)
            watermark['wm_file'].fromScript(w_file)
            w_read['file'].fromScript('[value parent.wm_file]')

            watermark['translate'].setValue([0, 0])
            watermark['rotate'].setValue(0)
            watermark['scale'].setValue(1)

        watermark['tiles'].setValue(7.4)
        watermark['opacity'].setValue(0.185)

        nuke.connectViewer( 0, watermark )
示例#26
0
def addFrameNow():
    AddFrame = nuke.nodes.addFrame(skipFrame=nuke.frame(),
                                   inputs=nuke.selectedNodes())
    nuke.connectViewer(0, AddFrame)
    AddFrame.selectOnly()