92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import bpy, os, platform, subprocess
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TLM_Optix_Denoise:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    image_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    image_output_destination = ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    denoised_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __init__(self, optixProperties, img_array, dirpath):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.optixProperties = optixProperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.image_array = img_array
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.image_output_destination = dirpath
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.check_binary()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def check_binary(self):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        optixPath = self.optixProperties.tlm_optix_path
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if optixPath != "":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            file = optixPath
							 | 
						||
| 
								 | 
							
								            filename, file_extension = os.path.splitext(file)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if(file_extension == ".exe"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                #if file exists optixDenoise or denoise
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                #if file exists optixDenoise or denoise
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                self.optixProperties.tlm_optix_path = os.path.join(self.optixProperties.tlm_optix_path,"Denoiser.exe")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print("Please provide Optix path")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def denoise(self):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								            print("Optix: Denoising")
							 | 
						||
| 
								 | 
							
								        for image in self.image_array:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if image not in self.denoised_array:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                image_path = os.path.join(self.image_output_destination, image)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                denoise_output_destination = image_path[:-10] + "_denoised.hdr"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if platform.system() == 'Windows':
							 | 
						||
| 
								 | 
							
								                    optixPath = bpy.path.abspath(self.optixProperties.tlm_optix_path)
							 | 
						||
| 
								 | 
							
								                    pipePath = [optixPath, '-i', image_path, '-o', denoise_output_destination]
							 | 
						||
| 
								 | 
							
								                elif platform.system() == 'Darwin':
							 | 
						||
| 
								 | 
							
								                    if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                        print("Mac for Optix is still unsupported")    
							 | 
						||
| 
								 | 
							
								                else:
							 | 
						||
| 
								 | 
							
								                    if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                        print("Linux for Optix is still unsupported")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if self.optixProperties.tlm_optix_verbose:
							 | 
						||
| 
								 | 
							
								                    denoisePipe = subprocess.Popen(pipePath, shell=True)
							 | 
						||
| 
								 | 
							
								                else:
							 | 
						||
| 
								 | 
							
								                    denoisePipe = subprocess.Popen(pipePath, stdout=subprocess.PIPE, stderr=None, shell=True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                denoisePipe.communicate()[0]
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                image = bpy.data.images.load(image_path, check_existing=False)
							 | 
						||
| 
								 | 
							
								                bpy.data.images[image.name].filepath_raw = bpy.data.images[image.name].filepath_raw[:-4] + "_denoised.hdr"
							 | 
						||
| 
								 | 
							
								                bpy.data.images[image.name].reload()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def clean(self):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.denoised_array.clear()
							 | 
						||
| 
								 | 
							
								        self.image_array.clear()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for file in self.image_output_destination:
							 | 
						||
| 
								 | 
							
								                if file.endswith("_baked.hdr"):
							 | 
						||
| 
								 | 
							
								                    baked_image_array.append(file)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #self.image_output_destination
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #Clean temporary files here..
							 | 
						||
| 
								 | 
							
								        #...pfm
							 | 
						||
| 
								 | 
							
								        #...denoised.hdr
							 |