From 68cabd0f86bb6de75ddc6449e21d558335d3ba90 Mon Sep 17 00:00:00 2001 From: Faraphel Date: Fri, 27 May 2022 14:49:22 +0200 Subject: [PATCH] added blender script to convert all tracks into 3D models --- scripts/generate_track_preview.py | 44 ++++++++++++++++++++++++------- scripts/get 3D model from szs.py | 41 ++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 scripts/get 3D model from szs.py diff --git a/scripts/generate_track_preview.py b/scripts/generate_track_preview.py index 01e1bda..b93b306 100644 --- a/scripts/generate_track_preview.py +++ b/scripts/generate_track_preview.py @@ -1,10 +1,11 @@ """ this script allow you to more easily select map preview for each track. """ +import shutil +import requests from selenium import webdriver import keyboard -import shutil import ctypes import time import glob @@ -13,42 +14,65 @@ import os get_filename = lambda file: ".".join(file.split(".")[:-1]) get_nodir = lambda file: file.replace("\\", "/").split("/")[-1] move_cursor_to = ctypes.windll.user32.SetCursorPos +os.makedirs("./map preview/tmp/", exist_ok=True) chrome_option = webdriver.ChromeOptions() driver = webdriver.Chrome("./map preview/chromedriver.exe", options=chrome_option) driver.get("https://noclip.website/") -driver.fullscreen_window() -time.sleep(5) -driver.execute_script( - "var element = arguments[0]; element.parentNode.removeChild(element);", - driver.find_element_by_id("Panel") -) +LAST_TRACK_PLAYED = "d97a4b29d422e830e07e98196e4f2e3f41a90086" +latest_track_passed = LAST_TRACK_PLAYED is None tracks = glob.iglob("../file/Track/*.szs") track = "none.png" +def ignore_track(): + global track, driver + print("skipping to next track") + + driver.close() + driver = webdriver.Chrome("./map preview/chromedriver.exe", options=chrome_option) + driver.get("https://noclip.website/") + + skip_to_next() + + def save_screenshot(): global track + print("saving screenshot") driver.save_screenshot(filename=f"./map preview/image/{get_filename(get_nodir(track))}.png") skip_to_next() def skip_to_next(): - global track + global track, latest_track_passed + if os.path.exists("./map preview/tmp/" + get_nodir(track)): os.remove("./map preview/tmp/" + get_nodir(track)) track = next(tracks) - while os.path.exists(f"./map preview/image/{get_filename(get_nodir(track))}.png"): + + while True: + sha1 = get_nodir(track).replace(".szs", "") + if not latest_track_passed and sha1 != LAST_TRACK_PLAYED: + track = next(tracks) + continue + + else: latest_track_passed = True + + if requests.get(f"https://github.com/Faraphel/MKWF-Install/raw/track-preview/map/{sha1}.png").status_code != 200: break + print(f"track {sha1} already exist !") track = next(tracks) - shutil.copy(track, "./map preview/tmp/" + get_nodir(track)) + print(track) + + shutil.copy(track, f"./map preview/tmp/{get_nodir(track)}") skip_to_next() keyboard.add_hotkey('h', save_screenshot) +keyboard.add_hotkey('j', ignore_track) while True: time.sleep(1) diff --git a/scripts/get 3D model from szs.py b/scripts/get 3D model from szs.py new file mode 100644 index 0000000..16d917f --- /dev/null +++ b/scripts/get 3D model from szs.py @@ -0,0 +1,41 @@ +import bpy +import subprocess +import os +import glob +import shutil + +TRACK_DIR: str = r"C:\Users\RC606\PycharmProjects\MKWF-Install\file\Track" +DEST_DIR: str = r"D:/gltf/" + +def clear_scene(): + bpy.ops.object.select_all(action='SELECT') + bpy.ops.object.delete(use_global=False) + +os.chdir(TRACK_DIR) +os.makedirs(DEST_DIR, exist_ok=True) + +clear_scene() + +for file in glob.iglob("./*.szs"): + try: + + print(sha1 := file.split("/")[-1].split("\\")[-1].split(".")[0]) + if os.path.exists(f"{DEST_DIR}/{sha1}.glb"): continue + + subprocess.run(["wszst", "extract", file], creationflags=subprocess.CREATE_NO_WINDOW) + if not os.path.exists(f"./{sha1}.d/course_model.brres"): continue + subprocess.run(["abmatt", "convert", f"./{sha1}.d/course_model.brres", "to", f"./{sha1}.d/course_model.obj"], creationflags=subprocess.CREATE_NO_WINDOW) + if not os.path.exists(f"./{sha1}.d/course_model.obj"): continue + + bpy.ops.import_scene.obj(filepath=f"./{sha1}.d/course_model.obj") + bpy.ops.export_scene.gltf(filepath=f"{DEST_DIR}/{sha1}.glb") + + except Exception as e: + with open("./error.log", "a") as file: file.write(str(e)) + + finally: + try: + clear_scene() + shutil.rmtree(f"./{sha1}.d/") + except: pass +