Co to jest format pliku BSP?
Plik .bsp to skompilowany binarny poziom gry 3D, nazwany na cześć algorytmu Binary Space Partitioning (binarny podział przestrzeni), używanego do rekurencyjnego dzielenia przestrzeni 3D w celu wydajnego renderowania w czasie rzeczywistym. Format został wprowadzony w 1996 roku wraz z grą Quake firmy id Software i od tego czasu rozgałęził się na kilka blisko spokrewnionych, ale wzajemnie niekompatybilnych wariantów używanych przez różne silniki gier.
Plik wykorzystuje binarny kontener oparty na strukturze „lump”: stały nagłówek przechowuje magiczną liczbę, liczbę całkowitą wersji oraz katalog ponumerowanych bloków (lumps). Każdy blok jest ciągłym blokiem danych przechowującym określoną kategorię danych - węzły drzewa BSP, wierzchołki, ściany, krawędzie, mapy świetlne (lightmaps), dane widoczności (PVS), definicje punktów odradzania (spawn-point) oraz odniesienia do tekstur lub materiałów. Dane encji, takie jak punkty odradzania, wyzwalacze (triggers) i przedmioty do podniesienia, są przechowywane jako zwykłe pary klucz-wartość ASCII w dedykowanym bloku.
Główne niekompatybilne warianty obejmują:
- Quake 1 (BSP29): wersja int = 29; id Software, 1996.
- GoldSrc / Half-Life 1 (BSP30): wersja int = 30; Valve, 1998.
- Quake 2 / Quake 3 (IBSP v38/v46): ASCII magic
IBSP, następnie liczba całkowita wersji. - Source Engine (VBSP): ASCII magic
VBSP, wersje 17-21 w zależności od gry (CS:GO, TF2, L4D2). - Source 2 (VBSP2): magic
VBSP, wersja 29; używany w CS2 i Half-Life: Alyx.
Pliki .bsp są wynikami kompilacji, a nie plikami źródłowymi. Projektanci poziomów pracują w plikach .vmf (Valve Map Format) lub .map i kompilują je do formatu .bsp za pomocą vbsp.exe (Source Engine) lub q3map2 (rodzina Quake).
Bezpieczeństwo
RYZYKO: MEDIUMSame pliki BSP są danymi statycznymi i nie mogą wykonywać kodu. Jednak załadowanie złośliwie przygotowanego pliku BSP w podatnym silniku gry może spowodować przepełnienie bufora lub błędy uszkodzenia sterty (istnieją historyczne błędy CVE dla gier na silniku Quake). Ryzyko dotyczy głównie pobierania niestandardowych map z niezaufanych źródeł do gier wieloosobowych; oficjalne mapy z Warsztatu Steam są zazwyczaj bezpieczniejsze.
Szczegóły formatu
w pigułce- Quake 1 BSP (BSP29) - Oryginalny format id Software z 1996 roku, brak ASCII magic, numer wersji 29 pod offsetem 0.
- Quake 3 / Quake Live BSP (IBSP v46) - Używa magic 'IBSP' jak Quake 2, ale w wersji 46; używany przez silniki open-source (ioquake3, OpenArena).
Programy otwierające pliki BSP
Szczegóły techniczne
specyfikacja| Kontener | Niestandardowy binarny oparty na blokach (lumps); istnieją niekompatybilne warianty dla poszczególnych silników |
| Kodowanie | Binarne |
| Kolejność bajtów | Little-endian |
| Magiczne bajty | Zależne od silnika: IBSP (Quake 2/3), VBSP (Source/Source 2), surowy int 29 lub 30 (Quake 1/GoldSrc) |
| Pole wersji | Liczba całkowita w nagłówku: 29=Quake 1, 30=GoldSrc/HL1, 38=Quake 2, 46=Quake 3, 17-21=tytuły Source Engine, 29=Source 2 |
| Typy bloków (lumps) | Węzły/liście/płaszczyzny drzewa BSP, wierzchołki, ściany, krawędzie, mapy świetlne, widoczność PVS, definicje encji, referencje materiałów |
| Dane encji | Przechowywane jako zwykłe pary klucz-wartość ASCII w bloku encji (punkty startowe, wyzwalacze, przedmioty itp.) |
| Format mapy świetlnej | 24-bitowy RGB na luksel (Source Engine); 8-bitowy monochromatyczny na luksel (Quake 1) |
| Zakres współrzędnych | ±32 768 jednostek (Quake 1); ±16 384 użyteczne dla geometrii (Source Engine) |
| Kompresja | Brak na poziomie pliku; Source 2 obsługuje opcjonalną kompresję LZ4 dla poszczególnych bloków |
| Typowy rozmiar | 2 MB - 200 MB (mapy Quake 1-20 MB; mapy Source 5-100 MB; mapy CS2 50-200 MB) |
| Wynik kompilacji | BSP jest wynikiem kompilatora; źródłem jest .vmf (Source) lub .map (Quake), kompilowane za pomocą vbsp.exe lub q3map2 |
| Kompatybilność między silnikami | Brak - każdy wariant silnika jest wzajemnie niekompatybilny z innymi |
| Powiązany system operacyjny | Windows, Linux, macOS |
| Wydano | 1996 (Quake 1.0, id Software) |
| Najnowsza wersja | Source 2 VBSP2 (2020+, used in CS2 / Half-Life: Alyx); multiple incompatible lineages |
| Specyfikacja | developer.valvesoftware.com |
Konwersje BSP
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki BSP.