Format T3D

Z MaSzyna
Wersja z dnia 18:01, 20 sty 2023 autorstwa Krzysiuup (dyskusja | edycje) (Składnia definicji submodeli)
Skocz do: nawigacja, szukaj

Plik T3D jest plikiem tekstowym, przechowującym informacje o modelach trójwymiarowych.

Model składa się submodeli złożonych w hierarchiczną strukturę w relacji rodzic-dziecko.

Składnia definicji submodeli

Przyjęło się, że definicja każdego submodelu poprzedzona jest komentarzem liniowym złożonym z 81 znaków minus (-). Umożliwia to wizualne oddzielenie definicji w pliku tekstowym i jest używane również przez style edytorów tekstowych do zawijania bloków definicji.

Mesh

Mesh to siatka wielokątów pokryta materiałem.

Przykładowa definicja:

//---------------------------------------------------------------------------------
Parent: domek
Type: Mesh
Name: dach
Anim: false
Ambient: 255 255 255
Diffuse: 255 255 255
Specular: 3 3 3
SelfIllum: false
Wire: false
WireSize: 1
Opacity: 1
Map: roof/papa
MaxDistance: 2500
MinDistance: 0
Transform:
	 1 0 0 0
	 0 1 0 0
	 0 0 1 0
	 0 0 0 1
NumVerts: 3879
0
4.85 -1.0992 9.7 0.43468 0.29718
4.85 11.09921 9.9 0.56421 0.29506
4.85 11.09921 9.7 0.56421 0.29732
[...]
Nazwa właściwości Znaczenie
Parent Nazwa submodelu nadrzędnego w hierarchii (rodzica) lub none jeśli brak takowego.

Submodel nadrzędny (rodzic) musi wystąpić przed definicją submodelu podrzędnego (dziecka), w przeciwnym wypadku dziecko będzie umieszczone poza hierarchią (sytuacja jak przy podaniu none).

Type Typ submodelu. W tym przypadku zawsze Mesh.
Name Nazwa submodelu. Powinna być niepowtarzalna w obrębie jednego pliku, chyba że submodel jest emiterem dymu.
Anim Typ animacji submodelu. (Zobacz listę typów animacji)
Ambient Określa jasność submodelu.

3 liczby RGB z zakresu <0-255>

Diffuse Określa kolor świecenia submodelu.

3 liczby RGB z zakresu <0-255>

Specular Określa poziom błyszczenia submodelu.

3 liczby RGB z zakresu <0-255>

Selfillum Określa próg poziomu oświetlenia scenerii, powyżej którego submodel ma emitować światło.

Jest to liczba z zakresu <-1;2>, ale można również podać słowa kluczowe:

  • true - odpowiada wartości 2 (emisja światła przez cały czas)
  • false - odpowiada wartości -1 (brak emisji światła)
Wire Tryb renderowania siatki.
  • true - renderowanie krawędzi
  • false - renderowanie geometrii w normalny sposób

Ta właściwość nie działa.

WireSize Określa grubość krawędzi, gdy Wire = true.

Ta właściwość nie działa.

Opacity Określa sposób renderowania przezroczystości
  • 1 - tryb nieprzezroczysty
  • mniej niż 1 - tryb półprzezroczysty

Zdarza się, że podane wartości są w zakresie <0;100>. Wówczas zakres ten jest skalowany do przedziału <0;1>.

Map Ścieżka do materiału (bez rozszerzenia).

Można podać indeks tekstury wymiennej - akceptowane są wartości (-1, -2, -3, -4). Odpowiednikiem wartości -1 jest słowo kluczowe replacableskin.

Tekstury wymienne przypisywane są submodelowi za pomocą wpisów node::model/dynamic lub event::texture.

MaxDistance Określa największą odległość, z jakiej submodel jest widoczny. Aby obiekt był widoczny zawsze, należy podać wartość -1
MinDistance Określa minimalną odległość, z jakiej submodel jest widoczny.
Transform Macierz transformacji

Po zawartych w powyższej tabeli właściwościach zwykle występuje definicja geometrii. Gdy jej nie ma, to znaczy, że mamy do czynienia z submodelem służącym tylko i wyłącznie do grupowania hierarchii (tzw. bananem) lub emiterem dymu.

Istnieją dwa główne sposoby definiowania geometrii:

  • trójkąty (nieindeksowana)
  • chmura punktów (indeksowana)

Definicja geometrii nieindeksowanej

Nieindeksowany zapis geometrii polega na zdefiniowaniu unikatowych współrzędnych wierzchołków dla każdego trójkąta. Łączną ilość wszystkich wierzchołków określa właściwość NumVerts.

Przykład zapisu nieindeksowanego.

NumVerts: 6
0 
-2.94389 4.04697 0.9983 0.08979 0.26971 
-2.93523 4.03197 0 0.09669 0.72897 
-2.94389 4.04697 0 0.08979 0.72897 

-1 
-2.93523 4.03197 0.9983 0.09669 0.26971 
-2.95255 4.03197 0 0.08979 0.72897 
-2.93523 4.03197 0 0.09669 0.72897 

Każda definicja trójkąta zaczyna się od liczby określającej grupę wygładzania.

