# loadZBrushDisp.py # A Wacro for Poser 6 to load ZBrush 8/8 displacement maps # (c) 2005 Stefan Werner # http://www.stewreo.de/ import poser def displace(mat): tree = mat.ShaderTree() root = tree.Node(0) if (root.Type() != poser.kNodeTypeCodePOSERSURFACE): poser.DialogSimple.MessageBox("This wacro works only on object surfaces.") return disp = root.InputByInternalName("Displacement") imageNode = tree.CreateNode(poser.kNodeTypeCodeIMAGEMAP) pathStr = poser.DialogSimple.PickImage() if pathStr or pathStr=="": if not pathStr == "None": imageNode.Input(0).SetString(pathStr) else: return # create and set up math nodes mathNode = tree.CreateNode(poser.kNodeTypeCodeMATH) mathNode.Input(1).SetFloat(2.56) mathNode.Input(2).SetFloat(0.01) mathNode.SetLocation(220,420) math2Node = tree.CreateNode(poser.kNodeTypeCodeMATH) math2Node.Input(0).SetFloat(0) math2Node.Input(1).SetFloat(1) math2Node.Input(2).SetFloat(-1.28) math2Node.SetLocation(220,340) mathNode.ConnectToInput(math2Node.Input(1)) math2Node.ConnectToInput(disp) # two component nodes comp1Node = tree.CreateNode(poser.kNodeTypeCodeCOMP) comp2Node = tree.CreateNode(poser.kNodeTypeCodeCOMP) comp1Node.Input(0).SetFloat(0) comp2Node.Input(0).SetFloat(1) comp1Node.ConnectToInput(mathNode.Input(1)) comp2Node.ConnectToInput(mathNode.Input(2)) comp1Node.SetLocation(440,340) comp2Node.SetLocation(440,420) imageNode.ConnectToInput(comp1Node.Input(2)) imageNode.ConnectToInput(comp2Node.Input(2)) imageNode.SetLocation(660, 340) tree.UpdatePreview() def setRenderSettings(): scene = poser.Scene() scene.SetCurrentRenderEngine(poser.kRenderEngineCodeFIREFLY) renderoptions = scene.CurrentFireFlyOptions() renderoptions.SetDisplacement(1) try: mats = poser.Scene().WacroMaterials() if (mats == None): poser.DialogSimple.MessageBox( "Please select a material before running this wacro.") else: for mat in mats: displace(mat) setRenderSettings() except: poser.DialogSimple.MessageBox("Wacro unsuccessful. Sorry.")