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 |