Format SBT: Różnice pomiędzy wersjami

Z MaSzyna
Skocz do: nawigacja, szukaj
(Komórka (cell))
 
(Nie pokazano 48 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
== Informacje ogólne ==
+
Plik SBT (Scenery Binary Terrain) jest plikiem binarnym zawierającym dane terenu. Dane te są partycjonowane geograficznie, co w zamyśle ma umożliwić szybsze wczytywanie scenerii i jej dynamiczne ładowanie bez potrzeby wczytywania całej scenerii do pamięci, jak to ma miejsce w przypadku plików tekstowych.
Plik SBT (Scenery Binary Terrain) jest plikiem binarnym zawierającym dane terenu. Dane te są podzielone na sekcje, co w zamyśle ma umożliwić szybsze wczytywanie scenerii i jej dynamiczne ładowanie bez potrzeby wczytywania całej scenerii do pamięci, jak to ma miejsce w przypadku plików tekstowych.
 
  
Plik tworzony jest podczas wczytywania scenariusza. Wszystkie trójkąty terenu oraz linie z plików tekstowych (SCN, SCM, INC) są w ramach sekcji łączone w większe grupy siatek i w tej formie zapisywane do pliku SBT. Późniejsze ładowanie tego samego scenariusza będzie już używało danych z pliku SBT.
+
Plik tworzony jest podczas wczytywania scenariusza. Wszystkie [[Obiekt node::triangles|trójkąty terenu]] oraz [[Obiekt node::lines|linie]] z [[Plik scenerii|plików tekstowych (SCN, SCM, INC)]] są w ramach sekcji i komórek łączone w większe grupy siatek i w tej formie zapisywane do pliku SBT. Późniejsze ładowanie tego samego scenariusza będzie już używało danych z pliku SBT, a co za tym idzie, wczytywanie będzie dużo szybsze z powodu braku konieczności kosztownego łączenia siatek i umieszczania ich w sektorach.
  
 
Ponieważ nie istnieje sposób na rozpoznanie, które scenariusze korzystają z takiego samego terenu i otoczenia, plik SBT tworzony jest osobno dla każdego scenariusza.
 
Ponieważ nie istnieje sposób na rozpoznanie, które scenariusze korzystają z takiego samego terenu i otoczenia, plik SBT tworzony jest osobno dla każdego scenariusza.
Linia 10: Linia 9:
  
 
== Format pliku ==
 
== Format pliku ==
Na początku pliku znajduje się nagłówek EU07SBTx, gdzie x jest numerem wersji formatu.
+
Na początku pliku znajduje się nagłówek pliku.
Zaraz za nagłówkiem znajduje się 4 bajtowa liczba określająca ilość sekcji zapisanych w pliku.
+
{| class="wikitable"
 +
! Rozmiar i typ danych
 +
! Opis
 +
|-
 +
| 4 (4x char)
 +
| Nagłówek pliku - ciąg znaków "EU07"
 +
|}
  
=== Sekcja (section) ===
+
=== Region ===
 +
W obecnej wersji formatu występuje tylko jeden region.
 +
Region grupuje sekcje. W ramach jednego regionu mieści się 500x500 sekcji.
  
Sekcje zapisane są jedna za drugą, a każda z nich zaczyna się od:
+
{| class="wikitable"
 +
! Rozmiar i typ danych
 +
! Opis
 +
|-
 +
| 3 (3x char)
 +
| Nagłówek regionu - ciąg znaków "SBT"
 +
|-
 +
| 4 (1x unsigned int)
 +
| Numer wersji formatu (wersji pliku?). Aktualnie exe na stałe wpisuje liczbę 1.
 +
|-
 +
| 4 (1x unsigned int)
 +
| Liczba sekcji w regionie
 +
|-
 +
| Zależny od ilości i rozmiaru sekcji
 +
| Dane sekcji
 +
|}
  
1. Indeksu sekcji (unsigned int, 4 bajty)
+
=== Sekcja (section) ===
 
+
Sekcje podstawową jednostką podziału scenerii na fragmenty. Sekcja jest kwadratem o długości boku równej 1000m i jest podzielna na komórki.
2. Rozmiaru sekcji (unsigned int, 4 bajty)
 
 
 
3. Ilości shape'ów w sekcji (unsigned int, 4 bajty)
 
 
 
Po tych danych zapisane dane shape'ów.
 
Za shape'ami zapisane są dane komórek.
 
  
 +
{| class="wikitable"
 +
! Rozmiar i typ danych
 +
! Opis
 +
|-
 +
| 4 (1x unsigned int)
 +
| Indeks sekcji
 +
|-
 +
| 4 (1x unsigned int)
 +
| Rozmiar sekcji w bajtach
 +
|-
 +
| 12 (3x float)
 +
| Środek bounding boxa
 +
|-
 +
| 4 (1x float)
 +
| Promień bounding boxa
 +
|-
 +
| 4 (1x unsigned int)
 +
| Ilość danych geometrycznych w sekcji
 +
|-
 +
| Zależny od rozmiaru danych geometrii
 +
| Dane geometryczne ([[Format SBT#Shape node|shape node]])
 +
|-
 +
| Zależny od rozmiaru danych komórek
 +
| Dane komórek
 +
|}
  
 
=== Komórka (cell) ===
 
=== Komórka (cell) ===
 +
Komórka jest kwadratowym obszarem o długości boku równej 250m, dzielącym sekcję na 16 mniejszych elementów.
  
Komórki zapisane są jedna za drugą, a każda z nich zaczyna się od:
+
{| class="wikitable"
 
+
! Rozmiar i typ danych
1. Centrum bounding boxa (3 liczby double)
+
! Opis
 
+
|-
2. Promienia bounding boxa (float, 4 bajty)
+
| 12 (3x float)
 
+
| Środek bounding boxa
3. Ilości nieprzezroczystych shape'ów w komórce (unsigned int, 4 bajty)
+
|-
 
+
| 4 (1x float)
Tutaj zapisane są dane shape'ów.
+
| Promień bounding boxa
 +
|-
 +
| 4 (1x unsigned int)
 +
| Ilość nieprzezroczystych geometrii w komórce
 +
|-
 +
| Zależny od rozmiaru danych geometrii
 +
| Dane geometryczne ([[Format SBT#Shape node|shape node]])
 +
|-
 +
| 4 (1x unsigned int)
 +
| Ilość przezroczystych geometrii w komórce
 +
|-
 +
| Zależny od rozmiaru danych geometrii
 +
| Dane geometryczne ([[Format SBT#Shape node|shape node]])
 +
|-
 +
| 4 (1x unsigned int)
 +
| Ilość geometrii linii w komórce
 +
|-
 +
| Zależny od rozmiaru danych geometrii
 +
| Dane geometryczne ([[Format SBT#Lines node|lines node]])
 +
|}
  
4. Ilości przezroczystych shape'ów w komórce (unsigned int, 4 bajty)
+
=== Dane geometryczne ===
 +
==== Shape node ====
 +
Geometria w postaci trójkątów terenu.
  
Tutaj zapisane są dane shape'ów.
+
{| class="wikitable"
 +
! Rozmiar i typ danych
 +
! Opis
 +
|-
 +
| zmienny (null-terminated string)
 +
| Nazwa obiektu
 +
|-
 +
| 12 (3x float)
 +
| Środek bounding boxa
 +
|-
 +
| 4 (1x float)
 +
| Promień bounding boxa
 +
|-
 +
| 8 (1x double)
 +
| Minimalna odległość renderowania
 +
|-
 +
| 8 (1x double)
 +
| Maksymalna odległość renderowania
 +
|-
 +
| 4 (1x bool)
 +
| Stan widoczności obiektu
 +
|-
 +
| 4 (1x bool)
 +
| Określa czy geometria jest przezroczysta.
 +
|-
 +
| zmienny (null-terminated string)
 +
| Nazwa materiału
 +
|-
 +
| 16 (4x float)
 +
| Składowa światła diffuse
 +
|-
 +
| 16 (4x float)
 +
| Składowa światła ambient
 +
|-
 +
| 16 (4x float)
 +
| Składowa światła specular
 +
|-
 +
| 12 (3x float)
 +
| Origin geometrii
 +
|-
 +
| 4 (1x unsigned int)
 +
| Ilość wierzchołków w geometrii
 +
|-
 +
| 44 (3x double, 5x float) * ilość wierzchołków
 +
| Dane wierzchołków. Kolejno pozycja, normal, mapowanie
 +
|}
  
5. Ilości lines w komórce (unsigned int, 4 bajty)
+
==== Lines node ====
 +
Geometria w postaci linii.
  
Tutaj zapisane są dane shape'ów
+
{| class="wikitable"
 +
! Rozmiar i typ danych
 +
! Opis
 +
|-
 +
| zmienny (null-terminated string)
 +
| Nazwa obiektu
 +
|-
 +
| 12 (3x float)
 +
| Środek bounding boxa
 +
|-
 +
| 4 (1x float)
 +
| Promień bounding boxa
 +
|-
 +
| 8 (1x double)
 +
| Minimalna odległość renderowania
 +
|-
 +
| 8 (1x double)
 +
| Maksymalna odległość renderowania
 +
|-
 +
| 4 (1x bool)
 +
| Stan widoczności obiektu
 +
|-
 +
| 4 (1x float)
 +
| Grubość linii
 +
|-
 +
| 16 (4x float)
 +
| Składowa światła diffuse
 +
|-
 +
| 16 (4x float)
 +
| Składowa światła ambient
 +
|-
 +
| 16 (4x float)
 +
| Składowa światła specular
 +
|-
 +
| 12 (3x float)
 +
| Origin linii
 +
|-
 +
| 4 (1x unsigned int)
 +
| Ilość wierzchołków w linii
 +
|-
 +
| 44 (3x double, 5x float) * ilość wierzchołków
 +
| Dane wierzchołków, kolejno pozycja, normal, mapowanie (znaczenie ma tylko pozycja)
 +
|}
  
=== Jednostka geometrii (shape node) ===
+
[[Kategoria:Scenerie]]
 +
[[Category:Formaty plików symulatora]]

Aktualna wersja na dzień 20:49, 9 paź 2022

Plik SBT (Scenery Binary Terrain) jest plikiem binarnym zawierającym dane terenu. Dane te są partycjonowane geograficznie, co w zamyśle ma umożliwić szybsze wczytywanie scenerii i jej dynamiczne ładowanie bez potrzeby wczytywania całej scenerii do pamięci, jak to ma miejsce w przypadku plików tekstowych.

Plik tworzony jest podczas wczytywania scenariusza. Wszystkie trójkąty terenu oraz linie z plików tekstowych (SCN, SCM, INC) są w ramach sekcji i komórek łączone w większe grupy siatek i w tej formie zapisywane do pliku SBT. Późniejsze ładowanie tego samego scenariusza będzie już używało danych z pliku SBT, a co za tym idzie, wczytywanie będzie dużo szybsze z powodu braku konieczności kosztownego łączenia siatek i umieszczania ich w sektorach.

Ponieważ nie istnieje sposób na rozpoznanie, które scenariusze korzystają z takiego samego terenu i otoczenia, plik SBT tworzony jest osobno dla każdego scenariusza.

Generowanie plików SBT można wyłączyć wpisem w eu07.ini

file.binary.terrain no

Format pliku

Na początku pliku znajduje się nagłówek pliku.

Rozmiar i typ danych Opis
4 (4x char) Nagłówek pliku - ciąg znaków "EU07"

Region

W obecnej wersji formatu występuje tylko jeden region. Region grupuje sekcje. W ramach jednego regionu mieści się 500x500 sekcji.

Rozmiar i typ danych Opis
3 (3x char) Nagłówek regionu - ciąg znaków "SBT"
4 (1x unsigned int) Numer wersji formatu (wersji pliku?). Aktualnie exe na stałe wpisuje liczbę 1.
4 (1x unsigned int) Liczba sekcji w regionie
Zależny od ilości i rozmiaru sekcji Dane sekcji

Sekcja (section)

Sekcje są podstawową jednostką podziału scenerii na fragmenty. Sekcja jest kwadratem o długości boku równej 1000m i jest podzielna na komórki.

Rozmiar i typ danych Opis
4 (1x unsigned int) Indeks sekcji
4 (1x unsigned int) Rozmiar sekcji w bajtach
12 (3x float) Środek bounding boxa
4 (1x float) Promień bounding boxa
4 (1x unsigned int) Ilość danych geometrycznych w sekcji
Zależny od rozmiaru danych geometrii Dane geometryczne (shape node)
Zależny od rozmiaru danych komórek Dane komórek

Komórka (cell)

Komórka jest kwadratowym obszarem o długości boku równej 250m, dzielącym sekcję na 16 mniejszych elementów.

Rozmiar i typ danych Opis
12 (3x float) Środek bounding boxa
4 (1x float) Promień bounding boxa
4 (1x unsigned int) Ilość nieprzezroczystych geometrii w komórce
Zależny od rozmiaru danych geometrii Dane geometryczne (shape node)
4 (1x unsigned int) Ilość przezroczystych geometrii w komórce
Zależny od rozmiaru danych geometrii Dane geometryczne (shape node)
4 (1x unsigned int) Ilość geometrii linii w komórce
Zależny od rozmiaru danych geometrii Dane geometryczne (lines node)

Dane geometryczne

Shape node

Geometria w postaci trójkątów terenu.

Rozmiar i typ danych Opis
zmienny (null-terminated string) Nazwa obiektu
12 (3x float) Środek bounding boxa
4 (1x float) Promień bounding boxa
8 (1x double) Minimalna odległość renderowania
8 (1x double) Maksymalna odległość renderowania
4 (1x bool) Stan widoczności obiektu
4 (1x bool) Określa czy geometria jest przezroczysta.
zmienny (null-terminated string) Nazwa materiału
16 (4x float) Składowa światła diffuse
16 (4x float) Składowa światła ambient
16 (4x float) Składowa światła specular
12 (3x float) Origin geometrii
4 (1x unsigned int) Ilość wierzchołków w geometrii
44 (3x double, 5x float) * ilość wierzchołków Dane wierzchołków. Kolejno pozycja, normal, mapowanie

Lines node

Geometria w postaci linii.

Rozmiar i typ danych Opis
zmienny (null-terminated string) Nazwa obiektu
12 (3x float) Środek bounding boxa
4 (1x float) Promień bounding boxa
8 (1x double) Minimalna odległość renderowania
8 (1x double) Maksymalna odległość renderowania
4 (1x bool) Stan widoczności obiektu
4 (1x float) Grubość linii
16 (4x float) Składowa światła diffuse
16 (4x float) Składowa światła ambient
16 (4x float) Składowa światła specular
12 (3x float) Origin linii
4 (1x unsigned int) Ilość wierzchołków w linii
44 (3x double, 5x float) * ilość wierzchołków Dane wierzchołków, kolejno pozycja, normal, mapowanie (znaczenie ma tylko pozycja)