Format T3D: Różnice pomiędzy wersjami

Z MaSzyna
Skocz do: nawigacja, szukaj
(Dostępne typy animacji)
(Mesh)
 
(Nie pokazano 64 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
 
[[Category:Formaty plików symulatora]]
 
[[Category:Formaty plików symulatora]]
Plik T3D jest formatem tekstowym, przechowującym informacje o modelach trójwymiarowych. Składa się z dowolnej ilości submodeli określonego typu. Można dołączyć do modelu inne modele za pomoca komendy '''include'''.
+
Plik T3D jest [[Plik tekstowy|plikiem tekstowym]], przechowującym informacje o modelach trójwymiarowych.
== Typy submodeli ==
 
* '''Mesh''' - submodel składający się z trójkątów, może być pokryty materiałem.
 
* '''FreeSpotLight''' - Obiekt świecący kierunkowo.
 
* '''Stars''' - zbiór punktów świecących, z czego każdy z nich może mieć inną barwę.
 
  
== Składnia wpisu submodelu ==
+
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:
 +
<span style="color:gray;font-style:italic">//---------------------------------------------------------------------------------</span>
 +
<span style="color:tomato;font-weight:bold">Parent:</span> domek
 +
<span style="color:tomato;font-weight:bold">Type:</span> Mesh
 +
<span style="color:tomato;font-weight:bold">Name:</span> dach
 +
<span style="color:tomato;font-weight:bold">Anim:</span> false
 +
<span style="color:tomato;font-weight:bold">Ambient:</span> 255 255 255
 +
<span style="color:tomato;font-weight:bold">Diffuse:</span> 255 255 255
 +
<span style="color:tomato;font-weight:bold">Specular:</span> 3 3 3
 +
<span style="color:tomato;font-weight:bold">SelfIllum:</span> false
 +
<span style="color:tomato;font-weight:bold">Wire:</span> false
 +
<span style="color:tomato;font-weight:bold">WireSize:</span> 1
 +
<span style="color:tomato;font-weight:bold">Opacity:</span> 1
 +
<span style="color:tomato;font-weight:bold">Map:</span> roof/papa
 +
<span style="color:tomato;font-weight:bold">MaxDistance:</span> 2500
 +
<span style="color:tomato;font-weight:bold">MinDistance:</span> 0
 +
<span style="color:tomato;font-weight:bold">Transform:</span>
 +
1 0 0 0
 +
0 1 0 0
 +
0 0 1 0
 +
0 0 0 1
 +
<span style="color:tomato;font-weight:bold">NumVerts:</span> 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
 +
[...]
  
=== Wspólne właściwości dla wszystkich typów===
 
 
{| class="wikitable"
 
{| class="wikitable"
|+ Wspólne właściwości dla wszystkich typów submodeli
 
 
! Nazwa właściwości
 
! Nazwa właściwości
 
! Znaczenie
 
! Znaczenie
! Typ wartości
 
! Uwagi
 
 
|-
 
|-
 
| '''Parent'''
 
| '''Parent'''
| Przypisuje submodel nadrzędny (rodzica).
+
| Nazwa submodelu nadrzędnego w hierarchii (rodzica) lub '''none''' jeśli brak takowego.  
| Nazwa submodelu
+
 
|
+
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'''
 
| '''Type'''
| Definiuje typ submodelu.
+
| Typ submodelu. W tym przypadku zawsze '''Mesh'''.
| Jedno ze słów kluczowych:
 
* Mesh,
 
* FreeSpotLight,
 
* Stars
 
|
 
 
|-
 
|-
 
| '''Name'''
 
| '''Name'''
| Unikalna nazwa submodelu
+
| Nazwa submodelu. Powinna być niepowtarzalna w obrębie jednego pliku, chyba że submodel jest [[Emiter dymu|emiterem dymu]].
| Tekst
 
| Pewne nazwy są zarezerwowane i służą do definiowania dodatkowych funkcjonalności w submodelu. Zobacz listę nazw specjalnych.
 
 
|-
 
|-
 
| '''Anim'''
 
| '''Anim'''
| Typ animacji submodelu.
+
| Typ animacji submodelu. [[Format T3D#Typy animacji|(Zobacz listę typów animacji)]]
| Tekst
 
| Zobacz listę dostępnych typów animacji.
 
|-
 
| '''Selfillum'''
 
| Określa sposób emisji światła przez obiekt
 
| Jedno ze słów kluczowych:
 
* true
 
* false
 
lub liczba z zakresu <-1;2>
 
|'''liczba''' - określa poziom oświetlenia scenerii, poniżej którego submodel ma emitować światło
 
 
 
'''false''' - brak emisji światła. Tej wartości odpowiada wartość liczbowa -1.
 
 
 
'''true''' - emisja światła zawsze, niezależnie od poziomu oświetlenia scenerii. Tej wartości odpowiada wartość liczbowa 2.
 
 
 
|-
 
| '''MaxDistance'''
 
| Określa największą odległość, z jakiej submodel jest widoczny.
 
| Liczba [m]
 
| Aby obiekt był widoczny zawsze, niezależnie od odległości, należy podać wartość '''-1'''
 
|-
 
| '''MinDistance'''
 
| Określa minimalną odległość, z jakiej submodel jest widoczny
 
| Liczba [m]
 
|
 
|-
 
| '''Transform'''
 
| Macierz transformacji submodelu
 
| Liczby
 
|
 
|}
 
 
 
=== Właściwości specyficzne dla typu Mesh ===
 
 
 
{| class="wikitable"
 
! Nazwa właściwości
 
! Znaczenie
 
! Typ wartości
 
! Uwagi
 
 
|-
 
|-
 
| '''Ambient'''
 
| '''Ambient'''
 
| Określa jasność submodelu.
 
| Określa jasność submodelu.
| 3 liczby RGB z zakresu <0-255>
+
3 liczby RGB z zakresu <0-255>
|
 
 
|-  
 
|-  
 
| '''Diffuse'''
 
| '''Diffuse'''
| Określa kolor świecenia submodelu.
+
| Określa kolor submodelu. Jeśli nie przypisano materiału, to podanym kolorem będzie jednolicie zabarwiony cały submodel. Jeśli przypisano materiał, to działanie tego parametru różni się w zależności od shadera.
| 3 liczby RGB z zakresu <0-255>
+
3 liczby RGB z zakresu <0-255>
|
 
 
|-
 
|-
 
| '''Specular'''
 
| '''Specular'''
 
| Określa poziom błyszczenia submodelu.
 
| Określa poziom błyszczenia submodelu.
| 3 liczby RGB z zakresu <0-255>
+
3 liczby RGB z zakresu <0-255>
|
 
 
|-  
 
|-  
 +
| '''Selfillum'''
 +
| Określa próg [[Poziom oświetlenia|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'''
 
| '''Wire'''
| Określa, czy zamiast bryły należy rysować siatkę krawędzi
+
| Tryb renderowania siatki.
| Jedno ze słów kluczowych:
+
* '''true''' - renderowanie krawędzi
* true
+
* '''false''' - renderowanie geometrii w normalny sposób
* false
+
<span style="color:red;font-weight:bold">Ta właściwość nie działa.</span>
| Brak funkcjonalności w exe
 
 
|-  
 
|-  
 
| '''WireSize'''
 
| '''WireSize'''
| Określa grubość krawędzi
+
| Określa grubość krawędzi, gdy Wire = true.
| Liczba [cm]
+
<span style="color:red;font-weight:bold">Ta właściwość nie działa.</span>
| Brak funkcjonalności w exe
 
 
|-  
 
|-  
 
| '''Opacity'''
 
| '''Opacity'''
| Określa sposób renderowania przezroczystości submodelu
+
| Określa sposób renderowania [[Przezroczystość|przezroczystości]]
| Liczba
+
* '''1''' - tryb nieprzezroczysty
| '''0''' - renderowanie w fazie przezroczystych; Alfa blend
+
* '''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>.
'''1''' - renderowanie w fazie nieprzezroczystych; Alfa test
 
 
|-
 
|-
 
| '''Map'''
 
| '''Map'''
| Materiał submodelu.
+
| Ścieżka do [[Materiały_-_Pliki_.mat|materiału]] (bez rozszerzenia).  
| Ścieżka do [[Materiały_-_Pliki_.mat|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'''.
| Pierwszy przebieg wyszukiwania w katalogu równorzędnym modelowi, drugi w roocie textures.
+
 
Można podać tekstury wymienne, podstawiane parametrem w [[Obiekt_node::model|node model]]/[[Obiekt_node::dynamic|dynamic]]. Wtedy dajemy wartość replacableskin lub jeśli model używa kilku tekstur wymiennych, indeks tekstury poprzedzony minusem (-1÷-4)
+
Obsługiwane są także opcjonalne [[Materiały - Pliki .mat#Cechy_tekstury|cechy tekstury]].
  
 +
Tekstury wymienne przypisywane są submodelowi za pomocą wpisów [[Obiekt_node::model|node::model]]/[[Obiekt_node::dynamic|dynamic]] lub [[Obiekt_event#texture|event::texture]].
 +
 +
W przypadku wartości '''none''' submodel zostanie wyrenderowany przy użyciu shadera [[Mat colored|colored]]. Kolor jest pobierany ze składowej ''Diffuse'' podniesionej do 2.2 potęgi.
 +
|-
 +
| '''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.
 
|-
 
|-
| '''NumVerts'''
+
| '''Transform'''
| Suma wszystkich wierzchołków w definicjach trójkątów
+
| [https://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji Macierz transformacji]
| Liczba
 
|
 
 
|}
 
|}
  
 +
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 [[Emiter dymu|emiterem dymu]].
 +
 +
Istnieją dwa główne sposoby definiowania geometrii:
 +
* trójkąty (nieindeksowana)
 +
* chmura punktów (indeksowana)
  
Pod definicją właściwości NumVerts znajdują się definicje trójkątów (o ile obiekt nie jest tzw. ''bananem''). Ich ilość musi być równa ''NumVerts'' / 3. Definicje trójkątów oddzielone są od siebie pustą linią.
+
==== Geometria nieindeksowana ====
 +
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.
 +
<span style="color:tomato;font-weight:bold">NumVerts:</span> 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.35772 -0.61961 -0.69866 0.09669 0.26971
 +
-2.95255 4.03197 0 0.35772 -0.61961 -0.69866 0.08979 0.72897
 +
-2.93523 4.03197 0 0.35772 -0.61961 -0.69866 0.09669 0.72897
  
 +
Każda definicja trójkąta zaczyna się od liczby określającej [https://en.wikipedia.org/wiki/Smoothing_group grupę wygładzania].
  
Wzór definicji trójkąta:
+
Definicja wierzchołka zawiera:
    ''maska_wygładzania''
+
* współrzędne wierzchołka (XYZ)
    x y z u v           
+
* [https://pl.wikipedia.org/wiki/Wektor_normalny 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.
    x y z u v
+
* współrzędne mapowania tekstury (UV)
    x y z u v
 
  
{| class="wikitable"
+
==== Geometria indeksowana ====
! Nazwa właściwości
+
Opcjonalną formą zapisu geometrii jest użycie chmury punków oraz listy indeksów. Chmura punktów definiuje listę unikatowych wierzchołków.  
! Znaczenie
+
Lista indeksów określa, z których wierzchołków mają być złożone trójkąty.
! 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]
 
| {{Szablon:Info_o_układzie_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
 
     NumIndices: ilosc_indeksow
 
       indeks1 indeks2 indeks3 // etc
 
       indeks1 indeks2 indeks3 // etc
Linia 169: Linia 149:
 
       Px Py Pz Nx Ny Nz Ux Uy Tx Ty Tz Tw // etc
 
       Px Py Pz Nx Ny Nz Ux Uy Tx Ty Tz Tw // etc
  
=== Właściwości specyficzne dla typu FreeSpotLight ===
+
=== FreeSpotLight ===
 +
 
 +
 
 +
<span style="color:gray;font-style:italic">//---------------------------------------------------------------------------------</span>
 +
<span style="color:tomato;font-weight:bold">Parent:</span> rodzic
 +
<span style="color:tomato;font-weight:bold">Type:</span> FreeSpotLight
 +
<span style="color:tomato;font-weight:bold">Name:</span> swiatlo
 +
<span style="color:tomato;font-weight:bold">Anim:</span> false
 +
<span style="color:tomato;font-weight:bold">Diffuse:</span> 214 210 111
 +
<span style="color:tomato;font-weight:bold">SelfIllum:</span> 1
 +
<span style="color:tomato;font-weight:bold">NearAttenStart:</span> 40
 +
<span style="color:tomato;font-weight:bold">NearAttenEnd:</span> 0
 +
<span style="color:tomato;font-weight:bold">UseNearAtten:</span> false
 +
<span style="color:tomato;font-weight:bold">FarAttenDecayType:</span> 1
 +
<span style="color:tomato;font-weight:bold">FarDecayRadius:</span> 25
 +
<span style="color:tomato;font-weight:bold">FalloffAngle:</span> 228.1917
 +
<span style="color:tomato;font-weight:bold">HotspotAngle:</span> 150.9
 +
<span style="color:tomato;font-weight:bold">MaxDistance:</span> -1
 +
<span style="color:tomato;font-weight:bold">MinDistance:</span> 0
 +
<span style="color:tomato;font-weight:bold">Transform:</span>
 +
0.37858 0 0.92557 0
 +
0 1 0 0
 +
-0.92557 0 0.37858 0
 +
3.6259 0.35966 5.18991 1
 +
 
 
{| class="wikitable"
 
{| class="wikitable"
 
! Nazwa właściwości
 
! Nazwa właściwości
 
! Znaczenie
 
! Znaczenie
! Typ wartości
+
|-
! Uwagi
+
| '''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 '''FreeSpotLight'''.
 +
|-
 +
| '''Name'''
 +
| Nazwa submodelu. Powinna być niepowtarzalna w obrębie jednego pliku, chyba że submodel jest [[Emiter dymu|emiterem dymu]].
 +
|-
 +
| '''Anim'''
 +
| Typ animacji submodelu. [[Format T3D#Typy animacji|(Zobacz listę typów animacji)]]
 +
|-
 +
| '''Diffuse'''
 +
| Określa kolor świecenia submodelu.
 +
3 liczby RGB z zakresu <0-255>
 +
|-
 +
| '''Selfillum'''
 +
| Określa próg [[Poziom oświetlenia|poziomu oświetlenia scenerii]], poniż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)
 +
 
 +
Niezależnie od podanej wartości widoczny jest punkt świetlny, ale gdy aktywna jest emisja światła, to wyświetlana jest również flara.
 
|-
 
|-
 
| '''Diffuse'''
 
| '''Diffuse'''
| Definiuje kolor świecenia submodelu
+
| Definiuje kolor świecenia submodelu (3 liczby RGB z zakresu <0-255>)
| 3 liczby RGB z zakresu <0-255>
 
|
 
 
|-
 
|-
 
| '''NearAttenStart'''
 
| '''NearAttenStart'''
|  
+
| <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span>
| Liczba
 
| Brak funkcjonalności w exe
 
 
|-
 
|-
 
| '''NearAttenEnd'''
 
| '''NearAttenEnd'''
|  
+
| <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span>
| Liczba
 
| Brak funkcjonalności w exe
 
 
|-
 
|-
 
| '''UseNearAtten'''
 
| '''UseNearAtten'''
|
 
 
| Jedno ze słów kluczowych:
 
| Jedno ze słów kluczowych:
 
* '''false'''
 
* '''false'''
 
* '''true'''
 
* '''true'''
| Brak funkcjonalności w exe
+
<span style="color:red;font-weight:bold">Ta właściwość nie działa.</span>
 
|-
 
|-
 
| '''FarAttenDecayType'''
 
| '''FarAttenDecayType'''
| Typ zaniku natężenia światła
+
| Typ zaniku natężenia światła   
| Liczba
 
|  
 
 
* '''0''' - brak zaniku
 
* '''0''' - brak zaniku
 
* '''1, 2''' - potęga 1/R?
 
* '''1, 2''' - potęga 1/R?
 
|-
 
|-
 
| '''FarDecayRadius'''
 
| '''FarDecayRadius'''
|  
+
| <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span>
| Liczba
 
| Brak funkcjonalności w exe
 
 
|-
 
|-
 
| '''FalloffAngle'''
 
| '''FalloffAngle'''
 
| Określa kąt wygaszenia światła.
 
| Określa kąt wygaszenia światła.
| Liczba [deg] w zakresie (1;180> lub cosinus połowy tego kąta
+
Liczba [deg] w zakresie (1;180> lub cosinus połowy tego kąta
|
 
 
|-
 
|-
 
| '''HotspotAngle'''
 
| '''HotspotAngle'''
 
| Określa kąt pełnej jasności światła.
 
| Określa kąt pełnej jasności światła.
| Liczba [deg] w zakresie (1;180> lub cosinus połowy tego kąta
+
Liczba [deg] w zakresie (1;180> lub cosinus połowy tego kąta
|
+
|-
 +
| '''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'''
 +
| [https://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji Macierz transformacji]
 
|}
 
|}
  
=== Właściwości specyficzne dla typu Stars ===
+
=== Stars ===
 +
'''Stars''' to zbiór świecących punktów. Może być użyty np. jako oświetlenie przeszkodowe kominów.
 +
 
 +
<span style="color:gray;font-style:italic">//---------------------------------------------------------------------------------</span>
 +
<span style="color:tomato;font-weight:bold">Parent:</span> none
 +
<span style="color:tomato;font-weight:bold">Type:</span> Stars
 +
<span style="color:tomato;font-weight:bold">Name:</span> lampki
 +
<span style="color:tomato;font-weight:bold">Anim:</span> true
 +
<span style="color:tomato;font-weight:bold">Diffuse:</span> 255.0 255.0 255.0
 +
<span style="color:tomato;font-weight:bold">SelfIllum:</span> 0.24
 +
<span style="color:tomato;font-weight:bold">MaxDistance:</span> -1
 +
<span style="color:tomato;font-weight:bold">MinDistance:</span> 0
 +
<span style="color:tomato;font-weight:bold">Transform:</span>
 +
          1.0 0.0 0.0 0.0
 +
          0.0 1.0 0.0 0.0
 +
          0.0 0.0 1.0 0.0
 +
          0.0 0.0 0.0 1.0
 +
<span style="color:tomato;font-weight:bold">NumVerts:</span> 4
 +
1
 +
0 -4 57 14847 0
 +
0 4 57  14847 0
 +
-4 0 57 14847 0
 +
1
 +
4 0 57  14847 0
 +
 
 
{| class="wikitable"
 
{| class="wikitable"
 
! Nazwa właściwości
 
! Nazwa właściwości
 
! Znaczenie
 
! Znaczenie
! Typ wartości
+
|-
! Uwagi
+
| '''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 '''Stars'''.
 +
|-
 +
| '''Name'''
 +
| Nazwa submodelu. Powinna być niepowtarzalna w obrębie jednego pliku, chyba że submodel jest [[Emiter dymu|emiterem dymu]].
 +
|-
 +
| '''Anim'''
 +
| Typ animacji submodelu. [[Format T3D#Typy animacji|(Zobacz listę typów animacji)]]
 
|-
 
|-
 
| '''Diffuse'''
 
| '''Diffuse'''
| ?
 
 
| 3 liczby RGB z zakresu <0-255>
 
| 3 liczby RGB z zakresu <0-255>
| Parametr nieznaczący w kontekście tego submodelu
+
<span style="color:red;font-weight:bold">Ta właściwość nie działa.</span>
 +
|-
 +
| '''Selfillum'''
 +
| Określa próg [[Poziom oświetlenia|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)
 +
|-
 +
| '''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'''
 +
| [https://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji Macierz transformacji]
 
|-
 
|-
 
| '''NumVerts'''
 
| '''NumVerts'''
| Określa ilość punktów świetlnych zawartych w tym submodelu
+
| 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.
+
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
 
     1
 
     x y z kolor 0
 
     x y z kolor 0
Linia 245: Linia 319:
  
 
{| class="wikitable"
 
{| class="wikitable"
! Nazwa właściwości
+
! Token
 
! Znaczenie
 
! Znaczenie
! Typ wartości
 
! Uwagi
 
 
|-
 
|-
 
| '''1, 0'''
 
| '''1, 0'''
| Tokeny ignorowane.
+
| Tokeny ignorowane. Zwyczajowo zawsze podaje się '''1''' i '''0'''.
| Liczby
 
| Zwyczajowo zawsze podaje się '''1''' i '''0'''.
 
 
|-
 
|-
 
| '''x, y, z'''
 
| '''x, y, z'''
 
| Współrzędne punktu w przestrzeni
 
| Współrzędne punktu w przestrzeni
| 3 liczby [m]
 
|
 
 
|-
 
|-
 
| '''kolor'''
 
| '''kolor'''
| Kolor świecenia punktu
+
| Kolor świecenia punktu. Zapisana dziesiętnie liczba szesnastkowa opisująca kolor świecenia w formacie BGR.
| Liczba
 
| Zapisana dziesiętnie liczba szesnastkowa opisująca kolor świecenia BGR.
 
 
|}
 
|}
  
== Nazwy specjalne ==
+
== Typy animacji ==
== Dostępne typy animacji ==
 
 
{| class="wikitable"
 
{| class="wikitable"
 
! Wartość
 
! Wartość
Linia 278: Linia 343:
 
|-  
 
|-  
 
| '''true'''
 
| '''true'''
| Możliwość animowania za pomocą [[Obiekt_event|eventów]]
+
| Możliwość animowania za pomocą [[Obiekt_event|eventów]].
 
|  
 
|  
 
|-
 
|-
Linia 296: Linia 361:
 
| Animacja zegara cyfrowego
 
| Animacja zegara cyfrowego
 
|
 
|
|-
 
| '''digital'''
 
| Animacja z przeskokiem co 36°
 
| Liczniki mechaniczne zbudowane są z submodeli potomnych, które obracane są o wielokrotność kąta 36°, zależnie od cyfry na wskazanej pozycji. Pozycję określa pierwszy znak nazwy submodelu — musi być cyfrą, inaczej submodel nie będzie animowany. Pozwala to zbudować licznik dziesięciocyfrowy (dla zegarów działają tylko pozycje 0..5). Licznik może obsługiwać dowolną liczbę animowanych submodeli (np. zegar może być dwustronny), submodele z tą samą cyfrą na początku będą obracane równolegle
 
 
|-
 
|-
 
| '''seconds'''
 
| '''seconds'''

Aktualna wersja na dzień 18:13, 13 wrz 2024

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 submodelu. Jeśli nie przypisano materiału, to podanym kolorem będzie jednolicie zabarwiony cały submodel. Jeśli przypisano materiał, to działanie tego parametru różni się w zależności od shadera.

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.

Obsługiwane są także opcjonalne cechy tekstury.

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

W przypadku wartości none submodel zostanie wyrenderowany przy użyciu shadera colored. Kolor jest pobierany ze składowej Diffuse podniesionej do 2.2 potęgi.

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)

Geometria nieindeksowana

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.35772 -0.61961 -0.69866 0.09669 0.26971 
-2.95255 4.03197 0 0.35772 -0.61961 -0.69866 0.08979 0.72897 
-2.93523 4.03197 0 0.35772 -0.61961 -0.69866 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 (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 tekstury (UV)

Geometria indeksowana

Opcjonalną formą zapisu geometrii jest użycie chmury punków oraz listy indeksów. Chmura punktów definiuje listę unikatowych wierzchołków. Lista indeksów określa, z których wierzchołków mają być złożone trójkąty.

    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: rodzic
Type: FreeSpotLight
Name: swiatlo
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
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 FreeSpotLight.
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)
Diffuse Określa kolor świecenia submodelu.

3 liczby RGB z zakresu <0-255>

Selfillum Określa próg poziomu oświetlenia scenerii, poniż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)

Niezależnie od podanej wartości widoczny jest punkt świetlny, ale gdy aktywna jest emisja światła, to wyświetlana jest również flara.

Diffuse Definiuje kolor świecenia submodelu (3 liczby RGB z zakresu <0-255>)
NearAttenStart Ta właściwość nie działa.
NearAttenEnd Ta właściwość nie działa.
UseNearAtten Jedno ze słów kluczowych:
  • false
  • true

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

FarAttenDecayType Typ zaniku natężenia światła
  • 0 - brak zaniku
  • 1, 2 - potęga 1/R?
FarDecayRadius Ta właściwość nie działa.
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

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

Stars

Stars to zbiór świecących punktów. Może być użyty np. jako oświetlenie przeszkodowe kominów.

//---------------------------------------------------------------------------------
Parent: none
Type: Stars
Name: lampki
Anim: true
Diffuse: 255.0 255.0 255.0
SelfIllum: 0.24
MaxDistance: -1
MinDistance: 0
Transform: 
          1.0 0.0 0.0 0.0
          0.0 1.0 0.0 0.0
          0.0 0.0 1.0 0.0
          0.0 0.0 0.0 1.0
NumVerts: 4
1
0 -4 57 14847 0
0 4 57  14847 0
-4 0 57 14847 0
1
4 0 57  14847 0
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 Stars.
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)
Diffuse 3 liczby RGB z zakresu <0-255>

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

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)
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
NumVerts Ilość punktów świetlnych zawartych w tym submodelu

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
Token Znaczenie
1, 0 Tokeny ignorowane. Zwyczajowo zawsze podaje się 1 i 0.
x, y, z Współrzędne punktu w przestrzeni
kolor Kolor świecenia punktu. Zapisana dziesiętnie liczba szesnastkowa opisująca kolor świecenia w formacie 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