def InitExporter(bus): scene = bus['scene'] engine = bus['engine'] o = bus['output'] VRayScene = scene.vray VRayDR = VRayScene.VRayDR drSharePath = "" if VRayDR.on: if VRayDR.assetSharing == 'SHARE': drSharePath = bpy.path.abspath(VRayDR.shared_dir) exporter = _vray_for_blender.init( engine=engine.as_pointer(), context=bpy.context.as_pointer(), scene=scene.as_pointer(), data=bpy.data.as_pointer(), mainFile=o.fileManager.getFileByPluginType('MAIN'), objectFile=o.fileManager.getFileByPluginType('OBJECT'), envFile=o.fileManager.getFileByPluginType('WORLD'), geometryFile=o.fileManager.getFileByPluginType('GEOMETRY'), lightsFile=o.fileManager.getFileByPluginType('LIGHT'), materialFile=o.fileManager.getFileByPluginType('MATERIAL'), textureFile=o.fileManager.getFileByPluginType('TEXTURE'), drSharePath=drSharePath, ) return exporter
def InitExporter(bus): scene = bus['scene'] engine = bus['engine'] o = bus['output'] VRayScene = scene.vray VRayDR = VRayScene.VRayDR drSharePath = "" if VRayDR.on: if VRayDR.assetSharing == 'SHARE': drSharePath = bpy.path.abspath(VRayDR.shared_dir) exporter = _vray_for_blender.init( engine = engine.as_pointer(), context = bpy.context.as_pointer(), scene = scene.as_pointer(), data = bpy.data.as_pointer(), mainFile = o.fileManager.getFileByPluginType('MAIN'), objectFile = o.fileManager.getFileByPluginType('OBJECT'), envFile = o.fileManager.getFileByPluginType('WORLD'), geometryFile = o.fileManager.getFileByPluginType('GEOMETRY'), lightsFile = o.fileManager.getFileByPluginType('LIGHT'), materialFile = o.fileManager.getFileByPluginType('MATERIAL'), textureFile = o.fileManager.getFileByPluginType('TEXTURE'), drSharePath = drSharePath, ) return exporter
def ExportObjects(objects, filepath, animation='NONE', frameStart=1, frameEnd=10): scene = bpy.context.scene vrsceneFile = open(filepath, 'w') o = VRayStream.VRaySimplePluginExporter(outputFile=vrsceneFile) exporter = _vray_for_blender.init( engine=0, context=bpy.context.as_pointer(), scene=scene.as_pointer(), data=bpy.data.as_pointer(), mainFile=o.output, objectFile=o.output, envFile=o.output, geometryFile=o.output, lightsFile=o.output, materialFile=o.output, textureFile=o.output, drSharePath="", ) def _export_objects(objects): # Init stuff for dupli / particles / etc _vray_for_blender.exportObjectsPre(exporter) for ob in objects: print(ob.name) _vray_for_blender.exportObject(ob.as_pointer(), bpy.data.as_pointer(), exporter) # Write dupli / particles / etc _vray_for_blender.exportObjectsPost(exporter) # NOTE: Have to do it before export pre init if animation not in {'NONE'}: _vray_for_blender.initAnimation(True, frameStart, frameEnd) if animation not in {'NONE'}: while frameStart <= frameEnd: print(frameStart) scene.frame_set(frameStart) _vray_for_blender.setFrame(frameStart) _export_objects(objects) frameStart += scene.frame_step else: _export_objects(objects) o.done() vrsceneFile.close() _vray_for_blender.clearFrames() _vray_for_blender.clearCache() _vray_for_blender.exit(exporter)
def ExportObjects(objects, filepath, animation='NONE', frameStart=1, frameEnd=10): scene = bpy.context.scene vrsceneFile = open(filepath, 'w') o = VRayStream.VRaySimplePluginExporter(outputFile=vrsceneFile) exporter = _vray_for_blender.init( engine = 0, context = bpy.context.as_pointer(), scene = scene.as_pointer(), data = bpy.data.as_pointer(), mainFile = o.output, objectFile = o.output, envFile = o.output, geometryFile = o.output, lightsFile = o.output, materialFile = o.output, textureFile = o.output, drSharePath = "", ) def _export_objects(objects): # Init stuff for dupli / particles / etc _vray_for_blender.exportObjectsPre(exporter) for ob in objects: print(ob.name) _vray_for_blender.exportObject(ob.as_pointer(), bpy.data.as_pointer(), exporter) # Write dupli / particles / etc _vray_for_blender.exportObjectsPost(exporter) # NOTE: Have to do it before export pre init if animation not in {'NONE'}: _vray_for_blender.initAnimation(True, frameStart, frameEnd ) if animation not in {'NONE'}: while frameStart <= frameEnd: print(frameStart) scene.frame_set(frameStart) _vray_for_blender.setFrame(frameStart) _export_objects(objects) frameStart += scene.frame_step else: _export_objects(objects) o.done() vrsceneFile.close() _vray_for_blender.clearFrames() _vray_for_blender.clearCache() _vray_for_blender.exit(exporter)
def execute(self, context): VRayExporter = context.scene.vray.Exporter selectedNodeTree = VRayExporter.ntreeListIndex if selectedNodeTree == -1: return {'CANCELLED'} ntree = bpy.data.node_groups[selectedNodeTree] outputNode = NodesExport.GetOutputNode(ntree) if not outputNode: return {'CANCELLED'} exportPath = BlenderUtils.GetFullFilepath(VRayExporter.ntreeExportDirectory) exportPath = PathUtils.CreateDirectory(exportPath) fileName = "%s.vrscene" % LibUtils.CleanString(ntree.name) outputFilepath = os.path.normpath(os.path.join(exportPath, fileName)) debug.PrintInfo('Exporting "%s" to: "%s"' % (ntree.name, outputFilepath)) o = VRayStream.VRaySimplePluginExporter(outputFilepath) exporter = _vray_for_blender.init( engine = 0, context = bpy.context.as_pointer(), scene = bpy.context.scene.as_pointer(), data = bpy.data.as_pointer(), mainFile = o.output, objectFile = o.output, envFile = o.output, geometryFile = o.output, lightsFile = o.output, materialFile = o.output, textureFile = o.output, drSharePath = "", ) for sock in outputNode.inputs: conNode = NodesExport.GetConnectedNode(ntree, sock) if conNode: _vray_for_blender.exportNode( ntree.as_pointer(), conNode.as_pointer(), sock.as_pointer() ) _vray_for_blender.exit(exporter) return {'FINISHED'}
def execute(self, context): VRayExporter = context.scene.vray.Exporter selectedNodeTree = VRayExporter.ntreeListIndex if selectedNodeTree == -1: return {'CANCELLED'} ntree = bpy.data.node_groups[selectedNodeTree] outputNode = NodesExport.GetOutputNode(ntree) if not outputNode: return {'CANCELLED'} exportPath = BlenderUtils.GetFullFilepath( VRayExporter.ntreeExportDirectory) exportPath = PathUtils.CreateDirectory(exportPath) fileName = "%s.vrscene" % LibUtils.CleanString(ntree.name) outputFilepath = os.path.normpath(os.path.join(exportPath, fileName)) debug.PrintInfo('Exporting "%s" to: "%s"' % (ntree.name, outputFilepath)) o = VRayStream.VRaySimplePluginExporter(outputFilepath) exporter = _vray_for_blender.init( engine=0, context=bpy.context.as_pointer(), scene=bpy.context.scene.as_pointer(), data=bpy.data.as_pointer(), mainFile=o.output, objectFile=o.output, envFile=o.output, geometryFile=o.output, lightsFile=o.output, materialFile=o.output, textureFile=o.output, drSharePath="", ) for sock in outputNode.inputs: conNode = NodesExport.GetConnectedNode(ntree, sock) if conNode: _vray_for_blender.exportNode(ntree.as_pointer(), conNode.as_pointer(), sock.as_pointer()) _vray_for_blender.exit(exporter) return {'FINISHED'}
def execute(self, context): if not self.asset_name: self.report({'ERROR'}, "Asset name is not set!") return {'CANCELLED'} presetsPath = PathUtils.CreateDirectory(os.path.join(SysUtils.GetUserConfigDir(), "presets")) userNodeAssetPath = PathUtils.CreateDirectory(os.path.join(presetsPath, self.asset_type)) fileName = "%s.vrscene" % LibUtils.CleanString(bpy.path.display_name(self.asset_name)) outputFilepath = os.path.normpath(os.path.join(userNodeAssetPath, fileName)) # Create exporter (output) o = VRayStream.VRaySimplePluginExporter(outputFilepath) exporter = _vray_for_blender.init( engine = 0, context = bpy.context.as_pointer(), scene = bpy.context.scene.as_pointer(), data = bpy.data.as_pointer(), mainFile = o.output, objectFile = o.output, envFile = o.output, geometryFile = o.output, lightsFile = o.output, materialFile = o.output, textureFile = o.output, drSharePath = "", ) # Get selected nodes ntree = context.space_data.edit_tree selectedNode = context.selected_nodes[0] if selectedNode.bl_idname == 'VRayNodeRenderChannels': pluginNames = [] for inSock in selectedNode.inputs: pluginNames.append(NodesExport.WriteConnectedNode(None, ntree, inSock)) pluginName = "List(%s)" % ",".join(pluginNames) else: if selectedNode.bl_idname == 'VRayNodeOutputMaterial': selectedNode = NodesExport.GetConnectedNode(ntree, selectedNode.inputs['Material']) pluginName = _vray_for_blender.exportNode( ntree.as_pointer(), selectedNode.as_pointer(), None ) # Write fake Asset node o.set('MAIN', 'Asset', self.asset_type.capitalize()) o.writeHeader() o.writeAttibute(self.asset_type, pluginName) o.writeFooter() o.done() _vray_for_blender.exit(exporter) return {'FINISHED'}
def execute(self, context): sce = context.scene # Use current active object UI for initial settings ob = bpy.context.object selection = bpy.context.selected_objects oneObject = len(selection) GeomMeshFile = ob.data.vray.GeomMeshFile # Create output path outputDirpath = BlenderUtils.GetFullFilepath(GeomMeshFile.dirpath) outputDirpath = PathUtils.CreateDirectory(outputDirpath) # Create tmp export file vrsceneFilepath = os.path.join(tempfile.gettempdir(), "vrmesh.vrscene") vrsceneFile = open(vrsceneFilepath, 'w') # Settings frames = None frameStart = 1 frameStep = 1 if GeomMeshFile.animation not in {'NONE'}: if GeomMeshFile.animation == 'MANUAL': frameStart = GeomMeshFile.frame_start frames = (frameStart, GeomMeshFile.frame_end, 1) else: frameStart = sce.frame_start frameStep = sce.frame_step frames = (sce.frame_start, sce.frame_end, sce.frame_step) applyTm = GeomMeshFile.apply_transforms useVelocity = GeomMeshFile.add_velocity # Export objects meshes and generate nodes name list obPluginNames = [] o = VRayStream.VRaySimplePluginExporter(outputFile=vrsceneFile) exporter = _vray_for_blender.init( engine = 0, context = bpy.context.as_pointer(), scene = sce.as_pointer(), data = bpy.data.as_pointer(), mainFile = o.output, objectFile = o.output, envFile = o.output, geometryFile = o.output, lightsFile = o.output, materialFile = o.output, textureFile = o.output, drSharePath = "", ) _vray_for_blender.setFrame(frameStart) for ob in selection: if ob.type in BlenderUtils.NonGeometryTypes: continue nodeName = None if not frames: nodeName = ExportMeshSample(o, ob) else: sce = bpy.context.scene frame_current = sce.frame_current for f in range(frames[0], frames[1]+frames[2], frames[2]): bpy.context.scene.frame_set(f) _vray_for_blender.setFrame(f) nodeName = ExportMeshSample(o, ob) _vray_for_blender.clearCache() sce.frame_set(frame_current) obPluginNames.append([ob, nodeName]) o.done() vrsceneFile.close() _vray_for_blender.clearFrames() _vray_for_blender.exit(exporter) # Launch the generator tool err = None for ob, nodeName in obPluginNames: vrmeshName = LibUtils.CleanString(ob.name) if oneObject and GeomMeshFile.filename: vrmeshName = GeomMeshFile.filename vrmeshName += ".vrmesh" vrmeshFilepath = os.path.join(outputDirpath, vrmeshName) err = LaunchPly2Vrmesh(vrsceneFilepath, vrmeshFilepath, nodeName, frames, applyTm, useVelocity) if err is not None: break if GeomMeshFile.proxy_attach_mode != 'NONE': attachOb = ob if GeomMeshFile.proxy_attach_mode == 'NEW': newName = '%s@VRayProxy' % ob.name newMesh = bpy.data.meshes.new(newName) attachOb = bpy.data.objects.new(newName, newMesh) context.scene.objects.link(attachOb) BlenderUtils.SelectObject(attachOb) if GeomMeshFile.proxy_attach_mode == 'NEW': for slot in ob.material_slots: if slot and slot.material: attachOb.data.materials.append(slot.material) attachOb.material_slots[-1].link = 'OBJECT' attachOb.material_slots[-1].material = slot.material if GeomMeshFile.apply_transforms: bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) else: attachOb.matrix_world = ob.matrix_world CreateProxyNodetree(attachOb, vrmeshFilepath) if GeomMeshFile.proxy_attach_mode in {'NEW', 'REPLACE'}: LoadProxyPreviewMesh( attachOb, vrmeshFilepath, GeomMeshFile.anim_type, GeomMeshFile.anim_offset, GeomMeshFile.anim_speed, context.scene.frame_current-1 ) # Remove temp export file os.remove(vrsceneFilepath) if err: self.report({'ERROR'}, "Error generating VRayProxy! Check system console!") debug.PrintError(err) return {'CANCELLED'} self.report({'INFO'}, "Done creating proxy!") return {'FINISHED'}
def execute(self, context): sce = context.scene # Use current active object UI for initial settings ob = bpy.context.object selection = bpy.context.selected_objects oneObject = len(selection) GeomMeshFile = ob.data.vray.GeomMeshFile # Create output path outputIsRelative = BlenderUtils.IsPathRelative(GeomMeshFile.dirpath) outputDirpath = BlenderUtils.GetFullFilepath(GeomMeshFile.dirpath) outputDirpath = PathUtils.CreateDirectory(outputDirpath) # Create tmp export file vrsceneFilepath = os.path.join(tempfile.gettempdir(), "vrmesh.vrscene") vrsceneFile = open(vrsceneFilepath, 'w') # Settings frames = None frameStart = 1 frameStep = 1 if GeomMeshFile.animation not in {'NONE'}: if GeomMeshFile.animation == 'MANUAL': frameStart = GeomMeshFile.frame_start frames = (frameStart, GeomMeshFile.frame_end, 1) else: frameStart = sce.frame_start frameStep = sce.frame_step frames = (sce.frame_start, sce.frame_end, sce.frame_step) applyTm = GeomMeshFile.apply_transforms useVelocity = GeomMeshFile.add_velocity # Export objects meshes and generate nodes name list obPluginNames = [] o = VRayStream.VRaySimplePluginExporter(outputFile=vrsceneFile) exporter = _vray_for_blender.init( engine=0, context=bpy.context.as_pointer(), scene=sce.as_pointer(), data=bpy.data.as_pointer(), mainFile=o.output, objectFile=o.output, envFile=o.output, geometryFile=o.output, lightsFile=o.output, materialFile=o.output, textureFile=o.output, drSharePath="", ) _vray_for_blender.initAnimation(True, frameStart, 1) _vray_for_blender.setFrame(frameStart) for ob in selection: if ob.type in BlenderUtils.NonGeometryTypes: continue nodeName = None if not frames: nodeName = ExportMeshSample(o, ob) else: sce = bpy.context.scene frame_current = sce.frame_current for f in range(frames[0], frames[1] + frames[2], frames[2]): bpy.context.scene.frame_set(f) _vray_for_blender.setFrame(f) nodeName = ExportMeshSample(o, ob) _vray_for_blender.clearCache() sce.frame_set(frame_current) obPluginNames.append([ob, nodeName]) o.done() vrsceneFile.close() _vray_for_blender.clearFrames() _vray_for_blender.exit(exporter) # Launch the generator tool err = None for ob, nodeName in obPluginNames: vrmeshName = LibUtils.CleanString(ob.name) if oneObject and GeomMeshFile.filename: vrmeshName = GeomMeshFile.filename vrmeshName += ".vrmesh" vrmeshFilepath = os.path.join(outputDirpath, vrmeshName) err = LaunchPly2Vrmesh(vrsceneFilepath, vrmeshFilepath, nodeName, frames, applyTm, useVelocity) if err is not None: break if GeomMeshFile.proxy_attach_mode != 'NONE': attachOb = ob if GeomMeshFile.proxy_attach_mode == 'NEW': newName = '%s@VRayProxy' % ob.name newMesh = bpy.data.meshes.new(newName) attachOb = bpy.data.objects.new(newName, newMesh) context.scene.objects.link(attachOb) BlenderUtils.SelectObject(attachOb) if GeomMeshFile.proxy_attach_mode == 'NEW': for slot in ob.material_slots: if slot and slot.material: attachOb.data.materials.append(slot.material) attachOb.material_slots[-1].link = 'OBJECT' attachOb.material_slots[ -1].material = slot.material if GeomMeshFile.apply_transforms: bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) else: attachOb.matrix_world = ob.matrix_world CreateProxyNodetree(attachOb, vrmeshFilepath, outputIsRelative) if GeomMeshFile.proxy_attach_mode in {'NEW', 'REPLACE'}: LoadProxyPreviewMesh(attachOb, vrmeshFilepath, GeomMeshFile.anim_type, GeomMeshFile.anim_offset, GeomMeshFile.anim_speed, context.scene.frame_current - 1) # Remove temp export file os.remove(vrsceneFilepath) if err: self.report({'ERROR'}, "Error generating VRayProxy! Check system console!") debug.PrintError(err) return {'CANCELLED'} self.report({'INFO'}, "Done creating proxy!") return {'FINISHED'}