Format T3D: Różnice pomiędzy wersjami
(→Mesh) |
(→Mesh) |
||
(Nie pokazano 149 wersji utworzonych przez 4 użytkowników) | |||
Linia 1: | Linia 1: | ||
− | Plik T3D jest | + | [[Category:Formaty plików symulatora]] |
− | + | Plik T3D jest [[Plik tekstowy|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 | + | == 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 | ||
+ | [...] | ||
− | = | + | {| class="wikitable" |
+ | ! 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 [[Emiter dymu|emiterem dymu]]. | |
− | + | |- | |
− | + | | '''Anim''' | |
+ | | Typ animacji submodelu. [[Format T3D#Typy animacji|(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 [[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''' | |
− | + | | Tryb renderowania siatki. | |
− | + | * '''true''' - renderowanie krawędzi | |
− | + | * '''false''' - renderowanie geometrii w normalny sposób | |
− | * | + | <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span> |
− | * ''' | + | |- |
− | + | | '''WireSize''' | |
+ | | Określa grubość krawędzi, gdy Wire = true. | ||
+ | <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span> | ||
+ | |- | ||
+ | | '''Opacity''' | ||
+ | | Określa sposób renderowania [[Przezroczystość|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ł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'''. | ||
− | + | 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. | ||
+ | |- | ||
+ | | '''Transform''' | ||
+ | | [https://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji 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 [[Emiter dymu|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. | ||
+ | <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]. | ||
+ | |||
+ | Definicja wierzchołka zawiera: | ||
+ | * współrzędne wierzchołka (XYZ) | ||
+ | * [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. | ||
+ | * 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 === | ||
+ | |||
+ | |||
+ | <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" | ||
+ | ! 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 [[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''' | ||
+ | | Definiuje kolor świecenia submodelu (3 liczby RGB z zakresu <0-255>) | ||
+ | |- | ||
+ | | '''NearAttenStart''' | ||
+ | | <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span> | ||
+ | |- | ||
+ | | '''NearAttenEnd''' | ||
+ | | <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span> | ||
+ | |- | ||
+ | | '''UseNearAtten''' | ||
+ | | Jedno ze słów kluczowych: | ||
+ | * '''false''' | ||
+ | * '''true''' | ||
+ | <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span> | ||
+ | |- | ||
+ | | '''FarAttenDecayType''' | ||
+ | | Typ zaniku natężenia światła | ||
+ | * '''0''' - brak zaniku | ||
+ | * '''1, 2''' - potęga 1/R? | ||
+ | |- | ||
+ | | '''FarDecayRadius''' | ||
+ | | <span style="color:red;font-weight:bold">Ta właściwość nie działa.</span> | ||
+ | |- | ||
+ | | '''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''' | ||
+ | | [https://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji Macierz transformacji] | ||
+ | |} | ||
+ | |||
+ | === 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" | ||
+ | ! 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 [[Emiter dymu|emiterem dymu]]. | ||
+ | |- | ||
+ | | '''Anim''' | ||
+ | | Typ animacji submodelu. [[Format T3D#Typy animacji|(Zobacz listę typów animacji)]] | ||
+ | |- | ||
+ | | '''Diffuse''' | ||
+ | | 3 liczby RGB z zakresu <0-255> | ||
+ | <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''' | ||
+ | | 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 | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! 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 == | ||
+ | {| class="wikitable" | ||
+ | ! Wartość | ||
+ | ! Znaczenie | ||
+ | ! Uwagi | ||
+ | |- | ||
+ | | '''false''' | ||
+ | | Brak animacji. | ||
+ | | | ||
+ | |- | ||
+ | | '''true''' | ||
+ | | Możliwość animowania za pomocą [[Obiekt_event|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 | ||
+ | |} |
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.
Spis treści
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:
|
Wire | Tryb renderowania siatki.
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
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:
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:
Ta właściwość nie działa. |
FarAttenDecayType | Typ zaniku natężenia światła
|
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:
|
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 |