Definicja wierzchołka zawiera:

  • współrzędne wierzchołka w przestrzeni 3D (XYZ)
  • wektor normalny (IJK) - tylko wtedy, gdy grupa wygładzania ma wartość -1. W przeciwnym wypadku współrzędnych tych nie podaje się, a wektor normalny zostanie obliczony automatycznie.
  • współrzędne mapowania (UV) w przestrzeni 2D
Nazwa właściwości Znaczenie Typ wartości Uwagi
maska_wygładzania Zapisana dziesiętnie maska bitowa określająca wygładzenie trójkąta. Liczba Jeśli w jednym punkcie spotykają się wierzchołki wielu trójkątów, to jeśli mają ustawione wspólne bity w masce, to wektor normalny zostanie wyliczony jako średnia, co da efekt zaokrąglenia w tym wierzchołku.
x, y, z Współrzędne wierzchołka w przestrzeni 3 liczby [m] Symulator korzysta z prawoskrętnego układu współrzędnych!
u, v Współrzędnie wierzchołka w układzie UV 2 liczby

Między współrzędnymi XYZ i UV mogą znajdować się współrzędne IJK wektora normalnego. Maska wygładzania przyjmuje wtedy wartość -1:

    -1
    x y z i j k u v             
    x y z i j k u v
    x y z i j k u v

Opcjonalną formą zapisu geometrii jest użycie chmury punków oraz listy indeksów. Chmura punktów definiuje wierzchołki o unikatowych właściwościach. W liście indeksów każde kolejne 3 liczby określają, których wierzchołków użyć do stworzenia trójkąta.

    NumIndices: ilosc_indeksow
     indeks1 indeks2 indeks3 // etc
    NumVerts: ilosc_wierzcholkow
     Px Py Pz Nx Ny Nz Ux Uy Tx Ty Tz Tw // pozycja, wektor normalny, koordynaty UV, tangent
     Px Py Pz Nx Ny Nz Ux Uy Tx Ty Tz Tw // etc

FreeSpotLight

//---------------------------------------------------------------------------------
Parent: light_on00
Type: FreeSpotLight
Name: Spot
Anim: false
Diffuse: 214 210 111
SelfIllum: 1
NearAttenStart: 40
NearAttenEnd: 0
UseNearAtten: false
FarAttenDecayType: 1
FarDecayRadius: 25
FalloffAngle: 228.1917
HotspotAngle: 150.9
MaxDistance: -1
MinDistance: 0
Transform: 
	0.37858 0 0.92557 0
	0 1 0 0
	-0.92557 0 0.37858 0
	3.6259 0.35966 5.18991 1
Nazwa właściwości Znaczenie Typ wartości Uwagi
Diffuse Definiuje kolor świecenia submodelu 3 liczby RGB z zakresu <0-255>
NearAttenStart Liczba Brak funkcjonalności w exe
NearAttenEnd Liczba Brak funkcjonalności w exe
UseNearAtten Jedno ze słów kluczowych:
  • false
  • true
Brak funkcjonalności w exe
FarAttenDecayType Typ zaniku natężenia światła Liczba
  • 0 - brak zaniku
  • 1, 2 - potęga 1/R?
FarDecayRadius Liczba Brak funkcjonalności w exe
FalloffAngle Określa kąt wygaszenia światła. Liczba [deg] w zakresie (1;180> lub cosinus połowy tego kąta
HotspotAngle Określa kąt pełnej jasności światła. Liczba [deg] w zakresie (1;180> lub cosinus połowy tego kąta

Stars

Nazwa właściwości Znaczenie Typ wartości Uwagi
Diffuse  ? 3 liczby RGB z zakresu <0-255> Parametr nieznaczący w kontekście tego submodelu
NumVerts Określa ilość punktów świetlnych zawartych w tym submodelu Liczba

Pod definicją właściwości NumVerts muszą znaleźć się definicje grup punktów świetlnych. W jednej grupie mogą znaleźć się maksymalnie 3 punkty świetlne.

    1
    x y z kolor 0
    x y z kolor 0
    x y z kolor 0
Nazwa właściwości Znaczenie Typ wartości Uwagi
1, 0 Tokeny ignorowane. Liczby Zwyczajowo zawsze podaje się 1 i 0.
x, y, z Współrzędne punktu w przestrzeni 3 liczby [m]
kolor Kolor świecenia punktu Liczba Zapisana dziesiętnie liczba szesnastkowa opisująca kolor świecenia BGR.

Typy animacji

Wartość Znaczenie Uwagi
false Brak animacji.
true Możliwość animowania za pomocą eventów.
sky Animacja nocnego nieba
wind Kołysanie się obiektu pod wpływem wiatru.
billboard Obracanie się obiektu w kierunku kamery.
digiclk Animacja zegara cyfrowego
seconds Sekundy płynnie (60s/360°, pełny obrót w minutę)
seconds_jump Sekundy z przeskokiem co 6°
minutes Minuty płynnie (1h/360°, pełny obrót w godzinę)
minutes_jump Minuty z przeskokiem co 6°
hours Godziny płynnie (12h/360°)
hours_jump Godziny z przeskokiem co 30°
hours24 Godziny płynnie (24h/360°)
hours24_jump Godziny z przeskokiem co 15°
ik IK: zadający brak funkcjonalności w exe
ik11 IK: kierunkowany brak funkcjonalności w exe
ik21 IK: kierunkowany brak funkcjonalności w exe
ik22 IK: kierunkowany brak funkcjonalności w exe