Strona ta opisuje tworzenie modeli 3D dla potrzeb symulatora
MaSzyna EU07-424 przy pomocy programu 3dstudiomax lub gmax.
Strona nie jest podręcznikiem na temat programu 3dsmax (bo musiała by być wielokrotnie większa, zresztą autor strony zna tylko 10% mozliwości 3dsmax ;-)
zakładam pewną znajomość programu do edycji 3d.
Jeśli jednak masz kłopoty z roieniem poprawnych modeli, przygotowałem mały tutorial
Jeśli używasz innego programu niż 3dstudiomax, bylibyśmy wdzięczni gdybyś napisał jakiś konwerter z tego programu do formatu .t3d uzywanego przez nasz symulator.
Na wstępie pewne reguły które są istotne niezaleznie czy
tworzymy model dla tego programu, czy też dla MSTS, TrainZ itp.
Otóż model lokomotywy lub wagonu lub budynku,
wraz z innymi modelami pojazdów, budynków, słupów itp,
musi być wyswietlany minimum 20 razy na sekunde, aby
uzyskać wrażenie płynności ruchu.
Program musi posortować poszczególne płaszczyzny aby je
móc wyswietlać w odpowiedniej kolejności (uwzględniając
że jeden obiekt moze zasłonic inny), obliczyć naężenie
padającego światła, potem musi te płaszczyzny narysować
wraz z przypisaną im teksturą.
Im bardziej złożony obiekt, tym więcej takich operacji,
więcej też miejsca w pamięci zajmuje taki model.
Wydajność komputera siada, mamy mało FPS (frame per second),
animacja sie rwie a program może się zawiesić.
Dlatego fundamentalna zasada którą powinnismy sie kierować
budując model brzmi:
model musi być jak najprostszy!
Jak to osiągnąć?
Na sieci można znaleźć kilka bardzo ładnych modeli,
np. Pt47. Niestety nadają sie one tylko do pooglądania
w programie do edycji 3d, ilość szczegółów dyskwalifikuje
je dla potrzeb symulatora.
model piękny ale zbyt skomplikowany
Tymczasem można stworzyć model nawet o 10x mniejszej
ilości płaszczyzn ale tak samo ładnie wyglądajacy,
przynajmniej z odległości z jakiej na ogół patrzymy
na lokomotywę.
Efekt ten można uzyskać operując odpowiednio teksturami.
Nie ma potrzeby odtwarzania każdego nitu, wyczystki, kątownika
itp w trójwymiarze. Takie coś ładnie wygląda w programie
renderującym statyczne sceny, ale symulatory ruchu pociągu
i tak nie policzą cieniowania takich detali a oświetlenie
ich policzą błędnie (bez raytracingu).
Lepiej takie detale po prostu namalować na danej powierzchni,
innymi słowy kocioł robimy płaski a drobne detale
osprzętu są nałozone jako tekstura - na ogół nie trzeba
jej rysować, można ja uzyskać metodą fotograficzną,
ale to temat na osobny opis.
Za pomocą tekstur można też upraszczać skomplikowane
ale płaskie kształty - wózki, tarcze zderzaków, koła itp.
Nalezy tu zwrócić uwagę, ze wszelkie powierzchnie są zawsze
tworzone z trójkątów (jedynych brył o ścisle zdefiniowanej
płaszczyźnie), i to te trójkaty musi program przetwarzać
w każdej ramce obrazu. Jeśli rysujemy okrągłą tarczę
zderzaka to w programie 3d musimy zdefiniować ilość segmentów
którymi będzie aproksymowany ten okrąg. wieksza ilość segmentów
to ładniesze kółko ale gorsza wydajność symulatora - tzw. kwadratura
koła...
Tymczasem możemy narysować kwadrat który będzie wyglądał
jak kółko ;-)
Jest to możliwe jesli zastosujemy teksturę z maską przeźroczystości,
tzn obrazek w którym pewne obszary są zdefiniowane jako transparentne.
Przykładowo nie trzeba rysować okrągłej tarczy zderzaka, wystarczy
na kwadrat nałozyć teksturę (obrazek) z rysunkiem koła na przeźroczystym tle:
tarcza bufora będzie wyświetlana jako okrągła.
Standardowe pliki bitmapowe (.BMP) nie posiadaja przeźroczystości,
przeźroczystość tekstury w naszym symulatorze mozna
uzyskać definiując kanał alpha w pliku Targa Bitmap (.TGA)
albo uzywając specjalnego formatu .TEX (w tym celu plik .BMP
trzeba skonwertować specjalnym programem podając kolor przeźroczystości).
Ponizsze rysunki ilustrują w jaki sposób w wagonie towarowym
zostaly odzwierciedlone detale takie jak ściągi podwozia,
prowadniki maźnic, resory, klocki hamulcowe oraz wystające
poza płaszczyznę nadwozia kątowniki. Wszzystkie te elementy
zostały po prostu narysowane na niebieskim tle które potem
zdefiniowałem jako przeźroczyste:
tzw. szkielet drutowy pokazujący krawędzie wszystkich elementów,
wygląd modelu w oknia renderowania 3DStudio (niebieski kolor będzie przeźroczysty),
końcowy wygląd modelu w symulatorze
Do definicji tła uzyłem koloru niebieskiego aby się wyróżniał, ma to jednak
tę wadę, że na krawędziach kolor ten wyłazi wskutek filtracji tekstury.
Efekt ten nie jest tak widoczny w przypadku czarnego koloru przeźroczystości,
ale nie jest to zbyt wygodny kolor, można więc filtrację tekstury wyłączyć
w symulatorze dając jej nazwę zaczynającą sie od znaku # (hash).
Ale wtedy nie będzie rozmywania pikseli - coś za coś.
Teraz kilka uwag odnośnie zasad budowy modelu, aby mógł być poprawnie
skonwertowany do pliku .T3D:
- należy uzywać jednostek metrycznych, długość pojazdu wraz ze zderzakami
musi byc identyczna jak w pliku .chk, oś Y skierowana wzdłuż pojazdu.
- wszystkie obiekty muszą byc skonwertowane do Editable Mesh:
menu uzyskane po kliknięciu prawym klawiszem myszy w obiekt
- na jeden obiekt można nałozyć jedną teksturę, wskazane jest połączyć
drobne obiekty w całość, np. wszystkie cztery burty zaznaczyć i połączyć
w jeden obiekt, ogranicza to ilość plików z teksturami;
- musi być ustalona hierarchia obiektów, np. obiekt nadrzędny nazywa się
ostoja i do niego należą sprzęgi, koła itp.:
okno Shematic View otwierane ikonką
- przy definiowaniu rodzaju materiału oprócz tekstury (definiowanej
jako diffuse color) należy prawidłowo zdefiniować kolory ambient, diffuse, specular,
ponieważ w odróżnieniu od 3DStudio symulator bierze te kolory pod uwagę
równiez gdy nałożona jest tekstura (na tej zasadzie są zrobione kolorowe
lampki w kabinie mimo ze tekstura jest jedna - czarno-biała).
Edytor materiału - tu się definiuje kolory i tekstury
- Jesli na jednej teksturze jest kilka rysunków odnoszących się do
różnych płaszczyzn (tak jak w poniższym przykładzie gdzie są rozrysowane
burty, podłoga, ostoja i inne elementy wagonu), można zaznaczyć interesujący
nas obiekt lub jedna z jego płaszczyzn po czym uzyć funkcji Unwrap UVW
w celu prawidłowego nałożenia fragmentu tekstury:
okno edytora UVW - nakładanie fragmentu tekstury
- Aby tekstura była samoświecąca należy zaznaczyc
SelfIllum (wtedy jej jasność nie będzie zależeć
od oświetlenia zewnętrznego).
- Nie nalezy robić odbić zwierciadlanych - wskutek błedu w 3Dstudio
takie tranformacje sa źle konwertowane - zamiast tego należy użyć
obrotu o 180deg.
- Aby koła się obracały, nalezy je nazwać np. Wheel0* gdzie *=1...9,
obrót będzie następował wokół osi X z szybkością zależną od średnicy podanej
w pliku .chk (sprawa małych osi tocznych np. w parowozie
będzie w przyszłości definiowana w pliku *.mmd).
- Inne podobiekty których słowa kluczowe są zarezerwowane:
- Coupler1_On, Coupler1_Off, Coupler2_On, Coupler2_Off - wygląd sprzęgu w stanie sprzęgniętym i niesprzęgnietym
- EndSignals1, EndSignals2 - sygnały końca pociągu
- cdn...
- W celu optymalizacji modelu nalezy zdefiniować maksymalną odległość
z jakiej widoczny jest dany element - w zakładce User Properties nalezy wpisać np.
MaxDistance = 150 wtedy ten obiekt nie będzie rysowany w odległości
większej niż 150m od obserwatora. Im mniejszy element tym mniejsza powinna być
graniczna odległość. Mozna też zdefiniować MinDistance poniżej
której obiekt też nie będzie widoczny (dzieki temu można miec np. dwie wersje
wagonu - szczegółową do ogladania z bliska i pudełkowatą do oglądania z daleka).
- Wiele predefiniowanych obiektów ma standardowo kilka segmentów
(np. płaszczyzna ma 4), co jest niepotrzebne jesli nie zamierzamy ich zniekształcać - należy
wpisać 1. Moje pierwsze koło było zrobione ze standardowego walca,
po zrobieniu nowego bardziej optymalnego (tylko dwie sekcje) rozmiar 5cio osiowego wagonu piętrowego
zmniejszył się dwukrotnie!
Na końcu zapraszam do ściagniecia omawianego przykładu modelu węglarki 9W w formacie 3dStudioMax4.
Dołączone są też tekstury ale być może trzeba zdefiniować na nowo ścieżki dostępu.
Jest to mój pierwszy i w związku z tym nie najlepiej zrobiony model, np. maźnice powinny być walcami
tymczasem zdefiniowałem je jako prostopadłościan
Wystarczy zdefiniować czterościenny walec który wygląda jak prostopadłościan, ale symulator wygładzi sobie oświetlenie symulując obłą powierzchnię walca.
Oczywiście dno walca będzie nadal wyglądać jak kwadrat, tak więc tę metodę można stosować raczej do słupów itp brył których końce nie są widoczne.
Przykład wielościennego walca z wygładzaniem i bez widzianego przez symulator poniżej:
Im mniejszy obiekt, tym mniej płaszczyzn powinno być użytych do jego rysowania.
Pamiętajmy, że duża ilość płaszczyzn to nie tylko mniejsza ilość klatek na sekunde ale i dłuższe wczytywanie pliku *t3d.
Na zakończenie eksport do pliku t3d.
Uruchom skrypt main.ms (menu Scripts->Run Script).
Wybierz Export T3D, wpisz nazwe pliku i gotowe.
Plik należy umieścic w katalogu katalog_symulatora/models,
chyba że jest to plik obiektu ruchomego, wtedy musi być w katalog_symulatora/dynamic/.../typoszeregpojazdu.
Na razie skrypty ucinają wszelkie ścieżki, więc defaultowo tekstury będa szukane w katalogu /textures
lub w przypadku obiektu ruchomego, w katalogu /dynamic/.../typoszeregpojazdu.
Można to mienić edytując plik .t3d i dopisując odpowiednie ścieżki, np.
Map: metal/MetalFrictionPattern1.tga w pliku /dynamic/PKP/eu07/kabina-eu07a.t3d
oznacza że program wczyta teksturę z pliku textures/metal/MetalFrictionPattern1.tga.
Chodzi o to, żeby tekstury ogólnego zastosowania nie były powielane. W katalogach /dynamic/...
powinny być tekstury typowe dla konkretnego pojazdu.
Z powrotem - na główną stronę
Zarezerwowane identyfikatory obiektów
Edycja Tekstur
Edycja Scenerii
Ostatnia modyfikacja:
2008-09-14 aktualizacja linków by @Ra
2008-11-28 poprawka linku by @Ra