feat(world): Bordstein bekommt gebürsteten Beton von Poly Haven

Auf Wunsch des Nutzers: brushed_concrete_04 statt der Textur aus
modular_sidewalk_curb_kit. Die Wand ist 18 cm hoch, da trägt eine Textur mit
waagerechter Struktur mehr als das Modulmuster des Kits.

Damit ist das Kit nirgends mehr im Spiel: Die Geometrie des Bordsteins war von
Anfang an selbst gebaut, der Gehweg nimmt seit der Platzhalter-Korrektur
concrete_pavement, und der Bordstein jetzt brushed_concrete_04 - beides
Poly Haven (CC0). Der Kit-Import in tools/assets/textures.mjs entfällt samt
sharp-Abhängigkeit, die drei kopierten Kit-Texturen sind entfernt, und die
Namensnennung im Manifest nennt Just8 nicht mehr, weil nichts davon mehr
benutzt wird. Der Kit-Ordner des Nutzers bleibt unangetastet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Opus 5 committed 2026-09-18 12:42:10 +02:00
1 parent 50eee9281a
commit f226bc2c95
10 files changed
+14 -46

No files matched your search

@@ -86,12 +86,14 @@ Ein 15-cm-Bordstein hält den Spieler also nicht auf, er ist eine Stufe. Fahrzeu
| Maßeinheit | Zentimeter | Meter |
| Kernmaß | Bordstein 84,79 × 14,87 cm, Module 300 cm | Fahrbahnstücke **4,2 m** breit |
| Texturen | 3 Materialien, alle 2048², mit Normal- und MetallicRoughness-Karte | 9 Materialien, 512–1024, Markierungen fest eingebacken |
| Brauchbar als | Profil und Texturen für Bordstein und Gehweg | später Schilder, Masten, Geländer |
| Brauchbar als | ursprünglich Profil und Texturen für Bordstein und Gehweg — am Ende keines von beidem, s. Korrektur unten | später Schilder, Masten, Geländer |
Zwei Dinge liegen damit fest. Erstens: Das Straßen-Kit taugt nicht für die Fahrbahn — 4,2 m gegen 13,4 m gemessene Korridorbreite, und seine Markierungen sind europäisch (gelbe Randlinien, weiße gestrichelte Mitte), also das Gegenteil des amerikanischen Schemas. Zweitens: Das Bordstein-Kit besteht aus 16 Kästen mit zusammen 351 Punkten; seine Substanz sind die Texturen, nicht die Geometrie. 177 km Bordsteinkante wären in 3-m-Modulen rund 59.000 Einzelteile.
**Korrektur (Gehwegtextur-Korrektur, 2026-09-18):** Die Zeile „Brauchbar als: Profil und Texturen für Bordstein und Gehweg" gilt nur noch für den Bordstein. `sidewalk_Diffuse.jpg` aus `modular_sidewalk_curb_kit` ist kein Betonbild, sondern das Platzhalterbild des Kits — dunkler Grund, roter Schriftzug „Tru-planar Sidewalk texture", im Browser geprüft. Solange `loadSet()` an der fehlenden Normal- und ARM-Karte scheiterte, fiel der Gehweg auf den einfarbigen Ersatz zurück und niemand bemerkte es; sobald `loadSet()` auch ohne die beiden Beiwerke lädt (s. Abschnitt „Texturen aus dem Kit" unten), kachelt der Schriftzug über die ganze Stadt. Der Gehweg benutzt deshalb `concrete_pavement` von Poly Haven (CC0), dieselbe Textur wie die Parkwege (`TEXTURES.paths`). Der Bordstein bleibt beim Kit — `curb_Diffuse.jpg` ist eine echte Betontextur mit Fugen, im Browser geprüft.
**Korrektur (Bordstein-Befund, 2026-09-18):** Auch der Bordstein kommt nicht mehr aus dem Kit. Seine Wand ist 18 cm hoch; dort trägt eine Textur mit waagerechter Struktur mehr als das Modulmuster des Kits, und der Nutzer hat `brushed_concrete_04` von Poly Haven (CC0) ausgewählt. Damit ist `modular_sidewalk_curb_kit` nirgends mehr im Spiel: Die Geometrie war von Anfang an selbst gebaut, beide Texturen kommen jetzt von Poly Haven, und die Namensnennung des Kits entfällt (s. Abschnitt „Namensnennung").
## Entscheidungen des Nutzers
| Frage | Entscheidung |
@@ -205,7 +207,7 @@ Der Schritt überspringt still, was schon da ist, und meldet verständlich, wenn
`sidewalk_metallicRoughness.png` ist eine 605 Byte große Einfarbfläche und wird nicht übernommen; eine Normal-Map für den Gehweg liefert das Kit nicht.
**Namensnennung:** `manifest.json` und die Zeile im Spiel bekommen „Bordstein: Just8 (Sketchfab, CC BY 4.0)". Das Straßen-Kit wird in dieser Arbeit nicht benutzt und deshalb auch nicht genannt. Der Gehweg kommt seit der Korrektur oben (Abschnitt „Die beiden Kits") von Poly Haven (CC0) und bleibt deshalb wie die übrigen Poly-Haven-Texturen ohne eigene Namensnennung.
**Namensnennung:** Keine neue Zeile. Bordstein und Gehweg kommen seit den beiden Korrekturen oben (Abschnitt „Die beiden Kits") von Poly Haven (CC0) und brauchen wie die übrigen Poly-Haven-Texturen keine eigene Namensnennung; das Bordstein-Kit von Just8 und das Straßen-Kit werden nicht benutzt und deshalb auch nicht genannt.
## Chunk-Format
Binary file not shown.

After

Width:  |  Height:  |  Size: 844 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 KiB

+4 -1
View File
@@ -16,7 +16,10 @@ export const TEXTURES = {
paths: "concrete_pavement", // helle Betonplatten, seit Teil 2 auch für den Gehweg (sidewalk unten)
carriageway: "asphalt_02",
lots: "asphalt_02", // Parkplätze und Vorplätze: derselbe Asphalt wie die Fahrbahn
curb: "curb", // modular_sidewalk_curb_kit (Just8, CC BY 4.0), s. tools/assets/textures.mjs
// Gebürsteter Beton mit Fugen und Kanten: die Wand ist nur 18 cm hoch, da zählt eine Textur mit
// waagerechter Struktur mehr als eine mit Muster. Vorher kam sie aus modular_sidewalk_curb_kit;
// die Kit-Textur ist damit nirgends mehr im Spiel (s. tools/assets/textures.mjs).
curb: "brushed_concrete_04",
// Derselbe Wert wie TEXTURES.paths: helle Betonplatten in echter Größe. Die Kit-Textur schied
// aus, weil sidewalk_Diffuse.jpg kein Betonbild war, sondern das Platzhalterbild des Kits
// (roter Schriftzug "Tru-planar Sidewalk texture", im Browser geprüft).
+5 -41
View File
@@ -2,11 +2,10 @@
// 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",
"concrete_pavement"];
"concrete_pavement", "brushed_concrete_04"];
const MAPS = ["Diffuse", "nor_gl", "arm"];
await mkdir("public/textures", { recursive: true });
@@ -24,42 +23,7 @@ for (const slug of SLUGS) {
}
}
// Der Bordstein kommt 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 drei erzeugten
// Dateien sind versioniert, danach braucht niemand mehr den Ordner.
// Korrektur: sidewalk_baseColor.jpeg (-> sidewalk_Diffuse.jpg) ist raus. Die Datei war das
// Platzhalterbild des Kits, keine Betontextur (roter Schriftzug "Tru-planar Sidewalk texture",
// im Browser geprüft) - der Gehweg benutzt jetzt concrete_pavement von Poly Haven, s.
// src/world/materials.js.
// Ü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" },
];
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 Verschwendung.
await sharp(`${KIT}/${from}`).resize(1024, 1024).jpeg({ quality: 90 }).toFile(target);
console.log(`${to} erzeugt`);
}
}
await importCurbKit();
// modular_sidewalk_curb_kit (Just8, CC BY 4.0) wird nicht mehr gebraucht. Der Gehweg nimmt seit der
// Gehwegtextur-Korrektur concrete_pavement, der Bordstein seit dem Bordstein-Befund
// brushed_concrete_04 - beide von Poly Haven (CC0) und beide oben in SLUGS. Die Geometrie des
// Bordsteins war ohnehin selbst gebaut (s. src/world/geometry.js, kerbGeometry).
+1 -2
View File
@@ -169,8 +169,7 @@ def main() -> None:
"class_shares": shares,
"attribution": "Kartenkacheln: GTA VI Map (CC BY 4.0) — https://map.gtadb.org, YANIS v15. "
"Wahrzeichen: rolux/gtamaplib-vc (Unlicense). "
"Flamingo Park: © OpenStreetMap-Mitwirkende (ODbL). "
"Bordstein: Just8 (Sketchfab, CC BY 4.0).",
"Flamingo Park: © OpenStreetMap-Mitwirkende (ODbL).",
})
print(render_map(OUT, OUT), "->", OUT)