1362 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			1362 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import bpy, os, subprocess, sys, platform, aud, json, datetime, socket
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from . import encoding, pack, log
							 | 
						||
| 
								 | 
							
								from . cycles import lightmap, prepare, nodes, cache
							 | 
						||
| 
								 | 
							
								from . luxcore import setup
							 | 
						||
| 
								 | 
							
								from . octane import configure, lightmap2
							 | 
						||
| 
								 | 
							
								from . denoiser import integrated, oidn, optix
							 | 
						||
| 
								 | 
							
								from . filtering import opencv
							 | 
						||
| 
								 | 
							
								from . gui import Viewport
							 | 
						||
| 
								 | 
							
								from .. network import client
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from os import listdir
							 | 
						||
| 
								 | 
							
								from os.path import isfile, join
							 | 
						||
| 
								 | 
							
								from time import time, sleep
							 | 
						||
| 
								 | 
							
								from importlib import util
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								previous_settings = {}
							 | 
						||
| 
								 | 
							
								postprocess_shutdown = False
							 | 
						||
| 
								 | 
							
								logging = True
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def prepare_build(self=0, background_mode=False, shutdown_after_build=False):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    global tlm_log
							 | 
						||
| 
								 | 
							
								    tlm_log = log.TLM_Logman()
							 | 
						||
| 
								 | 
							
								    bpy.app.driver_namespace["logman"] = tlm_log
							 | 
						||
| 
								 | 
							
								    tlm_log.append("Preparing build")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if shutdown_after_build:
							 | 
						||
| 
								 | 
							
								        postprocess_shutdown = True
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    print("Building lightmaps")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if bpy.context.scene.TLM_EngineProperties.tlm_lighting_mode == "combinedao": 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if not "tlm_plus_mode" in bpy.app.driver_namespace or bpy.app.driver_namespace["tlm_plus_mode"] == 0:
							 | 
						||
| 
								 | 
							
								            filepath = bpy.data.filepath
							 | 
						||
