def RenderFur(self, params_dict, img_path, exportCSV=True): ## assign fur parameters Fur.SetFurDescription(self.fur_desc, params_dict) Fur.CopyFurBaseColor2Material(self.fur_desc, self.material) t_render_start = datetime.now() ## export single frame as image cmds.setAttr("defaultRenderGlobals.imageFilePrefix", img_path, type="string") mel.eval('renderWindowRenderCamera "render" renderView ' + "{0}".format(self.camera) + ";") t_render_end = datetime.now() t_render_elapsed = t_render_end - t_render_start t_imageio_start = datetime.now() ## export parameter as CSV file if needed if exportCSV: csv_file = img_path + ".csv" FurParam.dict2csv(params_dict, csv_file) ## read rendered image for further processing img_file = img_path + "_tmp." + self.imgFileExt img_cv2 = cv2.imread(img_file) t_imageio_end = datetime.now() t_imageio_elapsed = t_imageio_end - t_imageio_start return img_cv2, t_render_elapsed, t_imageio_elapsed
def write_csv(kv_id1, kv_id2): global count params01_dict[kv_id1[0]] = kv_id1[1] params01_dict[kv_id2[0]] = kv_id2[1] export_path = "{0}/Space{1:04}.csv".format(folder_path, count) FurParam.dict2csv(FurParam.ConvertFurParams(params01_dict, True), export_path) count = count + 1 return None
def convert_param_func(params01_vec): params01_dict = {} for cnt, key in enumerate(FurParam.ParamsGeom): params01_dict[key] = params01_vec[cnt] params_dict = FurParam.ConvertFurParams(params01_dict, True) return params_dict
def invert_color_func(params_dict): params01_vec_dst = [] for key in FurParam.ParamsColor: value = param_color_dict[key] val01 = FurParam.ConvertFurParam(key, value) params01_vec_dst.append(val01) return params01_vec_dst
shutil.copy2(img_ref_path, folder_root+"/_ref_image.{0}".format(imgFileExt)) furRenderer.Init(folder_root) ############################################################ ## get default colors for initialization ############################################################ init_params_dict = FurParam.ParamsColor ## get .csv if exists csv_ref_path = os.path.splitext(img_ref_path)[0]+".csv" if True==os.path.isfile(csv_ref_path): shutil.copy2(csv_ref_path, folder_root+"/_ref_image.csv") ## read .csv and add to init_params_dict init_params_dict_file = FurParam.csv2dict(csv_ref_path) from collections import OrderedDict init_params_dict = OrderedDict( list(init_params_dict.items()) + list(init_params_dict_file.items()) ) ## assign the initial color parameters before optimization furRenderer.RenderFur(init_params_dict, folder_root+"/temp", False) ## we don't need this parameter ############################################################ ## invert initial parameter dictionary as vector ############################################################ ## 1) random initial parameters [NOT SO USEFUL]
############################################################ ## load initial parameters from csv file ############################################################ ''' params01_vec = [0.5]*15 def convert_param_geom_func(params01_vec): params01_dict = {} for cnt, key in enumerate(FurParam.ParamsGeom): params01_dict[key] = params01_vec[cnt] return params01_dict params01_dict = convert_param_geom_func(params01_vec) ''' params_dict = FurParam.csv2dict(initial_csv) params01_dict = FurParam.ConvertFurParams(params_dict, False) ############################################################ ## ############################################################ global count count = 0 def write_csv(kv_id1, kv_id2): global count params01_dict[kv_id1[0]] = kv_id1[1] params01_dict[kv_id2[0]] = kv_id2[1] export_path = "{0}/Space{1:04}.csv".format(folder_path, count) FurParam.dict2csv(FurParam.ConvertFurParams(params01_dict, True),
image_H = 640 ######################################## ## default setting for rendering ######################################## ## default values for 3D scene fur_desc = "MyFurDescription" material = "lambert1" ######################################## ## load parameters & render images ######################################## ## read parameters from csv files params_dict_geom = FurParam.csv2dict( os.path.join(folderPath, "_best_geom.csv")) params_dict_color = FurParam.csv2dict( os.path.join(folderPath, "_best_color.csv")) ## set fur description Fur.SetFurDescription(fur_desc, params_dict_geom) Fur.SetFurDescription(fur_desc, params_dict_color) Fur.CopyFurBaseColor2Material(fur_desc, material) ## render images renderPath = "{0}/render/render".format(folderPath) RenderSetting.SetImageSize(image_W, image_H) RenderSetting.SetExportPath(renderPath, imgFileExt) mel.eval("RenderSequence;") ########################################
cam = cmds.ls(cam_name) RenderSetting.Snapshot(cam) # activate RenderView ############################################################ ## 3) rendering routine ############################################################ ## set progress bar for abort abort = False cmds.progressWindow(isInterruptable=1, minValue=0, maxValue=len(csv_list)) for n in range(0, len(csv_list)): csv_file = csv_list[n] ## load csv file & set fur parameters params_dict = FurParam.csv2dict(csv_file) Fur.SetFurDescription(fur_desc, params_dict) Fur.CopyFurBaseColor2Material(fur_desc, material) ## extract file filePrefix = os.path.splitext(csv_file)[0] RenderSetting.SetExportPath(filePrefix, imgFileExt) ## render fur image mel.eval("RenderSequence;") ## abort the process by user interruption (ESC) cmds.progressWindow(edit=True, progress=(n + 1)) if cmds.progressWindow(query=1, isCancelled=1): abort = True break