added blender script to convert all tracks into 3D models

This commit is contained in:
Faraphel 2022-05-27 14:49:22 +02:00
parent 1ef62c5284
commit 68cabd0f86
2 changed files with 75 additions and 10 deletions

View file

@ -1,10 +1,11 @@
""" """
this script allow you to more easily select map preview for each track. this script allow you to more easily select map preview for each track.
""" """
import shutil
import requests
from selenium import webdriver from selenium import webdriver
import keyboard import keyboard
import shutil
import ctypes import ctypes
import time import time
import glob import glob
@ -13,42 +14,65 @@ import os
get_filename = lambda file: ".".join(file.split(".")[:-1]) get_filename = lambda file: ".".join(file.split(".")[:-1])
get_nodir = lambda file: file.replace("\\", "/").split("/")[-1] get_nodir = lambda file: file.replace("\\", "/").split("/")[-1]
move_cursor_to = ctypes.windll.user32.SetCursorPos move_cursor_to = ctypes.windll.user32.SetCursorPos
os.makedirs("./map preview/tmp/", exist_ok=True)
chrome_option = webdriver.ChromeOptions() chrome_option = webdriver.ChromeOptions()
driver = webdriver.Chrome("./map preview/chromedriver.exe", options=chrome_option) driver = webdriver.Chrome("./map preview/chromedriver.exe", options=chrome_option)
driver.get("https://noclip.website/") 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") tracks = glob.iglob("../file/Track/*.szs")
track = "none.png" 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(): def save_screenshot():
global track global track
print("saving screenshot")
driver.save_screenshot(filename=f"./map preview/image/{get_filename(get_nodir(track))}.png") driver.save_screenshot(filename=f"./map preview/image/{get_filename(get_nodir(track))}.png")
skip_to_next() skip_to_next()
def skip_to_next(): def skip_to_next():
global track global track, latest_track_passed
if os.path.exists("./map preview/tmp/" + get_nodir(track)): if os.path.exists("./map preview/tmp/" + get_nodir(track)):
os.remove("./map preview/tmp/" + get_nodir(track)) os.remove("./map preview/tmp/" + get_nodir(track))
track = next(tracks) 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) 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() skip_to_next()
keyboard.add_hotkey('h', save_screenshot) keyboard.add_hotkey('h', save_screenshot)
keyboard.add_hotkey('j', ignore_track)
while True: while True:
time.sleep(1) time.sleep(1)

View file

@ -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