diff --git a/public/textures/curb_Diffuse.jpg b/public/textures/curb_Diffuse.jpg new file mode 100644 index 0000000..a83e597 Binary files /dev/null and b/public/textures/curb_Diffuse.jpg differ diff --git a/public/textures/curb_arm.jpg b/public/textures/curb_arm.jpg new file mode 100644 index 0000000..f79bf83 Binary files /dev/null and b/public/textures/curb_arm.jpg differ diff --git a/public/textures/curb_nor_gl.jpg b/public/textures/curb_nor_gl.jpg new file mode 100644 index 0000000..92f6c07 Binary files /dev/null and b/public/textures/curb_nor_gl.jpg differ diff --git a/public/textures/sidewalk_Diffuse.jpg b/public/textures/sidewalk_Diffuse.jpg new file mode 100644 index 0000000..1e01b20 Binary files /dev/null and b/public/textures/sidewalk_Diffuse.jpg differ diff --git a/tools/assets/textures.mjs b/tools/assets/textures.mjs index f6ecf12..8b77d40 100644 --- a/tools/assets/textures.mjs +++ b/tools/assets/textures.mjs @@ -2,6 +2,7 @@ // unangetastet, damit ein neuer Eintrag die übrigen Texturen nicht still ändert. import { existsSync } from "node:fs"; import { mkdir, writeFile } from "node:fs/promises"; +import sharp from "sharp"; const UA = { "User-Agent": "leonida-assets/0.1 (local hobby project)" }; const SLUGS = ["asphalt_02", "concrete_pavement_03", "white_stucco", "sand_01", "leafy_grass", "grass_path_2", "palm_bark", @@ -22,3 +23,40 @@ for (const slug of SLUGS) { console.log(`${slug}_${map}.jpg ${(buf.length / 1e6).toFixed(1)} MB`); } } + +// Bordstein und Gehweg kommen aus modular_sidewalk_curb_kit (Just8, CC BY 4.0). Der Ordner +// gehört dem Nutzer und liegt nicht im Repo — das Skript darf deshalb nicht von ihm abhängen, +// sondern überspringt den Schritt mit einer verständlichen Meldung, wenn er fehlt. Die vier +// erzeugten Dateien sind versioniert, danach braucht niemand mehr den Ordner. +// Über CURB_KIT umstellbar, damit der Fall "Kit fehlt" geprüft werden kann, ohne den Ordner +// des Nutzers zu verschieben. +const KIT = `${process.env.CURB_KIT ?? "modular_sidewalk_curb_kit"}/textures`; +const KIT_MAPS = [ + // glTF packt Rauheit nach G und Metall nach B — dasselbe Schema wie die arm-Karten von + // Poly Haven, deshalb ist die metallicRoughness-Karte hier direkt das arm-Ziel. + { from: "CurbMat_baseColor.jpeg", to: "curb_Diffuse.jpg" }, + { from: "CurbMat_normal.png", to: "curb_nor_gl.jpg" }, + { from: "CurbMat_metallicRoughness.png", to: "curb_arm.jpg" }, + { from: "sidewalk_baseColor.jpeg", to: "sidewalk_Diffuse.jpg" }, +]; + +async function importCurbKit() { + if (!existsSync(KIT)) { + console.log(`${KIT} fehlt — Bordstein-Texturen übersprungen. Das Kit gehört dem Nutzer ` + + "und ist nicht im Repo; die erzeugten Dateien liegen bereits unter public/textures."); + return; + } + for (const { from, to } of KIT_MAPS) { + const target = `public/textures/${to}`; + if (existsSync(target)) { + console.log(`${to} ist schon da`); + continue; + } + // 1024 wie alle übrigen Texturen: die 2048er des Kits wären für ein 15 cm hohes + // Wandband und einen Gehwegbelag Verschwendung. + await sharp(`${KIT}/${from}`).resize(1024, 1024).jpeg({ quality: 90 }).toFile(target); + console.log(`${to} erzeugt`); + } +} + +await importCurbKit();