| 
								 | 
							
								            dirpath = os.path.join(os.path.dirname(bpy.data.filepath), scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								            if os.path.isdir(dirpath):
							 | 
						||
| 
								 | 
							
								                for file in os.listdir(dirpath):
							 | 
						||
| 
								 | 
							
								                    os.remove(os.path.join(dirpath + "/" + file))
							 | 
						||
| 
								 | 
							
								            bpy.app.driver_namespace["tlm_plus_mode"] = 1
							 | 
						||
| 
								 | 
							
								            print("Plus Mode")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if bpy.context.scene.TLM_EngineProperties.tlm_lighting_mode == "indirectao": 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if not "tlm_plus_mode" in bpy.app.driver_namespace or bpy.app.driver_namespace["tlm_plus_mode"] == 0:
							 | 
						||
| 
								 | 
							
								            filepath = bpy.data.filepath
							 | 
						||
| 
								 | 
							
								            dirpath = os.path.join(os.path.dirname(bpy.data.filepath), scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								            if os.path.isdir(dirpath):
							 | 
						||
| 
								 | 
							
								                for file in os.listdir(dirpath):
							 | 
						||
| 
								 | 
							
								                    os.remove(os.path.join(dirpath + "/" + file))
							 | 
						||
| 
								 | 
							
								            bpy.app.driver_namespace["tlm_plus_mode"] = 1
							 | 
						||
| 
								 | 
							
								            print("Plus Mode")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if bpy.context.scene.TLM_EngineProperties.tlm_bake_mode == "Foreground" or background_mode==True:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        global start_time
							 | 
						||
| 
								 | 
							
								        start_time = time()
							 | 
						||
| 
								 | 
							
								        bpy.app.driver_namespace["tlm_start_time"] = time()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								        sceneProperties = scene.TLM_SceneProperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if not background_mode and bpy.context.scene.TLM_EngineProperties.tlm_lighting_mode != "combinedao" and bpy.context.scene.TLM_EngineProperties.tlm_lighting_mode != "indirectao":
							 | 
						||
| 
								 | 
							
								            #pass
							 | 
						||
| 
								 | 
							
								            setGui(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if check_save():
							 | 
						||
| 
								 | 
							
								            print("Please save your file first")
							 | 
						||
| 
								 | 
							
								            self.report({'INFO'}, "Please save your file first")
							 | 
						||
| 
								 | 
							
								            setGui(0)
							 | 
						||
| 
								 | 
							
								            return{'FINISHED'}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if check_denoiser():
							 | 
						||
| 
								 | 
							
								            print("No denoise OIDN path assigned")
							 | 
						||
| 
								 | 
							
								            self.report({'INFO'}, "No denoise OIDN path assigned. Check that it points to the correct executable.")
							 | 
						||
| 
								 | 
							
								            setGui(0)
							 | 
						||
| 
								 | 
							
								            return{'FINISHED'}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if check_materials():
							 | 
						||
| 
								 | 
							
								            print("Error with material")
							 | 
						||
| 
								 | 
							
								            self.report({'INFO'}, "Error with material")
							 | 
						||
| 
								 | 
							
								            setGui(0)
							 | 
						||
| 
								 | 
							
								            return{'FINISHED'}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if opencv_check():
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								                print("Error:Filtering - OpenCV not installed")
							 | 
						||
| 
								 | 
							
								                self.report({'INFO'}, "Error:Filtering - OpenCV not installed")
							 | 
						||
| 
								 | 
							
								                setGui(0)
							 | 
						||
| 
								 | 
							
								                return{'FINISHED'}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        setMode()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        dirpath = os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								        if not os.path.isdir(dirpath):
							 | 
						||
| 
								 | 
							
								            os.mkdir(dirpath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #Naming check
							 | 
						||
| 
								 | 
							
								        naming_check()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_lightmap_engine == "Cycles":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            prepare.init(self, previous_settings)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_lightmap_engine == "LuxCoreRender":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            setup.init(self, previous_settings)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_lightmap_engine == "OctaneRender":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            configure.init(self, previous_settings)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        begin_build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        print("Baking in background")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        filepath = bpy.data.filepath
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        bpy.ops.wm.save_as_mainfile(filepath=bpy.data.filepath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        start_time = time()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								        sceneProperties = scene.TLM_SceneProperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #Timer start here bound to global
							 | 
						||
| 
								 | 
							
								        if check_save():
							 | 
						||
| 
								 | 
							
								            print("Please save your file first")
							 | 
						||
| 
								 | 
							
								            self.report({'INFO'}, "Please save your file first")
							 | 
						||
| 
								 | 
							
								            return{'FINISHED'}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if check_denoiser():
							 | 
						||
| 
								 | 
							
								            print("No denoise OIDN path assigned")
							 | 
						||
| 
								 | 
							
								            self.report({'INFO'}, "No denoise OIDN path assigned")
							 | 
						||
| 
								 | 
							
								            return{'FINISHED'}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if check_materials():
							 | 
						||
| 
								 | 
							
								            print("Error with material")
							 | 
						||
| 
								 | 
							
								            self.report({'INFO'}, "Error with material")
							 | 
						||
| 
								 | 
							
								            return{'FINISHED'}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if opencv_check():
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								                print("Error:Filtering - OpenCV not installed")
							 | 
						||
| 
								 | 
							
								                self.report({'INFO'}, "Error:Filtering - OpenCV not installed")
							 | 
						||
| 
								 | 
							
								                return{'FINISHED'}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        dirpath = os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								        if not os.path.isdir(dirpath):
							 | 
						||
| 
								 | 
							
								            os.mkdir(dirpath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #Naming check
							 | 
						||
| 
								 | 
							
								        naming_check()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if scene.TLM_SceneProperties.tlm_network_render:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            print("NETWORK RENDERING")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if scene.TLM_SceneProperties.tlm_network_paths != None:
							 | 
						||
| 
								 | 
							
								                HOST = bpy.data.texts[scene.TLM_SceneProperties.tlm_network_paths.name].lines[0].body  # The server's hostname or IP address
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                HOST = '127.0.0.1'  # The server's hostname or IP address
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            PORT = 9898        # The port used by the server
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            client.connect_client(HOST, PORT, bpy.data.filepath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            finish_assemble()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            print("Background driver process")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            bpy.app.driver_namespace["alpha"] = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            bpy.app.driver_namespace["tlm_process"] = False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if os.path.exists(os.path.join(dirpath, "process.tlm")):
							 | 
						||
| 
								 | 
							
								                os.remove(os.path.join(dirpath, "process.tlm"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            bpy.app.timers.register(distribute_building)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def distribute_building():
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    print("Distributing lightmap building")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #CHECK IF THERE'S AN EXISTING SUBPROCESS 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if not os.path.isfile(os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir, "process.tlm")):
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								            print("No process file - Creating one...")
							 | 
						||
| 
								 | 
							
								            tlm_log.append("No process file - Creating one...")
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        write_directory = os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        blendPath = bpy.data.filepath
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        process_status = [blendPath, 
							 | 
						||
| 
								 | 
							
								                    {'bake': 'all', 
							 | 
						||
| 
								 | 
							
								                    'completed': False
							 | 
						||
| 
								 | 
							
								                    }]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        with open(os.path.join(write_directory, "process.tlm"), 'w') as file:
							 | 
						||
| 
								 | 
							
								            json.dump(process_status, file, indent=2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (2, 91, 0) > bpy.app.version:
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                bpy.app.driver_namespace["tlm_process"] = subprocess.Popen([sys.executable,"-b", blendPath,"--python-expr",'import bpy; import thelightmapper; thelightmapper.addon.utility.build.prepare_build(0, True);'], shell=False, stdout=subprocess.PIPE)
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                bpy.app.driver_namespace["tlm_process"] = subprocess.Popen([sys.executable,"-b", blendPath,"--python-expr",'import bpy; import thelightmapper; thelightmapper.addon.utility.build.prepare_build(0, True);'], shell=False, stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                bpy.app.driver_namespace["tlm_process"] = subprocess.Popen([bpy.app.binary_path,"-b", blendPath,"--python-expr",'import bpy; import thelightmapper; thelightmapper.addon.utility.build.prepare_build(0, True);'], shell=False, stdout=subprocess.PIPE)
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                bpy.app.driver_namespace["tlm_process"] = subprocess.Popen([bpy.app.binary_path,"-b", blendPath,"--python-expr",'import bpy; import thelightmapper; thelightmapper.addon.utility.build.prepare_build(0, True);'], shell=False, stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)
							 | 
						||
| 
								 | 
							
								        tlm_log.append("Started process: " + str(bpy.app.driver_namespace["tlm_process"]) + " at " + str(datetime.datetime.now()))
							 | 
						||
| 
								 | 
							
								        if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								            print("Started process: " + str(bpy.app.driver_namespace["tlm_process"]) + " at " + str(datetime.datetime.now()))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        write_directory = os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        process_status = json.loads(open(os.path.join(write_directory, "process.tlm")).read())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if process_status[1]["completed"]:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            tlm_log.append("Baking finished from process. Status: Completed.")
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print("Baking finished")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            bpy.app.timers.unregister(distribute_building)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            finish_assemble()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            #Open the json and check the status!
							 | 
						||
| 
								 | 
							
								            tlm_log.append("Process check: Baking in progress.")
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print("Baking in progress")
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            process_status = json.loads(open(os.path.join(write_directory, "process.tlm")).read())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            tlm_log.append(process_status)
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print(process_status)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return 1.0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def finish_assemble(self=0, background_pass=0, load_atlas=0):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    print("Finishing assembly")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    tlm_log = log.TLM_Logman()
							 | 
						||
| 
								 | 
							
								    tlm_log.append("Preparing build")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if load_atlas:
							 | 
						||
| 
								 | 
							
								        print("Assembly in Atlas load mode")
							 | 
						||
| 
								 | 
							
								        tlm_log.append("Assembly in Atlas load mode")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    tlm_log.append("Background baking finished")
							 | 
						||
| 
								 | 
							
								    if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								        print("Background baking finished")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								    sceneProperties = scene.TLM_SceneProperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_lightmap_engine == "Cycles":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        prepare.init(self, previous_settings)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_lightmap_engine == "LuxCoreRender":
							 | 
						||
| 
								 | 
							
								        pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_lightmap_engine == "OctaneRender":
							 | 
						||
| 
								 | 
							
								        pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if not 'start_time' in globals():
							 | 
						||
| 
								 | 
							
								        global start_time
							 | 
						||
| 
								 | 
							
								        start_time = time()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if background_pass:
							 | 
						||
| 
								 | 
							
								        manage_build(True, load_atlas)
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        manage_build(False, load_atlas)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def begin_build():
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    print("Beginning build")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    dirpath = os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								    sceneProperties = scene.TLM_SceneProperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_lightmap_engine == "Cycles":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        lightmap.bake()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # try:
							 | 
						||
| 
								 | 
							
								        #     lightmap.bake()
							 | 
						||
| 
								 | 
							
								        # except Exception as e:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #     print("An error occured during lightmap baking. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								        #     print(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #     tlm_log.append("An error occured during lightmap baking. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								        #     tlm_log.append(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #     if not bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								        #         print("Turn on verbose mode to get more detail.")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_lightmap_engine == "LuxCoreRender":
							 | 
						||
| 
								 | 
							
								        pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_lightmap_engine == "OctaneRender":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        lightmap2.bake()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #Denoiser
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_denoise_engine == "Integrated":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            baked_image_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                if file.endswith("_baked.hdr"):
							 | 
						||
| 
								 | 
							
								                    baked_image_array.append(file)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            tlm_log.append(baked_image_array)
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print(baked_image_array)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser = integrated.TLM_Integrated_Denoise()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser.load(baked_image_array)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser.setOutputDir(dirpath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser.denoise()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        elif sceneProperties.tlm_denoise_engine == "OIDN":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            baked_image_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                if file.endswith("_baked.hdr"):
							 | 
						||
| 
								 | 
							
								                    baked_image_array.append(file)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            oidnProperties = scene.TLM_OIDNEngineProperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser = oidn.TLM_OIDN_Denoise(oidnProperties, baked_image_array, dirpath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            try:
							 | 
						||
| 
								 | 
							
								                denoiser.denoise()
							 | 
						||
| 
								 | 
							
								            except Exception as e:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                print("An error occured during denoising. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								                print(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                tlm_log.append("An error occured during denoising. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								                tlm_log.append(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if not bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                    print("Turn on verbose mode to get more detail.")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser.clean()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            del denoiser
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            baked_image_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                if file.endswith("_baked.hdr"):
							 | 
						||
| 
								 | 
							
								                    baked_image_array.append(file)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            optixProperties = scene.TLM_OptixEngineProperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser = optix.TLM_Optix_Denoise(optixProperties, baked_image_array, dirpath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser.denoise()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            denoiser.clean()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            del denoiser
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #Filtering
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								            useDenoise = True
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            useDenoise = False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        filter = opencv.TLM_CV_Filtering
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try:
							 | 
						||
| 
								 | 
							
								            filter.init(dirpath, useDenoise)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        except Exception as e:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            print("An error occured during filtering. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								            print(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            tlm_log.append("An error occured during filtering. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								            tlm_log.append(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if not bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print("Turn on verbose mode to get more detail.")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #Encoding
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_encoding_use and scene.TLM_EngineProperties.tlm_bake_mode != "Background":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_encoding_device == "CPU":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_a == "HDR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_format == "EXR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    tlm_log.append("EXR Format")
							 | 
						||
| 
								 | 
							
								                    if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								                        print("EXR Format")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    ren = bpy.context.scene.render
							 | 
						||
| 
								 | 
							
								                    ren.image_settings.file_format = "OPEN_EXR"
							 | 
						||
| 
								 | 
							
								                    #ren.image_settings.exr_codec = "scene.TLM_SceneProperties.tlm_exr_codec"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    baked_image_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        end = "_filtered"
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    #For each image in folder ending in denoised/filtered
							 | 
						||
| 
								 | 
							
								                    dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                        if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                            img = bpy.data.images.load(os.path.join(dirpath,file))
							 | 
						||
| 
								 | 
							
								                            img.save_render(img.filepath_raw[:-4] + ".exr")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_a == "RGBM":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                tlm_log.append("ENCODING RGBM")
							 | 
						||
| 
								 | 
							
								                if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    print("ENCODING RGBM")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_filtered"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        img = bpy.data.images.load(os.path.join(dirpath, file), check_existing=False)
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								                        tlm_log.append("Encoding:" + str(file))
							 | 
						||
| 
								 | 
							
								                        if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                            print("Encoding:" + str(file))
							 | 
						||
| 
								 | 
							
								                        encoding.encodeImageRGBMCPU(img, sceneProperties.tlm_encoding_range, dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_a == "RGBD":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                tlm_log.append("ENCODING RGBD")
							 | 
						||
| 
								 | 
							
								                if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    print("ENCODING RGBD")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_filtered"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        img = bpy.data.images.load(os.path.join(dirpath, file), check_existing=False)
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								                        if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                            tlm_log.append("Encoding:" + str(file))
							 | 
						||
| 
								 | 
							
								                            print("Encoding:" + str(file))
							 | 
						||
| 
								 | 
							
								                        encoding.encodeImageRGBDCPU(img, sceneProperties.tlm_encoding_range, dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_a == "SDR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                tlm_log.append("EXR Format")
							 | 
						||
| 
								 | 
							
								                if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    print("EXR Format")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                ren = bpy.context.scene.render
							 | 
						||
| 
								 | 
							
								                ren.image_settings.file_format = "PNG"
							 | 
						||
| 
								 | 
							
								                #ren.image_settings.exr_codec = "scene.TLM_SceneProperties.tlm_exr_codec"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                baked_image_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_filtered"
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                #For each image in folder ending in denoised/filtered
							 | 
						||
| 
								 | 
							
								                dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        img = bpy.data.images.load(os.path.join(dirpath,file))
							 | 
						||
| 
								 | 
							
								                        img.save_render(img.filepath_raw[:-4] + ".png")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_b == "HDR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_format == "EXR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    tlm_log.append("EXR Format")
							 | 
						||
| 
								 | 
							
								                    if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								                        print("EXR Format")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    ren = bpy.context.scene.render
							 | 
						||
| 
								 | 
							
								                    ren.image_settings.file_format = "OPEN_EXR"
							 | 
						||
| 
								 | 
							
								                    #ren.image_settings.exr_codec = "scene.TLM_SceneProperties.tlm_exr_codec"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    baked_image_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        end = "_filtered"
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    #For each image in folder ending in denoised/filtered
							 | 
						||
| 
								 | 
							
								                    dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                        if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                            img = bpy.data.images.load(os.path.join(dirpath,file))
							 | 
						||
| 
								 | 
							
								                            img.save_render(img.filepath_raw[:-4] + ".exr")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_b == "LogLuv":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_filtered"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                #CHECK FOR ATLAS MAPS!
							 | 
						||
| 
								 | 
							
								                for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        img = bpy.data.images.load(os.path.join(dirpath, file), check_existing=False)
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								                        encoding.encodeLogLuvGPU(img, dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        if sceneProperties.tlm_split_premultiplied:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                            image_name = img.name
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                            if image_name[-4:] == '.exr' or image_name[-4:] == '.hdr':
							 | 
						||
| 
								 | 
							
								                                image_name = image_name[:-4]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                            image_name = image_name + '_encoded.png'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                            print("SPLIT PREMULTIPLIED: " + image_name)
							 | 
						||
| 
								 | 
							
								                            encoding.splitLogLuvAlpha(os.path.join(dirpath, image_name), dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_b == "RGBM":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                tlm_log.append("ENCODING RGBM")
							 | 
						||
| 
								 | 
							
								                if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    print("ENCODING RGBM")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_filtered"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        img = bpy.data.images.load(os.path.join(dirpath, file), check_existing=False)
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								                        if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                            print("Encoding:" + str(file))
							 | 
						||
| 
								 | 
							
								                        encoding.encodeImageRGBMGPU(img, sceneProperties.tlm_encoding_range, dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_b == "RGBD":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                    print("ENCODING RGBD")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_filtered"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        img = bpy.data.images.load(os.path.join(dirpath, file), check_existing=False)
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								                        if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                            print("Encoding:" + str(file))
							 | 
						||
| 
								 | 
							
								                        encoding.encodeImageRGBDGPU(img, sceneProperties.tlm_encoding_range, dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_mode_b == "PNG":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                ren = bpy.context.scene.render
							 | 
						||
| 
								 | 
							
								                ren.image_settings.file_format = "PNG"
							 | 
						||
| 
								 | 
							
								                #ren.image_settings.exr_codec = "scene.TLM_SceneProperties.tlm_exr_codec"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                baked_image_array = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    end = "_filtered"
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                #For each image in folder ending in denoised/filtered
							 | 
						||
| 
								 | 
							
								                dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        img = bpy.data.images.load(os.path.join(dirpath,file))
							 | 
						||
| 
								 | 
							
								                        img.save_render(img.filepath_raw[:-4] + ".png")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    manage_build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def manage_build(background_pass=False, load_atlas=0):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    print("Managing build")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if load_atlas:
							 | 
						||
| 
								 | 
							
								        print("Managing in load atlas mode")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								    sceneProperties = scene.TLM_SceneProperties
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if sceneProperties.tlm_lightmap_engine == "Cycles":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if background_pass:
							 | 
						||
| 
								 | 
							
								            print("In background pass")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            try:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                nodes.apply_lightmaps()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            except Exception as e:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                print("An error occured during lightmap application. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								                print(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                tlm_log.append("An error occured during lightmap application. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								                tlm_log.append(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if not bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                    print("Turn on verbose mode to get more detail.")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try:
							 | 
						||
| 
								 | 
							
								            nodes.apply_materials(load_atlas) #From here the name is changed...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        except Exception as e:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            print("An error occured during material application. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								            print(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            tlm_log.append("An error occured during material application. See the line below for more detail:")
							 | 
						||
| 
								 | 
							
								            tlm_log.append(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if not bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print("Turn on verbose mode to get more detail.")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        end = "_baked"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            end = "_denoised"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_filtering_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            end = "_filtered"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        formatEnc = ".hdr"
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        if sceneProperties.tlm_encoding_use and scene.TLM_EngineProperties.tlm_bake_mode != "Background":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_encoding_device == "CPU":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                print("CPU Encoding")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_a == "HDR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if sceneProperties.tlm_format == "EXR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        formatEnc = ".exr"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_a == "RGBM":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    formatEnc = "_encoded.png"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_a == "RGBD":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    formatEnc = "_encoded.png"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_a == "SDR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    formatEnc = ".png"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                print("GPU Encoding")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_b == "HDR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if sceneProperties.tlm_format == "EXR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        formatEnc = ".exr"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_b == "LogLuv":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    formatEnc = "_encoded.png"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_b == "RGBM":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    formatEnc = "_encoded.png"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_b == "RGBD":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    formatEnc = "_encoded.png"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if sceneProperties.tlm_encoding_mode_b == "SDR":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    formatEnc = ".png"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if not background_pass:
							 | 
						||
| 
								 | 
							
								            nodes.exchangeLightmapsToPostfix("_baked", end, formatEnc)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if scene.TLM_EngineProperties.tlm_setting_supersample == "2x":
							 | 
						||
| 
								 | 
							
								            supersampling_scale = 2
							 | 
						||
| 
								 | 
							
								        elif scene.TLM_EngineProperties.tlm_setting_supersample == "4x":
							 | 
						||
| 
								 | 
							
								            supersampling_scale = 4
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            supersampling_scale = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        pack.postpack()
							 | 
						||
| 
								 | 
							
								        #We need to also make sure out postpacked atlases gets split w. premultiplied
							 | 
						||
| 
								 | 
							
								        #CHECK FOR ATLAS MAPS!
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if bpy.context.scene.TLM_SceneProperties.tlm_split_premultiplied:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            dirpath = os.path.join(os.path.dirname(bpy.data.filepath), scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								            dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for atlas in bpy.context.scene.TLM_PostAtlasList:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    if file.startswith(atlas.name):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        print("TODO: SPLIT LOGLUV FOR: " + str(file))
							 | 
						||
| 
								 | 
							
								                        encoding.splitLogLuvAlpha(os.path.join(dirpath, file), dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            #Need to update file list for some reason?
							 | 
						||
| 
								 | 
							
								            dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for atlas in bpy.context.scene.TLM_PostAtlasList:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                #FIND SOME WAY TO FIND THE RIGTH FILE! TOO TIRED NOW!
							 | 
						||
| 
								 | 
							
								                for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								                    if obj.TLM_ObjectProperties.tlm_postpack_object:
							 | 
						||
| 
								 | 
							
								                        if obj.TLM_ObjectProperties.tlm_postatlas_pointer == atlas.name:
							 | 
						||
| 
								 | 
							
								                            for slot in obj.material_slots:
							 | 
						||
| 
								 | 
							
								                            
							 | 
						||
| 
								 | 
							
								                                mat = slot.material
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                node_tree = mat.node_tree
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                foundBakedNode = False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                #for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                                #    if file.startswith(atlas.name):
							 | 
						||
| 
								 | 
							
								                                #        if file.endswith("XYZ"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                #Find nodes
							 | 
						||
| 
								 | 
							
								                                for node in node_tree.nodes:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                    if node.name == "TLM_Lightmap":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                        print("Found the main lightmap node: LOGLUV")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                        for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                                            if file.startswith(atlas.name) and file.endswith("XYZ.png"):
							 | 
						||
| 
								 | 
							
								                                                print("Found an atlas file: " + str(file))
							 | 
						||
| 
								 | 
							
								                                                node.image.filepath_raw = os.path.join(dirpath, file)
							 | 
						||
| 
								 | 
							
								                                                print("CHANGED LIGHTMAP MAIN INTO XYZ: " + str(file))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                    if node.name == "TLM_Lightmap_Extra":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                        print("Found the main lightmap node: LOGLUV")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                        for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                                            if file.startswith(atlas.name) and file.endswith("W.png"):
							 | 
						||
| 
								 | 
							
								                                                print("Found an atlas file: " + str(file))
							 | 
						||
| 
								 | 
							
								                                                node.image.filepath_raw = os.path.join(dirpath, file)
							 | 
						||
| 
								 | 
							
								                                                print("CHANGED LIGHTMAP MAIN INTO W: " + str(file))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                        #print("Found the extra lightmap node: LOGLUV")
							 | 
						||
| 
								 | 
							
								                                        # if node.image.filepath_raw.startswith(atlas.name):
							 | 
						||
| 
								 | 
							
								                                        #     if node.image.filepath_raw.endswith("W.png"):
							 | 
						||
| 
								 | 
							
								                                        #         print("ALREADY W: " + str(node.image.filepath_raw))
							 | 
						||
| 
								 | 
							
								                                        
							 | 
						||
| 
								 | 
							
								                                        # else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                        #     for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                                        #         if file.startswith(atlas.name):
							 | 
						||
| 
								 | 
							
								                                        #             if file.endswith("W.png"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                        #                 node.image.filepath_raw = os.path.join(dirpath, file)
							 | 
						||
| 
								 | 
							
								                                        #                 print("CHANGED LIGHTMAP MAIN INTO W: " + str(file))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            #for file in dirfiles:
							 | 
						||
| 
								 | 
							
								            #    if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            #for atlas in bpy.context.scene.TLM_PostAtlasList:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                #print("TODO: SPLIT LOGLUV FOR: " + str(atlas.name) + "..file?")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #CHECK FOR ATLAS MAPS!
							 | 
						||
| 
								 | 
							
								                #dirfiles = [f for f in listdir(dirpath) if isfile(join(dirpath, f))]
							 | 
						||
| 
								 | 
							
								                    # for file in dirfiles:
							 | 
						||
| 
								 | 
							
								                    #     if file.endswith(end + ".hdr"):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #         img = bpy.data.images.load(os.path.join(dirpath, file), check_existing=False)
							 | 
						||
| 
								 | 
							
								                            
							 | 
						||
| 
								 | 
							
								                    #         encoding.encodeLogLuvGPU(img, dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #         if sceneProperties.tlm_split_premultiplied:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #             image_name = img.name
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #             if image_name[-4:] == '.exr' or image_name[-4:] == '.hdr':
							 | 
						||
| 
								 | 
							
								                    #                 image_name = image_name[:-4]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #             image_name = image_name + '_encoded.png'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #             print("SPLIT PREMULTIPLIED: " + image_name)
							 | 
						||
| 
								 | 
							
								                    #             encoding.splitLogLuvAlpha(os.path.join(dirpath, image_name), dirpath, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for image in bpy.data.images:
							 | 
						||
| 
								 | 
							
								            if image.users < 1:
							 | 
						||
| 
								 | 
							
								                bpy.data.images.remove(image)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if scene.TLM_SceneProperties.tlm_headless:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            filepath = bpy.data.filepath
							 | 
						||
| 
								 | 
							
								            dirpath = os.path.join(os.path.dirname(bpy.data.filepath), scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								                if obj.type == 'MESH' and obj.name in bpy.context.view_layer.objects:
							 | 
						||
| 
								 | 
							
								                    if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use:
							 | 
						||
| 
								 | 
							
								                        cache.backup_material_restore(obj)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								                if obj.type == 'MESH' and obj.name in bpy.context.view_layer.objects:
							 | 
						||
| 
								 | 
							
								                    if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use:
							 | 
						||
| 
								 | 
							
								                        cache.backup_material_rename(obj)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for mat in bpy.data.materials:
							 | 
						||
| 
								 | 
							
								                if mat.users < 1:
							 | 
						||
| 
								 | 
							
								                    bpy.data.materials.remove(mat)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for mat in bpy.data.materials:
							 | 
						||
| 
								 | 
							
								                if mat.name.startswith("."):
							 | 
						||
| 
								 | 
							
								                    if "_Original" in mat.name:
							 | 
						||
| 
								 | 
							
								                        bpy.data.materials.remove(mat)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								                if obj.type == 'MESH' and obj.name in bpy.context.view_layer.objects:
							 | 
						||
| 
								 | 
							
								                    if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        if obj.TLM_ObjectProperties.tlm_mesh_lightmap_unwrap_mode == "AtlasGroupA":
							 | 
						||
| 
								 | 
							
								                            atlasName = obj.TLM_ObjectProperties.tlm_atlas_pointer
							 | 
						||
| 
								 | 
							
								                            img_name = atlasName + '_baked'
							 | 
						||
| 
								 | 
							
								                            Lightmapimage = bpy.data.images[img_name]
							 | 
						||
| 
								 | 
							
								                            obj["Lightmap"] = Lightmapimage.filepath_raw
							 | 
						||
| 
								 | 
							
								                        elif obj.TLM_ObjectProperties.tlm_postpack_object:
							 | 
						||
| 
								 | 
							
								                            atlasName = obj.TLM_ObjectProperties.tlm_postatlas_pointer
							 | 
						||
| 
								 | 
							
								                            img_name = atlasName + '_baked' + ".hdr"
							 | 
						||
| 
								 | 
							
								                            Lightmapimage = bpy.data.images[img_name]
							 | 
						||
| 
								 | 
							
								                            obj["Lightmap"] = Lightmapimage.filepath_raw
							 | 
						||
| 
								 | 
							
								                        else:
							 | 
						||
| 
								 | 
							
								                            img_name = obj.name + '_baked'
							 | 
						||
| 
								 | 
							
								                            Lightmapimage = bpy.data.images[img_name]
							 | 
						||
| 
								 | 
							
								                            obj["Lightmap"] = Lightmapimage.filepath_raw
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for image in bpy.data.images:
							 | 
						||
| 
								 | 
							
								                if image.name.endswith("_baked"):
							 | 
						||
| 
								 | 
							
								                    bpy.data.images.remove(image, do_unlink=True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if "tlm_plus_mode" in bpy.app.driver_namespace: #First DIR pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if bpy.app.driver_namespace["tlm_plus_mode"] == 1: #First DIR pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                filepath = bpy.data.filepath
							 | 
						||
| 
								 | 
							
								                dirpath = os.path.join(os.path.dirname(bpy.data.filepath), scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								                    if obj.type == 'MESH' and obj.name in bpy.context.view_layer.objects:
							 | 
						||
| 
								 | 
							
								                        if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use:
							 | 
						||
| 
								 | 
							
								                            cache.backup_material_restore(obj)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								                    if obj.type == 'MESH' and obj.name in bpy.context.view_layer.objects:
							 | 
						||
| 
								 | 
							
								                        if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use:
							 | 
						||
| 
								 | 
							
								                            cache.backup_material_rename(obj)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for mat in bpy.data.materials:
							 | 
						||
| 
								 | 
							
								                    if mat.users < 1:
							 | 
						||
| 
								 | 
							
								                        bpy.data.materials.remove(mat)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for mat in bpy.data.materials:
							 | 
						||
| 
								 | 
							
								                    if mat.name.startswith("."):
							 | 
						||
| 
								 | 
							
								                        if "_Original" in mat.name:
							 | 
						||
| 
								 | 
							
								                            bpy.data.materials.remove(mat)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for image in bpy.data.images:
							 | 
						||
| 
								 | 
							
								                    if image.name.endswith("_baked"):
							 | 
						||
| 
								 | 
							
								                        bpy.data.images.remove(image, do_unlink=True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                dirpath = os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                files = os.listdir(dirpath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for index, file in enumerate(files):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    filename = extension = os.path.splitext(file)[0]
							 | 
						||
| 
								 | 
							
								                    extension = os.path.splitext(file)[1]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    os.rename(os.path.join(dirpath, file), os.path.join(dirpath, filename + "_dir" + extension))
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                print("First DIR pass complete")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                bpy.app.driver_namespace["tlm_plus_mode"] = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                prepare_build(self=0, background_mode=False, shutdown_after_build=False)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if not background_pass and bpy.context.scene.TLM_EngineProperties.tlm_lighting_mode != "combinedao":
							 | 
						||
| 
								 | 
							
								                    #pass
							 | 
						||
| 
								 | 
							
								                    setGui(0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            elif bpy.app.driver_namespace["tlm_plus_mode"] == 2:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                filepath = bpy.data.filepath
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                dirpath = os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                files = os.listdir(dirpath)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                for index, file in enumerate(files):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    filename = os.path.splitext(file)[0]
							 | 
						||
| 
								 | 
							
								                    extension = os.path.splitext(file)[1]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if not filename.endswith("_dir"):
							 | 
						||
| 
								 | 
							
								                        os.rename(os.path.join(dirpath, file), os.path.join(dirpath, filename + "_ao" + extension))
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								                print("Second AO pass complete")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                total_time = sec_to_hours((time() - start_time))
							 | 
						||
| 
								 | 
							
								                tlm_log.append(total_time)
							 | 
						||
| 
								 | 
							
								                if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								                    print(total_time)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                bpy.context.scene["TLM_Buildstat"] = total_time
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                reset_settings(previous_settings["settings"])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                bpy.app.driver_namespace["tlm_plus_mode"] = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if not background_pass:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #TODO CHANGE!
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    nodes.exchangeLightmapsToPostfix(end, end + "_dir", formatEnc)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    nodes.applyAOPass()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            total_time = sec_to_hours((time() - start_time))
							 | 
						||
| 
								 | 
							
								            tlm_log.append(total_time)
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print(total_time)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            bpy.context.scene["TLM_Buildstat"] = total_time
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            reset_settings(previous_settings["settings"])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            tlm_log.append("Lightmap building finished")
							 | 
						||
| 
								 | 
							
								            tlm_log.append("--------------------------")
							 | 
						||
| 
								 | 
							
								            print("Lightmap building finished")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_lightmap_engine == "LuxCoreRender":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if sceneProperties.tlm_lightmap_engine == "OctaneRender":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_EngineProperties.tlm_bake_mode == "Background":
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if not background_pass and scene.TLM_EngineProperties.tlm_bake_mode != "Background" and bpy.context.scene.TLM_EngineProperties.tlm_lighting_mode != "combinedao":
							 | 
						||
| 
								 | 
							
								                #pass
							 | 
						||
| 
								 | 
							
								                setGui(0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if scene.TLM_SceneProperties.tlm_alert_on_finish:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            alertSelect = scene.TLM_SceneProperties.tlm_alert_sound
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if alertSelect == "dash":
							 | 
						||
| 
								 | 
							
								                soundfile = "dash.ogg"
							 | 
						||
| 
								 | 
							
								            elif alertSelect == "pingping":
							 | 
						||
| 
								 | 
							
								                soundfile = "pingping.ogg"  
							 | 
						||
| 
								 | 
							
								            elif alertSelect == "gentle":
							 | 
						||
| 
								 | 
							
								                soundfile = "gentle.ogg"
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                soundfile = "noot.ogg"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            scriptDir = os.path.dirname(os.path.realpath(__file__))
							 | 
						||
| 
								 | 
							
								            sound_path = os.path.abspath(os.path.join(scriptDir, '..', 'assets/'+soundfile))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            device = aud.Device()
							 | 
						||
| 
								 | 
							
								            sound = aud.Sound.file(sound_path)
							 | 
						||
| 
								 | 
							
								            device.play(sound)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if logging:
							 | 
						||
| 
								 | 
							
								            print("Log file output:")
							 | 
						||
| 
								 | 
							
								            tlm_log.dumpLog()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if bpy.app.background:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                print("Writing background process report")
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            write_directory = os.path.join(os.path.dirname(bpy.data.filepath), bpy.context.scene.TLM_EngineProperties.tlm_lightmap_savedir)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if os.path.exists(os.path.join(write_directory, "process.tlm")):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                process_status = json.loads(open(os.path.join(write_directory, "process.tlm")).read())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                process_status[1]["completed"] = True
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                with open(os.path.join(write_directory, "process.tlm"), 'w') as file:
							 | 
						||
| 
								 | 
							
								                    json.dump(process_status, file, indent=2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if postprocess_shutdown:
							 | 
						||
| 
								 | 
							
								                sys.exit()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#TODO - SET BELOW TO UTILITY
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def reset_settings(prev_settings):
							 | 
						||
| 
								 | 
							
								    scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								    cycles = scene.cycles
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cycles.samples = int(prev_settings[0])
							 | 
						||
| 
								 | 
							
								    cycles.max_bounces = int(prev_settings[1])
							 | 
						||
| 
								 | 
							
								    cycles.diffuse_bounces = int(prev_settings[2])
							 | 
						||
| 
								 | 
							
								    cycles.glossy_bounces = int(prev_settings[3])
							 | 
						||
| 
								 | 
							
								    cycles.transparent_max_bounces = int(prev_settings[4])
							 | 
						||
| 
								 | 
							
								    cycles.transmission_bounces = int(prev_settings[5])
							 | 
						||
| 
								 | 
							
								    cycles.volume_bounces = int(prev_settings[6])
							 | 
						||
| 
								 | 
							
								    cycles.caustics_reflective = prev_settings[7]
							 | 
						||
| 
								 | 
							
								    cycles.caustics_refractive = prev_settings[8]
							 | 
						||
| 
								 | 
							
								    cycles.device = prev_settings[9]
							 | 
						||
| 
								 | 
							
								    scene.render.engine = prev_settings[10]
							 | 
						||
| 
								 | 
							
								    bpy.context.view_layer.objects.active = prev_settings[11]
							 | 
						||
| 
								 | 
							
								    scene.render.resolution_x = prev_settings[13][0]
							 | 
						||
| 
								 | 
							
								    scene.render.resolution_y = prev_settings[13][1]
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    #for obj in prev_settings[12]:
							 | 
						||
| 
								 | 
							
								    #    obj.select_set(True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def naming_check():
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								        if obj.type == 'MESH' and obj.name in bpy.context.view_layer.objects:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if obj.name != "":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if "_" in obj.name:
							 | 
						||
| 
								 | 
							
								                        obj.name = obj.name.replace("_",".")
							 | 
						||
| 
								 | 
							
								                    if " " in obj.name:
							 | 
						||
| 
								 | 
							
								                        obj.name = obj.name.replace(" ",".")
							 | 
						||
| 
								 | 
							
								                    if "[" in obj.name:
							 | 
						||
| 
								 | 
							
								                        obj.name = obj.name.replace("[",".")
							 | 
						||
| 
								 | 
							
								                    if "]" in obj.name:
							 | 
						||
| 
								 | 
							
								                        obj.name = obj.name.replace("]",".")
							 | 
						||
| 
								 | 
							
								                    if "ø" in obj.name:
							 | 
						||
| 
								 | 
							
								                        obj.name = obj.name.replace("ø","oe")
							 | 
						||
| 
								 | 
							
								                    if "æ" in obj.name:
							 | 
						||
| 
								 | 
							
								                        obj.name = obj.name.replace("æ","ae")
							 | 
						||
| 
								 | 
							
								                    if "å" in obj.name:
							 | 
						||
| 
								 | 
							
								                        obj.name = obj.name.replace("å","aa")
							 | 
						||
| 
								 | 
							
								                    if "/" in obj.name:
							 | 
						||
| 
								 | 
							
								                        obj.name = obj.name.replace("/",".")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    for slot in obj.material_slots:
							 | 
						||
| 
								 | 
							
								                        if "_" in slot.material.name:
							 | 
						||
| 
								 | 
							
								                            slot.material.name = slot.material.name.replace("_",".")
							 | 
						||
| 
								 | 
							
								                        if " " in slot.material.name:
							 | 
						||
| 
								 | 
							
								                            slot.material.name = slot.material.name.replace(" ",".")
							 | 
						||
| 
								 | 
							
								                        if "[" in slot.material.name:
							 | 
						||
| 
								 | 
							
								                            slot.material.name = slot.material.name.replace("[",".")
							 | 
						||
| 
								 | 
							
								                        if "[" in slot.material.name:
							 | 
						||
| 
								 | 
							
								                            slot.material.name = slot.material.name.replace("]",".")
							 | 
						||
| 
								 | 
							
								                        if "ø" in slot.material.name:
							 | 
						||
| 
								 | 
							
								                            slot.material.name = slot.material.name.replace("ø","oe")
							 | 
						||
| 
								 | 
							
								                        if "æ" in slot.material.name:
							 | 
						||
| 
								 | 
							
								                            slot.material.name = slot.material.name.replace("æ","ae")
							 | 
						||
| 
								 | 
							
								                        if "å" in slot.material.name:
							 | 
						||
| 
								 | 
							
								                            slot.material.name = slot.material.name.replace("å","aa")
							 | 
						||
| 
								 | 
							
								                        if "/" in slot.material.name:
							 | 
						||
| 
								 | 
							
								                            slot.material.name = slot.material.name.replace("/",".")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def opencv_check():
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cv2 = util.find_spec("cv2")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if cv2 is not None:
							 | 
						||
| 
								 | 
							
								        return 0
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        return 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def check_save():
							 | 
						||
| 
								 | 
							
								    if not bpy.data.is_saved:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def check_denoiser():
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								        print("Checking denoiser path")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if scene.TLM_SceneProperties.tlm_denoise_use:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if scene.TLM_SceneProperties.tlm_denoise_engine == "OIDN":
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            oidnPath = scene.TLM_OIDNEngineProperties.tlm_oidn_path
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if scene.TLM_OIDNEngineProperties.tlm_oidn_path == "":
							 | 
						||
| 
								 | 
							
								                return 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if platform.system() == "Windows":
							 | 
						||
| 
								 | 
							
								                if not scene.TLM_OIDNEngineProperties.tlm_oidn_path.endswith(".exe"):
							 | 
						||
| 
								 | 
							
								                    return 1
							 | 
						||
| 
								 | 
							
								                else:
							 | 
						||
| 
								 | 
							
								                    if os.path.isfile(bpy.path.abspath(scene.TLM_OIDNEngineProperties.tlm_oidn_path)):
							 | 
						||
| 
								 | 
							
								                        return 0
							 | 
						||
| 
								 | 
							
								                    else:
							 | 
						||
| 
								 | 
							
								                        return 1
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                return 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def check_materials():
							 | 
						||
| 
								 | 
							
								    for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								        if obj.type == 'MESH' and obj.name in bpy.context.view_layer.objects:
							 | 
						||
| 
								 | 
							
								            if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use:
							 | 
						||
| 
								 | 
							
								                for slot in obj.material_slots:
							 | 
						||
| 
								 | 
							
								                    mat = slot.material
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if mat is None:
							 | 
						||
| 
								 | 
							
								                        if bpy.context.scene.TLM_SceneProperties.tlm_verbose:
							 | 
						||
| 
								 | 
							
								                            print("MatNone")
							 | 
						||
| 
								 | 
							
								                        mat = bpy.data.materials.new(name="Material")
							 | 
						||
| 
								 | 
							
								                        mat.use_nodes = True
							 | 
						||
| 
								 | 
							
								                        slot.material = mat
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    nodes = mat.node_tree.nodes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    #TODO FINISH MATERIAL CHECK -> Nodes check
							 | 
						||
| 
								 | 
							
								                    #Afterwards, redo build/utility
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def sec_to_hours(seconds):
							 | 
						||
| 
								 | 
							
								    a=str(seconds//3600)
							 | 
						||
| 
								 | 
							
								    b=str((seconds%3600)//60)
							 | 
						||
| 
								 | 
							
								    c=str(round((seconds%3600)%60,1))
							 | 
						||
| 
								 | 
							
								    d=["{} hours {} mins {} seconds".format(a, b, c)]
							 | 
						||
| 
								 | 
							
								    return d
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def setMode():
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    obj = bpy.context.scene.objects[0]
							 | 
						||
| 
								 | 
							
								    bpy.context.view_layer.objects.active = obj
							 | 
						||
| 
								 | 
							
								    obj.select_set(True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    hidden = False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if obj.hide_get():
							 | 
						||
| 
								 | 
							
								        hidden = True
							 | 
						||
| 
								 | 
							
								    if obj.hide_viewport:
							 | 
						||
| 
								 | 
							
								        hidden = True
							 | 
						||
| 
								 | 
							
								    if obj.hide_render:
							 | 
						||
| 
								 | 
							
								        hidden = True
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if not hidden:
							 | 
						||
| 
								 | 
							
								        bpy.ops.object.mode_set(mode='OBJECT')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #TODO Make some checks that returns to previous selection
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def setGui(mode):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if mode == 0:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        context = bpy.context
							 | 
						||
| 
								 | 
							
								        driver = bpy.app.driver_namespace
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if "TLM_UI" in driver:
							 | 
						||
| 
								 | 
							
								            driver["TLM_UI"].remove_handle()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if mode == 1:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #bpy.context.area.tag_redraw()
							 | 
						||
| 
								 | 
							
								        context = bpy.context
							 | 
						||
| 
								 | 
							
								        driver = bpy.app.driver_namespace
							 | 
						||
| 
								 | 
							
								        driver["TLM_UI"] = Viewport.ViewportDraw(context, "Building Lightmaps")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def checkAtlasSize():
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    overflow = False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    scene = bpy.context.scene
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if scene.TLM_EngineProperties.tlm_setting_supersample == "2x":
							 | 
						||
| 
								 | 
							
								        supersampling_scale = 2
							 | 
						||
| 
								 | 
							
								    elif scene.TLM_EngineProperties.tlm_setting_supersample == "4x":
							 | 
						||
| 
								 | 
							
								        supersampling_scale = 4
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        supersampling_scale = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for atlas in bpy.context.scene.TLM_PostAtlasList:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        atlas_resolution = int(int(atlas.tlm_atlas_lightmap_resolution) / int(scene.TLM_EngineProperties.tlm_resolution_scale) * int(supersampling_scale))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        utilized = 0
							 | 
						||
| 
								 | 
							
								        atlasUsedArea = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for obj in bpy.context.scene.objects:
							 | 
						||
| 
								 | 
							
								            if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use:
							 | 
						||
| 
								 | 
							
								                if obj.TLM_ObjectProperties.tlm_postpack_object:
							 | 
						||
| 
								 | 
							
								                    if obj.TLM_ObjectProperties.tlm_postatlas_pointer == atlas.name:
							 | 
						||
| 
								 | 
							
								                        
							 | 
						||
| 
								 | 
							
								                        atlasUsedArea += int(obj.TLM_ObjectProperties.tlm_mesh_lightmap_resolution) ** 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        utilized = atlasUsedArea / (int(atlas_resolution) ** 2)
							 | 
						||
| 
								 | 
							
								        if (utilized * 100) > 100:
							 | 
						||
| 
								 | 
							
								            overflow = True
							 | 
						||
| 
								 | 
							
								            print("Overflow for: " + str(atlas.name))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if overflow == True:
							 | 
						||
| 
								 | 
							
								        return True
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        return False
							 | 
						||
| 
								 | 
							
								
							 |