Materiały - Pliki .mat: Różnice pomiędzy wersjami
(→Opis kluczy bloków warunkowych) |
(→Nowy sposób) |
||
(Nie pokazano 78 wersji utworzonych przez 6 użytkowników) | |||
Linia 1: | Linia 1: | ||
− | Plik .mat jest definicją materiału, czyli [[Shader|shadera]] oraz przypiętych do niego tekstur i parametrów. | + | Plik .mat jest [[Plik_tekstowy|plikiem tekstowym]] z definicją materiału, czyli [[Shader|shadera]] oraz przypiętych do niego tekstur i parametrów. |
Posiada prostą składnię klucz: wartość oraz warunkowe bloki wybierane w zależności od [[Plik konfiguracyjny EU07.INI|ustawień symulacji]]. | Posiada prostą składnię klucz: wartość oraz warunkowe bloki wybierane w zależności od [[Plik konfiguracyjny EU07.INI|ustawień symulacji]]. | ||
− | === Opis kluczy === | + | === Opis kluczy podstawowych === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Linia 13: | Linia 13: | ||
| Ścieżka do pliku [[Shader|shadera]] (relatywna względem folderu ''shaders'', nazwa bez przedrostka ''mat_'' i rozszerzenia). | | Ścieżka do pliku [[Shader|shadera]] (relatywna względem folderu ''shaders'', nazwa bez przedrostka ''mat_'' i rozszerzenia). | ||
| Ustawia shader używany do renderowania obiektu. | | Ustawia shader używany do renderowania obiektu. | ||
− | | | + | | Parametr jest obowiązkowy, jeżeli jednak nie jest podany zostanie to ustawiony zostanie shader default_0, default_1, default_2 (w zależności od ilości podanych tekstur). Nie działa wtedy ustawianie tekstur poprzez alias. |
|- | |- | ||
| '''textureX''' | | '''textureX''' | ||
− | | Ścieżka do tekstury lub zestaw ścieżek. | + | | Ścieżka do tekstury lub [[#Tekstury losowe|zestaw ścieżek losowych]]. |
| Przypina podaną teksturę pod jednostkę wyrażoną numerem X, numerując od 1. | | Przypina podaną teksturę pod jednostkę wyrażoną numerem X, numerując od 1. | ||
| | | | ||
|- | |- | ||
| '''texture_X''' | | '''texture_X''' | ||
− | | Ścieżka do tekstury lub zestaw ścieżek. | + | | Ścieżka do tekstury lub [[#Tekstury losowe|zestaw ścieżek losowych]]. |
| Przypina podaną teksturę pod alias X jednostki zdefiniowany przez shader | | Przypina podaną teksturę pod alias X jednostki zdefiniowany przez shader | ||
− | | | + | | |
|- | |- | ||
| '''paramX''' | | '''paramX''' | ||
| Od jednej do czterech wartości liczbowych. | | Od jednej do czterech wartości liczbowych. | ||
| Ustawia parametr X numerując od 1. | | Ustawia parametr X numerując od 1. | ||
− | | | + | | |
|- | |- | ||
| '''param_X''' | | '''param_X''' | ||
| Od jednej do czterech wartości liczbowych. | | Od jednej do czterech wartości liczbowych. | ||
| Ustawia parametr pod alias X zdefiniowany przez shader | | Ustawia parametr pod alias X zdefiniowany przez shader | ||
− | | | + | | |
|- | |- | ||
| '''opacity''' | | '''opacity''' | ||
− | | Wartość liczbowa 0- | + | | Wartość liczbowa 0-1 |
− | | | + | | Próg [[Przezroczystość|przezroczystości]] |
− | * 0 | + | | |
− | * | + | Wartości domyślne: |
− | | | + | * 0 - gdy tekstura podpięta pod jednostkę 1 posiada kanał alfa |
+ | * 0.5 - gdy tekstura podpięta pod jednostkę 1 nie posiada kanału alfa lub nie zostałą ona w ogóle podpięta | ||
+ | |||
+ | Zobacz też [[Przezroczystość|opis działania przezroczystości]] | ||
|- | |- | ||
| '''selfillum''' | | '''selfillum''' | ||
| Od jednej do czterech wartości liczbowych. | | Od jednej do czterech wartości liczbowych. | ||
| Nadpisuje wartość SelfIllum w [[Format T3D| submodelach]] używających tego materiału. | | Nadpisuje wartość SelfIllum w [[Format T3D| submodelach]] używających tego materiału. | ||
− | | | + | | |
|- | |- | ||
| '''size''' | | '''size''' | ||
| Dwie wartości liczbowe | | Dwie wartości liczbowe | ||
− | | Nadpisuje wartość rozmiaru tekstury [m] we wpisie [[Obiekt node|node]]. | + | | Nadpisuje wartość rozmiaru tekstury [m] we wpisie [[Obiekt node::track|node::track]]. |
| Wpisanie -1 spowoduje zignorowanie wybranego parametru. | | Wpisanie -1 spowoduje zignorowanie wybranego parametru. | ||
+ | | | ||
+ | |- | ||
+ | | '''shadow_rank''' | ||
+ | | Wartość liczbowa 1-3 | ||
+ | | Określa "wagę/skomplikowanie" cieni rzucanych przez obiekt pokryty danym materiałem. | ||
+ | | Cienie z wagą wyższą niż wartość zdefiniowana wpisem gfx.shadow.rank.cutoff w pliku eu07.ini będą pomijane przy rysowaniu. | ||
+ | |} | ||
+ | |||
+ | === Materiał domyślny === | ||
+ | Jeśli w podanej ścieżce nie istnieje plik .mat, ale istnieje tekstura o tej samej nazwie, to wówczas tekstura ta interpretowana jest jak materiał o definicji: | ||
+ | <span style="color:tomato;font-weight:bold">shader:</span> default_1 | ||
+ | <span style="color:tomato;font-weight:bold">texture_diffuse:</span> sciezka_do_tekstury | ||
+ | Dzięki temu nie jest konieczne tworzenie plików .mat dla prostych materiałów (używających tylko jednej tekstury). | ||
+ | |||
+ | === Dostępne shadery === | ||
+ | |||
+ | Mapy obsługiwane przez dane shadery. Przy braku część tekstur można ustawić jednorodnie dla materiału przy pomocy parametru. | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Nazwa | ||
+ | ! Diffuse | ||
+ | ! Alfa | ||
+ | ! Normal | ||
+ | ! Depth | ||
+ | ! Reflection | ||
+ | ! Specular | ||
+ | ! Glossiness | ||
+ | ! Metalic | ||
+ | ! Detail | ||
+ | |- | ||
+ | | [[mat_default|default]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: red;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: red;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | |[[mat_default_detail|default_detail]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: red;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: red;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: green;"|Detail | ||
+ | |- | ||
+ | | [[mat_default_specgloss|default_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: red;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: red;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_normalmap|normalmap]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_normalmap_specgloss|normalmap_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | |[[mat_detail_normalmap|detail_normalmap]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: green;"|Detail | ||
+ | |- | ||
+ | |[[mat_detail_normalmap_specgloss|detail_normalmap_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: green;"|Detail | ||
+ | |- | ||
+ | | [[mat_parallax|parallax]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: green;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_parallax_specgloss|parallax_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: green;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | |[[mat_detail_parallax|detail_parallax]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: green;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: green;"|Detail | ||
+ | |- | ||
+ | |[[mat_detail_parallax_specgloss|detail_parallax_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: green;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: green;"|Detail | ||
+ | |- | ||
+ | | [[mat_reflmap|reflmap]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: red;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_reflmap_specgloss|reflmap_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: red;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_shadowlessnormalmap|shadowlessnormalmap]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_shadowlessnormalmap_specgloss|shadowlessnormalmap_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_sunlessnormalmap|sunlessnormalmap]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_sunlessnormalmap_specgloss|sunlessnormalmap_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_water|water]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | | [[mat_water_specgloss|water_specgloss]] | ||
+ | | style="background: green;"|Diffuse | ||
+ | | style="background: green;"|Alfa | ||
+ | | style="background: green;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: green;"|Reflection | ||
+ | | style="background: green;"|Specular | ||
+ | | style="background: green;"|Glossiness | ||
+ | | style="background: green;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
+ | |- | ||
+ | |[[mat_colored|colored]] | ||
+ | | style="background: red;"|Diffuse | ||
+ | | style="background: red;"|Alfa | ||
+ | | style="background: red;"|Normal | ||
+ | | style="background: red;"|Depth | ||
+ | | style="background: red;"|Reflection | ||
+ | | style="background: red;"|Specular | ||
+ | | style="background: red;"|Glossiness | ||
+ | | style="background: red;"|Metalic | ||
+ | | style="background: red;"|Detail | ||
|} | |} | ||
− | === Opis kluczy | + | === Opis kluczy warunkowych === |
Bloki warunkowe zawierają definicje własności materiału, które mają być aktywne w warunkach zależnych od [[Plik konfiguracyjny EU07.INI|ustawień symulacji]]. | Bloki warunkowe zawierają definicje własności materiału, które mają być aktywne w warunkach zależnych od [[Plik konfiguracyjny EU07.INI|ustawień symulacji]]. | ||
− | Wartościami dla tych kluczy | + | Wartościami dla tych kluczy jest dowolna ilość kluczy podstawowych i ich wartości, ograniczona za pomocą nawiasów klamrowych. Przykład użycia: |
+ | <span style="color:gray">// Pamiętaj o odstępach między klamrami a resztą kodu!</span> | ||
+ | <span style="color:tomato;font-weight:bold">texture1:</span> example/tex | ||
<span style="color:tomato;font-weight:bold">winter:</span> { | <span style="color:tomato;font-weight:bold">winter:</span> { | ||
− | <span style="color:tomato;font-weight:bold">texture1:</span> | + | <span style="color:tomato;font-weight:bold">texture1:</span> winter/tex |
− | + | } | |
+ | Powyższy kod oznacza, że w przypadku ustawienia warunków zimowych w miejsce ''texture1'' ma zostać wczytana tekstura ''winter/tex'' zamiast domyślnej ''example/tex''. | ||
+ | |||
+ | Bloki warunkowe moga byc dodatkowo zagniezdzane, np. blok warunkow pogodowych moze wystapic wewnatrz bloku pory roku: | ||
+ | |||
+ | <span style="color:tomato;font-weight:bold">autumn:</span> { | ||
+ | <span style="color:tomato;font-weight:bold">rain:</span> { | ||
+ | <span style="color:tomato;font-weight:bold">texture1:</span> autumn/rain <span style="color:gray">// jesien + deszcz</span> | ||
+ | } | ||
+ | <span style="color:tomato;font-weight:bold">texture1:</span> autumn/tex <span style="color:gray">// jesien</span> | ||
} | } | ||
− | + | <span style="color:tomato;font-weight:bold">rain:</span> { | |
+ | <span style="color:tomato;font-weight:bold">texture1:</span> default/rain <span style="color:gray">// deszcz</span> | ||
+ | } | ||
+ | <span style="color:tomato;font-weight:bold">texture1:</span> default/tex | ||
+ | |||
+ | W takiej sytuacji ostatecznie uzywana jest tekstura spelniajaca najlepiej podane warunki, w kolejnosci: | ||
+ | |||
+ | - tekstura dla danej [[Pogoda|pogody]] i [[Pory roku|pory roku]] | ||
+ | - tekstura dla danej [[Pogoda|pogody]] | ||
+ | - tekstura dla danej [[Pory roku|pory roku]] | ||
+ | - tekstura podstawowa | ||
+ | |||
+ | === Tekstury losowe === | ||
+ | Oprócz indywidualnych nazw tekstur można podać równieź ich zestaw. W takiej sytuacji wybrana zostanie losowo jedna z podanych tekstur. Przykład: | ||
+ | <span style="color:tomato;font-weight:bold">texture1:</span> [ tekstura_a tekstura_b tekstura_c ] | ||
+ | |||
+ | === Cechy tekstury === | ||
− | ==== | + | ==== Nowy sposób ==== |
− | + | Przy ścieżkach do tekstur po dwukropku mogą być podane opcjonalne cechy tekstury. | |
+ | texture/path:''<traits>'' | ||
+ | gdzie ''<traits>'' jest zbiorem symboli cech. | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! | + | ! Symbol cechy |
! Opis | ! Opis | ||
|- | |- | ||
− | | ''' | + | | '''s''' |
− | | | + | | Wyłącza zawijanie tekstury w poziomie |
|- | |- | ||
− | | ''' | + | | '''t''' |
− | | | + | | Wyłącza zawijanie tekstury w pionie |
|- | |- | ||
− | | ''' | + | | '''#''' |
− | | | + | | Wyostrzanie tekstury (działa tylko na starym rendererze) |
|- | |- | ||
− | |||
− | |||
|} | |} | ||
+ | Symbole mogą występować w dowolnej kolejności i ilości. | ||
+ | |||
+ | W zależności od kolejności występowania odwołań do tekstur w plikach, użycie cech może dać różne rezultaty. | ||
+ | |||
+ | Rozpatrzmy następujący przykład: | ||
+ | Odwołanie 1: ''sciezka/tekstury:s'' | ||
+ | Odwołanie 2: ''sciezka/tekstury:t'' (będzie interpretowane jako ''sciezka/tekstury:s'') | ||
+ | Odwołanie 3: ''sciezka/tekstury:st'' (będzie interpretowane jako ''sciezka/tekstury:s'') | ||
+ | Odwołanie 4: ''sciezka/tekstury'' (będzie interpretowane jako ''sciezka/tekstury:s'') | ||
+ | |||
+ | Jak widać, każde kolejne odwołanie do tekstury automatycznie dziedziczy cechy z pierwszego znalezionego wywołania. Wyjątkiem od powyższej reguły jest następująca sytuacja: | ||
+ | Odwołanie 1: ''sciezka/tekstury'' | ||
+ | Odwołanie 2: ''sciezka/tekstury:s'' (będzie interpretowane jako ''sciezka/tekstury:s'') | ||
+ | Odwołanie 3: ''sciezka/tekstury:st'' (będzie interpretowane jako ''sciezka/tekstury:s'') | ||
+ | Odwołanie 4: ''sciezka/tekstury'' (będzie interpretowane jako ''sciezka/tekstury'') | ||
+ | |||
+ | W odróżnieniu od pierwszego przypadku, późniejsze odwołanie do tekstury bez cech nie spowoduje dziedziczenia, o ile pierwszym użytym odwołaniem będzie odwołanie bez cech. | ||
+ | |||
+ | ==== Stary sposób ==== | ||
+ | Przed wprowadzeniem nowego sposobu definiowania cech stosowano metodę polegającą na wpisaniu symbolu cechy bezpośrednio w nazwę pliku tekstury wg. wzoru: | ||
+ | ''<trait>''nazwa_tekstury | ||
+ | gdzie ''<trait>'' jest jednym z symboli cechy: | ||
− | |||
− | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! | + | ! Symbol cechy |
! Opis | ! Opis | ||
|- | |- | ||
− | | ''' | + | | '''#''' |
− | | | + | | Wyostrzanie tekstury (działa tylko na starym rendererze) |
|- | |- | ||
− | | ''' | + | | '''@''' |
− | | | + | | Włącza alfa blending dla tekstur terenu. Ta cecha znana jest także pod nazwą ''problend''. |
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | === Tekstury | + | === Tekstury generowane === |
− | + | ||
+ | Zamiast ścieżek do tekstur można umieszczać wywołania skryptu Pythona który powinien wygenerować teksturę, na zasadach podobnych co skrypty wyswietlaczy w lokomotywach. | ||
+ | Składnia wywołania wygląda następujaco: | ||
+ | |||
+ | make:sciezka/skrypt?parametr=wartosc¶metr=wartosc¶metr=wartosc // etc | ||
− | + | Wpis taki spowoduje (jednorazowe) wywołanie skryptu ''skrypt.py'' zlokalizowanego w katalogu ''ścieżka''. Przy uruchomieniu skrypt otrzyma dictionary ze zbiorem zdefiniowanych w wywołaniu par ''parametr-wartosc''. | |
− | |||
− | + | [[Category:Formaty plików symulatora]] |
Aktualna wersja na dzień 20:18, 16 paź 2024
Plik .mat jest plikiem tekstowym z definicją materiału, czyli shadera oraz przypiętych do niego tekstur i parametrów. Posiada prostą składnię klucz: wartość oraz warunkowe bloki wybierane w zależności od ustawień symulacji.
Spis treści
Opis kluczy podstawowych
Nazwa | Wartości | Opis | Uwagi | |
---|---|---|---|---|
shader | Ścieżka do pliku shadera (relatywna względem folderu shaders, nazwa bez przedrostka mat_ i rozszerzenia). | Ustawia shader używany do renderowania obiektu. | Parametr jest obowiązkowy, jeżeli jednak nie jest podany zostanie to ustawiony zostanie shader default_0, default_1, default_2 (w zależności od ilości podanych tekstur). Nie działa wtedy ustawianie tekstur poprzez alias. | |
textureX | Ścieżka do tekstury lub zestaw ścieżek losowych. | Przypina podaną teksturę pod jednostkę wyrażoną numerem X, numerując od 1. | ||
texture_X | Ścieżka do tekstury lub zestaw ścieżek losowych. | Przypina podaną teksturę pod alias X jednostki zdefiniowany przez shader | ||
paramX | Od jednej do czterech wartości liczbowych. | Ustawia parametr X numerując od 1. | ||
param_X | Od jednej do czterech wartości liczbowych. | Ustawia parametr pod alias X zdefiniowany przez shader | ||
opacity | Wartość liczbowa 0-1 | Próg przezroczystości |
Wartości domyślne:
Zobacz też opis działania przezroczystości | |
selfillum | Od jednej do czterech wartości liczbowych. | Nadpisuje wartość SelfIllum w submodelach używających tego materiału. | ||
size | Dwie wartości liczbowe | Nadpisuje wartość rozmiaru tekstury [m] we wpisie node::track. | Wpisanie -1 spowoduje zignorowanie wybranego parametru. | |
shadow_rank | Wartość liczbowa 1-3 | Określa "wagę/skomplikowanie" cieni rzucanych przez obiekt pokryty danym materiałem. | Cienie z wagą wyższą niż wartość zdefiniowana wpisem gfx.shadow.rank.cutoff w pliku eu07.ini będą pomijane przy rysowaniu. |
Materiał domyślny
Jeśli w podanej ścieżce nie istnieje plik .mat, ale istnieje tekstura o tej samej nazwie, to wówczas tekstura ta interpretowana jest jak materiał o definicji:
shader: default_1 texture_diffuse: sciezka_do_tekstury
Dzięki temu nie jest konieczne tworzenie plików .mat dla prostych materiałów (używających tylko jednej tekstury).
Dostępne shadery
Mapy obsługiwane przez dane shadery. Przy braku część tekstur można ustawić jednorodnie dla materiału przy pomocy parametru.
Nazwa | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
---|---|---|---|---|---|---|---|---|---|
default | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
default_detail | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
default_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
normalmap | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
normalmap_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
detail_normalmap | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
detail_normalmap_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
parallax | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
parallax_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
detail_parallax | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
detail_parallax_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
reflmap | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
reflmap_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
shadowlessnormalmap | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
shadowlessnormalmap_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
sunlessnormalmap | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
sunlessnormalmap_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
water | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
water_specgloss | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
colored | Diffuse | Alfa | Normal | Depth | Reflection | Specular | Glossiness | Metalic | Detail |
Opis kluczy warunkowych
Bloki warunkowe zawierają definicje własności materiału, które mają być aktywne w warunkach zależnych od ustawień symulacji. Wartościami dla tych kluczy jest dowolna ilość kluczy podstawowych i ich wartości, ograniczona za pomocą nawiasów klamrowych. Przykład użycia:
// Pamiętaj o odstępach między klamrami a resztą kodu! texture1: example/tex winter: { texture1: winter/tex }
Powyższy kod oznacza, że w przypadku ustawienia warunków zimowych w miejsce texture1 ma zostać wczytana tekstura winter/tex zamiast domyślnej example/tex.
Bloki warunkowe moga byc dodatkowo zagniezdzane, np. blok warunkow pogodowych moze wystapic wewnatrz bloku pory roku:
autumn: { rain: { texture1: autumn/rain // jesien + deszcz } texture1: autumn/tex // jesien } rain: { texture1: default/rain // deszcz } texture1: default/tex
W takiej sytuacji ostatecznie uzywana jest tekstura spelniajaca najlepiej podane warunki, w kolejnosci:
- tekstura dla danej pogody i pory roku - tekstura dla danej pogody - tekstura dla danej pory roku - tekstura podstawowa
Tekstury losowe
Oprócz indywidualnych nazw tekstur można podać równieź ich zestaw. W takiej sytuacji wybrana zostanie losowo jedna z podanych tekstur. Przykład:
texture1: [ tekstura_a tekstura_b tekstura_c ]
Cechy tekstury
Nowy sposób
Przy ścieżkach do tekstur po dwukropku mogą być podane opcjonalne cechy tekstury.
texture/path:<traits>
gdzie <traits> jest zbiorem symboli cech.
Symbol cechy | Opis |
---|---|
s | Wyłącza zawijanie tekstury w poziomie |
t | Wyłącza zawijanie tekstury w pionie |
# | Wyostrzanie tekstury (działa tylko na starym rendererze) |
Symbole mogą występować w dowolnej kolejności i ilości.
W zależności od kolejności występowania odwołań do tekstur w plikach, użycie cech może dać różne rezultaty.
Rozpatrzmy następujący przykład:
Odwołanie 1: sciezka/tekstury:s Odwołanie 2: sciezka/tekstury:t (będzie interpretowane jako sciezka/tekstury:s) Odwołanie 3: sciezka/tekstury:st (będzie interpretowane jako sciezka/tekstury:s) Odwołanie 4: sciezka/tekstury (będzie interpretowane jako sciezka/tekstury:s)
Jak widać, każde kolejne odwołanie do tekstury automatycznie dziedziczy cechy z pierwszego znalezionego wywołania. Wyjątkiem od powyższej reguły jest następująca sytuacja:
Odwołanie 1: sciezka/tekstury Odwołanie 2: sciezka/tekstury:s (będzie interpretowane jako sciezka/tekstury:s) Odwołanie 3: sciezka/tekstury:st (będzie interpretowane jako sciezka/tekstury:s) Odwołanie 4: sciezka/tekstury (będzie interpretowane jako sciezka/tekstury)
W odróżnieniu od pierwszego przypadku, późniejsze odwołanie do tekstury bez cech nie spowoduje dziedziczenia, o ile pierwszym użytym odwołaniem będzie odwołanie bez cech.
Stary sposób
Przed wprowadzeniem nowego sposobu definiowania cech stosowano metodę polegającą na wpisaniu symbolu cechy bezpośrednio w nazwę pliku tekstury wg. wzoru:
<trait>nazwa_tekstury
gdzie <trait> jest jednym z symboli cechy:
Symbol cechy | Opis |
---|---|
# | Wyostrzanie tekstury (działa tylko na starym rendererze) |
@ | Włącza alfa blending dla tekstur terenu. Ta cecha znana jest także pod nazwą problend. |
Tekstury generowane
Zamiast ścieżek do tekstur można umieszczać wywołania skryptu Pythona który powinien wygenerować teksturę, na zasadach podobnych co skrypty wyswietlaczy w lokomotywach. Składnia wywołania wygląda następujaco:
make:sciezka/skrypt?parametr=wartosc¶metr=wartosc¶metr=wartosc // etc
Wpis taki spowoduje (jednorazowe) wywołanie skryptu skrypt.py zlokalizowanego w katalogu ścieżka. Przy uruchomieniu skrypt otrzyma dictionary ze zbiorem zdefiniowanych w wywołaniu par parametr-wartosc.