Hvad er BSP-filformatet?
En .bsp-fil er et kompileret binært 3D-spilniveau, opkaldt efter Binary Space Partitioning-algoritmen, der bruges til rekursivt at opdele 3D-rummet for effektiv realtids-rendering. Formatet blev introduceret i 1996 med id Softwares Quake og er siden forgrenet i flere tæt beslægtede, men indbyrdes inkompatible varianter, der bruges af forskellige spilmotorer.
Filen bruger en lump-baseret binær container: en fast header gemmer et magic number, et versions-heltal og et indeks over nummererede lumps. Hver lump er en sammenhængende datablok, der indeholder en specifik kategori af data - BSP-trænoder, verticer, flader, kanter, lightmaps, synlighedsdata (PVS), definitioner af entity-spawnpoints og referencer til teksturer eller materialer. Entity-data såsom spawnpoints, triggere og item-pickups gemmes som almindelige ASCII-nøgle-værdi-par i en dedikeret lump.
Større inkompatible varianter inkluderer:
- Quake 1 (BSP29): version int = 29; id Software, 1996.
- GoldSrc / Half-Life 1 (BSP30): version int = 30; Valve, 1998.
- Quake 2 / Quake 3 (IBSP v38/v46): ASCII magic
IBSP, derefter versions-heltal. - Source Engine (VBSP): ASCII magic
VBSP, version 17-21 afhængigt af spillet (CS:GO, TF2, L4D2). - Source 2 (VBSP2):
VBSPmagic, version 29; brugt i CS2 og Half-Life: Alyx.
.bsp-filer er kompilerede output, ikke kildefiler. Banedesignere arbejder i .vmf (Valve Map Format) eller .map-filer og kompilerer til .bsp ved hjælp af vbsp.exe (Source Engine) eller q3map2 (Quake-familien).
Sikkerhed og tryghed
RISIKO: MEDIUMBSP-filer i sig selv er statiske data og kan ikke eksekvere kode. Indlæsning af en ondsindet udformet BSP i en sårbar spilmotor kan dog udløse buffer-overflows eller heap-corruption-fejl (historiske CVE'er findes for Quake-motor-spil). Risikoen er primært relevant, når du downloader brugerdefinerede kort fra upålidelige kilder til multiplayer-spil; officielle Steam Workshop-kort er generelt sikrere.
Formatdetaljer
kort fortalt- Quake 1 BSP (BSP29) - Originalt 1996 id Software-format, ingen ASCII magic, versionsnummer 29 ved offset 0.
- Quake 3 / Quake Live BSP (IBSP v46) - Bruger 'IBSP' magic ligesom Quake 2, men version 46; brugt af open-source motorer (ioquake3, OpenArena).
Programmer der åbner BSP-filer
Tekniske detaljer
dyb specifikation| Container | Brugerdefineret lump-baseret binær; inkompatible varianter findes per spilmotor |
| Kodning | Binær |
| Byte-orden | Little-endian |
| Magic bytes | Motor-afhængig: IBSP (Quake 2/3), VBSP (Source/Source 2), rå int 29 eller 30 (Quake 1/GoldSrc) |
| Versionsfelt | Heltal i header: 29=Quake 1, 30=GoldSrc/HL1, 38=Quake 2, 46=Quake 3, 17-21=Source Engine-titler, 29=Source 2 |
| Lump-typer | BSP-trænoder/blade/planer, verticer, flader, kanter, lightmaps, PVS-synlighed, entity-definitioner, materialereferencer |
| Entity-data | Gemt som almindelige ASCII-nøgle-værdi-par i entities-lumpen (spawnpoints, triggere, pickups, osv.) |
| Lightmap-format | 24-bit RGB per luxel (Source Engine); 8-bit monokrom per luxel (Quake 1) |
| Koordinatområde | ±32.768 enheder (Quake 1); ±16.384 anvendelige til geometri (Source Engine) |
| Komprimering | Ingen på filniveau; Source 2 understøtter valgfri per-lump LZ4-komprimering |
| Typisk størrelse | 2 MB - 200 MB (Quake-kort 1-20 MB; Source-kort 5-100 MB; CS2-kort 50-200 MB) |
| Kompileret output | BSP er compiler-output; kilden er .vmf (Source) eller .map (Quake), kompileret med vbsp.exe eller q3map2 |
| Cross-engine kompatibilitet | Ingen - hver motorvariant er indbyrdes inkompatibel med andre |
| Associeret OS | Windows, Linux, macOS |
| Udgivet | 1996 (Quake 1.0, id Software) |
| Seneste version | Source 2 VBSP2 (2020+, used in CS2 / Half-Life: Alyx); multiple incompatible lineages |
| Specifikation | developer.valvesoftware.com |
BSP-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om BSP-filer.