Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Pokaż wątki - Stele

Strony: 1 2 [3] 4 5 6
61
Pomoc w tworzeniu / Wartości specular
« dnia: 09 Października 2017, 17:38:09 »
Wyciągnięte z karty kalibracyjnej shadera Unity. U nas też powinno się sprawdzać.

Węgiel: 52
Guma: 53
Błoto: 55
Trawa: 59
Cegła: 60
Drewno: 81
Beton: 63
Lakiery można próbować dolnymi wartościami pasma metalicznego, czyli około 150.
Górne wartości tylko na powierzchnie lustrzane.

Efekty sprawdzamy przy wyłączonych mnożnikach w eu07.ini.
scalespeculars no

62
Pomoc w tworzeniu / Tekstury 112a do dopracowania
« dnia: 08 Października 2017, 12:14:47 »
Paczka tekstur r4techa (chyba wszystkie jego) wygrzebana na dysku MK1991 z czasow gdy tylko Floyd zrobil pierwotny uklad i zaraz mialo wyjsc. Trzeba doszlifowac, dodac zmiany, nowe elementy, wymazac okna itd.
http://eu07.pl/userfiles/23180/bugs-r4tech_112a.7z

Kto sie czuje na silach, moze pojedynczo wykanczac i dawac do testow. Postaram sie przygotowac cztery warianty wnetrz do 112a by do wszystkiego cos pasowalo.

ab9nou010-5 @Piotr93
ab9nou009-7 @Joachimowicz
a9ouy173-3  @Piotr93
a9ou182-4 @Joachimowicz
a9nouz686-6 @DieselPower
a9nou646-0 @DieselPower

63
Rainsted / Bugtracker rainsteda
« dnia: 05 Października 2017, 11:46:43 »
Ze względu na odejście autora programu Rainsted z forum eu07.pl błędy i propozycje zmian w programie najlepiej zgłaszać na bugtrackerze autora:
http://bugtracker.rainsted.com
Wymagana niezależna rejestracja.

64
Bocznica / Zimowe tekstury drzew
« dnia: 14 Września 2017, 21:16:06 »
93 tekstury drzew zimowych na podstawie paczki T4Ever_V9 ze strony evermotion.org.

Minimalny czas testów do dnia 2017-09-21 21:13.
Jeśli nie zostaną zgłoszone błędy, automatyczna akceptacja w dniu 2017-09-28 21:13.

Plik o rozmiarze 54453545 bajtów:
http://eu07.pl/userfiles/23180/zimowe_drzewa.7z

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2017-09-14 21:13:58                  0            0  zimowe_drzewa
2017-09-14 21:13:58                  0            0  zimowe_drzewa
2017-09-14 21:13:58                  0            0  zimowe_drzewa
2017-09-14 21:13:58            1572882     54452180  zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58             786450               zimowe_drzewa
2017-09-14 21:13:58             786450               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58             786450               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58             786450               zimowe_drzewa
2017-09-14 21:13:58             786450               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58             786450               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58             786450               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            1572882               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
2017-09-14 21:13:58            3145746               zimowe_drzewa
------------------- ----- ------------ ------------  ------------------------
                             216270474     54452180  93 files, 3 folders


Wiadomość wygenerowana automatycznie

Mega fail, konwersja png>tga zjadła kanał afla. Czyli wszystko od nowa. Ściągam.

65
Bocznica / test adm
« dnia: 28 Sierpnia 2017, 11:20:26 »
test adm

66
WWW / Uploadify w Firefoksie
« dnia: 12 Sierpnia 2017, 12:48:32 »
Uploadify do ładowania plików na stronę główną mi nie reaguje. FF 55.0.1 x64 win10. Cała reszta elementów javascripta jak do tej pory działa. Z edga działa. Na XP w FF działało.

67
Na podstawie poradnika Petera Kojesty

1. Tworzymy układ tekstury i mapowanie w kanale pierwszym.
2. W kanale drugim tworzymy nowy układ mapowania, gdzie szwy są odsunięte na inne krawędzie względem pierwszego układu. Interesują nas tylko obszary, na których chcemy wyretuszować łączenia.
3. Wypalamy teksturę z kanału pierwszego na układ kanału drugiego.
4. Otwieramy wypaloną teksturę w edytorze grafiki rastrowej. Retuszujemy łączenia.
5. Wracamy do edytora 3d. Nakładamy na model wyretuszowaną teksturę z kanału drugiego.
6. Wypalamy teksturę z kanału drugiego na układ kanału pierwszego.
7. Wracamy do edytora grafiki rastrowej, wklejając wypaloną teksturą na górę oryginalnej. Wymazujemy zbędne elementy, zostawiając tylko zretuszowane łączenia.

68
Publikacje / Nissan Almera & Audi A3
« dnia: 01 Sierpnia 2017, 20:05:09 »
Modele dwóch samochodów z fizyką uproszczoną, ale dostępnych dla gracza.
Pochodzą ze strony 3dlenta.com. Jest tam pięć paczek, zawierających w sumie 64 pojazdy o jakości podobnej do tu zaprezentowanych. Ja skonwertowałem dwa. Na moim kanale na youtube są filmy jak to robić. Pozostałe 62 czekają na chętnych. Dalszej pomocy w razie wątpliwości co do procesu konwersji chętnie udzielę.




Wersja TGA dla deweloperów:
http://eu07.pl/userfiles/23180/a3_almera_tga.7z

Dodane do repozytorium. @Stele

69
WWW / Tracker torrenta
« dnia: 22 Lipca 2017, 13:52:03 »
O ile zrozumiałem, stary tracker się posypał przy aktualizacji PHP. Mateu postawił Torrent Tradera, który jest jednak trackerem prywatnym i odrzuca stary torrent maszyny, jako nieposiadający passkeya. Da się coś z tym zrobić?

70
Forum / Bugtracker Paczki Całościowej
« dnia: 05 Stycznia 2017, 21:19:52 »
W dziale "dla deweloperów" pojawił się kolejny bugtracker, tym razem dla paczki całościowej. Niech was nazwa działu nie zmyli. Każdy użytkownik może tam zgłaszać błędy i publikować własne poprawki. Będzie to z jednej strony checklista błędów przed kolejną paczką całościową a z drugiej test dodatków dla drobnych poprawek. Za aktywność można otrzymać nominację do grona Betatesterów i Wydziału Paczki Całościowej.

Proszę skupić się głównie na błędach krytycznych, naprawdę wartych poprawy. Wpływających na stabilność symulacji i możliwość ukończenia scenariusza. Plamka na wydanej teksturze czy kępa trawy na szosie 200m od torów do takich nie należą. Oczywiście nadal mile widziane będzie poprawienie każdej błahostki we własnym zakresie i opublikowanie zmodyfikowanych plików by zostały włączone do kolejnych wydać Maszyny.
Przed modyfikacjami proszę się upewnić, że pracujecie na aktualnych plikach. Betatesterów+ proszę o czerpanie źródeł z repozytorium eu07.pl/svn/pctga, a zwykłych użytkowników o poszukanie ewentualnych modyfikacji w zrzutkach z repozytorium pod adresem http://eu07.pl/daily/export/.
Należy również się zastanowić, gdzie leży przyczyna błędu. Czy przykładowo w złym działaniu ai po stronie exe czy w błędnym skrypcie sterowania ruchem i umieszczeniu zgłoszenia we właściwym bugtrackerze.
Względem exekowego nie ma tu kategorii [nowość]. Ma być to lista błędów do poprawki a nie koncert życzeń. Nowości, nawet drobne, nadal wrzucamy do testu dodatków. Załączniki tutaj, jeśli przekraczają wagę załącznika do postu, wrzucamy na http://eu07.pl/upload/ z przedrostkiem bugs- lub priv-.
Wszelkie uwagi co do dostępnych kategorii proszę publikować tu lub do mnie na pw.

@macius5991: "z polskiego na nasze" :)
Gdzie?
http://eu07.pl/forum/index.php?project=2 - Bugtracker, czyli narzędzie do zgłaszania błędów

Co zgłaszamy?
Błędy krytyczne, które uniemożliwiają prawidłowy przebieg symulacji. Należy skupić się na błędach w scenariuszach i plikach aktualnego wydania MaSzyny (Patch17.07). Ponadto można zgłaszać błędy w udźwiękowieniu, modelach, teksturach, z tym że liczymy na zgłoszenia poważniejszych błędów. Zgłoszenia typu Plamka na teksturze lub Drzewko zasłania semafor będą usuwane.

Jak zgłaszamy?
1. Zakładamy nowe zgłoszenie (przycisk Napisz zgłoszenie).
2. Standardowo - tytuł zgłoszenia (Nieprzejezdny scenariusz xxx).
3. Wybór kategorii - zgodny z typem zgłoszenia.
4. Pliki, tekstury, zdjęcia - dodajemy później jako załączniki do zgłoszenia.
Miej aktualną paczkę!
Konieczne jest posiadanie aktualnej paczki MaSzyny: MaSzyna 15.04 + Patch16.08 + Patch17.07 -> http://eu07.pl/pobierz/post/maszyna-1707
Ponadto każdy może pobrać aktualny stan repozytorium pod adresem http://eu07.pl/daily/export/

Kto może zgłaszać błędy i propozycje poprawek?
Każdy użytkownik forum.


71
Pomoc w tworzeniu / Przełączniki w EU05
« dnia: 04 Lipca 2017, 20:38:06 »
Proszę o wytłumaczenie roli przełączników oznaczonych na screenie. Szerszy opis działania tych podpisanych też się przyda.

72
Forum / Nabór na redaktora dokumentacji
« dnia: 04 Lipca 2017, 13:50:54 »
Poszukiwany chętny do aktualizacji readme.
Wymagania:
-podstawowa znajomość html.
-śledzenie zmian w symulatorze.

Gdy zmienia się klawiszologia, mechanika prowadzenia pojazdów, trzeba to z marszu ująć w sekcjach sterowanie/klawiszologia.
Gdy wydawane są nowe pojazdy/scenerie trzeba to ująć w liście autorów.
Gdy ma pojawić się nowy patch, trzeba wypisać najważniejsze zmiany w sekcji nowości.

To w sumie tyle. Wstęp pozostawiamy w gestii promocji.
Po sprawdzeniu kompetencji, redaktor otrzyma dostęp do SVN paczki & elementów strony głównej.
Brak aktualnej dokumentacji, najbardziej blokuje publikację patcha, a my musimy skupić się na ostatnich poprawkach pojazdów.

----------------

Została dodana symulatorowa wikipedia na naszym serwerze. Wymaga wiele pracy, by była użyteczna. Za aktywność redakcyjną można zostać nagrodzonym tą rangą. Uprawnienia jak Betatester.

73
Bieżące Symulatorowe / Drzewko z oszukanymi normalnymi
« dnia: 03 Lipca 2017, 23:19:12 »
W załączniku standardowe drzewko z wszystkimi wektorami normalnymi pionowo w górę. Dzięki temu nie reaguje na kierunkowe oświetlenie diffuse i ze wszystkich stron wygląda tak samo. Ma to jakiś sens? Jak wygląda lepiej? Jak się sprawdza przy shaderach?

Jak się spodoba, to spróbuję trawę i pola na kratce, tylko ogarnę jak się jawnie definiuje normalne w t3d.

74
Bieżące Symulatorowe / Specular w modelach
« dnia: 28 Czerwca 2017, 21:43:17 »
Specular: właściwość materiału, odpowiadająca za stopień odbijania światła. Dla 0 obiekt absorbuje całe światło, dla 1 (255) odbija całość. Zgodnie z prawem odbicia, odbija się pod takim samym kątem względem wektora normalnego płaszczyzny jak pada, a intensywność odbieranego światła zależy od iloczynu wektorowego między kątem odbicia a kątem kamery.

Jako, że zaczynamy wprowadzać je do exe, trzeba się wziąć za modele.
Ma ktoś sensowną tabelkę z wartościami dla danych materiałów? Znalazłem tylko wytyczne dla konfiguracji shaderów w unity gdzie sugerują 40-75 dla niemetali i 155-255 dla metali. Nie za wysoko?

Będziemy potrzebować toola, który we wszystkich t3d i triangles ustawi na początek ten parametr na jakąś niska wartość. Uwaga, część triagles nie ma tej składowej materiału jawnie zdefiniowanej. Różna wartość na podstawie opacity, tak jak exe to teraz opcjonalnie robi, to dobry klucz dla masówki na początek również.
Potrzebny jest też tool do masowego wymnażania transformów w t3d. Bez jednostkowych normalnych, możemy pomarzyć o ładnym oświetleniu. Klikanie w rainstedzie masowo odpada.

75
Symulator / Parametry normalizacji w MMD
« dnia: 16 Czerwca 2017, 14:34:21 »
Piotr93 przeczyścił mmd w paczce, to wypisuję by nie przepadło póki wiki nie mamy:
Runningnoise: normalized: AM/Vmax, FM/Vmax
Mechspring:  SpringK, Dampf, X,  Y,  Z, Max, Roll, Pitch, wyzerowac 3,4,5 parametr aby nie trzeslo, wyzerowac ostatnie dwa parametry aby kamera sie nie kiwala
Engine (diesel): am zalezne od napelnienia normalized: am/(pwr+nmax)
Brakesound: normalized: am/mbf, fm/Vmax
Slipperysound: normalized: am/Vmax
Engageslippery: normalized: fm/nmax
Ventilator (electric): normalized: am/rVentnmax fm/rVentnmax

76
Pomoc w tworzeniu / Sortowanie/faza renderowania flar freespotów.
« dnia: 25 Maja 2017, 19:50:06 »
E3d głowic wygenerowane wpisem node model bez parametrów lights. Efekt jak w załączniku. Na niektórych komorach, acz nie wszystkich, nie wyświetla komory za poświatą. Na paczce 16.08 ani repo t3d/tga nie miałem nigdy takiego problemu. Jakieś pomysły w czym leży przyczyna?
Wrzucam jeszcze model głowicy z patcha 17.05 używanej przez semafor A na TD. Wrzucić do models/sem/glowice w celu testu.

77
Publikacje / Wagon 111Au PKPIC (11Xa_v2)
« dnia: 26 Kwietnia 2017, 22:58:28 »
Przedstawiamy pierwszy z modeli serii 11Xa_v2. Wagon typu 111Au po drobnych modernizacjach PKPIC. Kolejne wersje modelu będą powstawiać w miarę tworzenia przez Was tekstur zewnętrznych wymagających modyfikacji lub innych wnętrz.
Funkcje modelu:
  • Animowane drzwi boczne.
  • Wnętrze widoczne z zewnątrz, podświetlane zależnie od oświetlenia atmosferycznego.
  • Animowane mostki przejściowe i wał prądnicy.
  • Możliwość jazdy jako pasażer (brak dedykowanego, bogatego wnętrza do tego trybu).
  • Wymienna tekstura tablicy relacyjnej.
Cytuj
Autorzy:
   Pudło:
      Floyd
      Adsim
      Ra
      Stele
      matek123
   Wnętrze:
      Stele
      PKP94 (TRS)
   Dźwięki:
      MK1991
   FIZ&MMD:
      youBy
      EP08-015
      Stele
   Zdjęcia:
      Floyd
      youBy
      lalek
      Cesky Kretek
      Stele
   Tekstura b10ou-2070829-9:
      Patryk_Farana
      MR6
      Stele




Wersja deweloperska T3D+TGA:
http://eu07.pl/userfiles/23180/111au_ic_250417.7z
Devkit a w nim:
  • Siatki UV użytych modeli.
  • Dodatkowe tekstury wzorcowe wersji nawiewnej i elektrycznej 111a.
  • Mapy cieni światła bezkierunkowego głównych elementów.

Dodane do repozytorium. Rev 1757. @Stele

78
Bieżące Symulatorowe / Aktualizacja readme
« dnia: 15 Maja 2017, 21:02:07 »
Rzeczy do zrobienia w Readme w świetle następnej paczki. Gotowe zmiany bardzo proszę wstawiać w postach poniżej, uzupełnimy Readme na repozytorium na bieżąco.

1. Aktualizacja ekranu ładowania i jego zachowania.
2. Sterowanie gamepadem. W wątku exe jest, wypada przenieść obok klawiszologii.
3. Do FAQ dopisać ostrzeżenie o wejściu w tryb klikania guzików przez alt-tabowanie.

79
Bieżące Symulatorowe / Skyboxy w kolejnej paczce
« dnia: 23 Kwietnia 2017, 11:39:21 »
Kolejna paczka będzie używać exe z nowym oświetleniem dynamicznym sceny.
Następujące zmiany są pewne:
sky_dynamic_stratus.t3d > skydome_clouds.t3d
skystars.t3d > skydome_stars.t3d
Bo są to stare nieba dynamiczne z usuniętymi ciałami niebieskimi, teraz generowanymi programowo.

Wszystkie scenariusze mają teraz włączone oświetlenie dynamiczne. Można w nim kontrolować:
- Dzień w roku (godziny świtu i zmierzchu, wysokość słońca nad horyzontem).
- godzinę symulacji (wysokość słońca)
- nasycenie koloru światła i tła (zachmurzenie)

Od wersji 17.3.125.12639 Rainsted nie ma problemu z parametrem overcast we wpisach scenerii. Przyjmuje wartości 0-1 (*0.75 w kodzie potem...). Podajemy go jako ostatni parametr za wpisami koloru mgły w sekcji atmo:
Cytuj
atmo 0.6 0.722 0.757 1000 3000 0.745 0.714 0.655 0.9 endatmo

No i teraz decyzja co robimy ze starymi fototeksturowymi skyboxami? Część z nich może mieć złą orientację kierunków geograficznych. Część ma słońce/księżyc narysowane na teksturze. Te muszą wylecieć. Część jednak jest ładna i daje urozmaicenie.
Dla mnie optymalne byłoby dorobić więcej tekstur półprzezroczystych chmur, tak jak ja kiedyś przerobiłem altostratus_004. Nie mam jednak ochoty ani czasu nad tym siedzieć, przy ilościach błędów w paczce wymagających poprawek. Ktoś musiałby to ogarnąć.

80
Coraz więcej bajerów w kabinach zależy od obecności hebelków w modelu. Oprócz piasecznicy, wymagane są kontrolery pantografów (zwłaszcza w ezt), świateł kabiny, świateł czołowych (w tym przyciemniania obydwu). Proszę porównywać możliwości pojazdu z rzeczywistością i logowane w errors rozbieżności mmd-model. Testować na najnowszym exe. http://eu07.pl/forum/index.php/topic,28920.msg445222.html
Przed testami sprawdzić czy na http://eu07.pl/daily/export/ nie ma aktualizacji fiz/mmd danego pojazdu.

Zgłoszenia proszę umieszczać jako osobne wątki dla każdego nie w pełni funkcjonalnego pojazdu w bugtrackerze paczki.

81
Na warsztacie / TD z szosą
« dnia: 16 Kwietnia 2017, 13:51:41 »
http://eu07.pl/userfiles/23180/bugs-td_szosa.7z

Dodana droga z dwoma przejazdami do testów złego zachowania samochodów. Autor @danniel.
Nie wiem czy w dobrą stronę przejazdy przypisałem. Auta kompletnie gubią skanowanie.

82
Poradniki / [MOD] Wytyczne dla modelarzy
« dnia: 14 Kwietnia 2017, 13:44:37 »
MaSzyna używa autorskiego formatu tekstowego t3d konwertowanego przez exe na format binarny e3d. Podczas konwersji zostają przemnożone macierze transformacji nieanimowanych obiektów i wyliczone wektory normalne. Dokumentację e3d można znaleźć tutaj: http://rainsted.com/pl/Format_binarny_modeli_-_E3D

Dozwolone są obiekty typu:
Mesh Definiuje siatkę trójkątów. Każda siatka może mieć przypisany tylko jeden materiał używający jednej tekstury. Trójkąty wyświetlane są tylko jednostronnie.
Wariantem obiektu Mesh jest obiekt posiadający zero trójkątów (zwyczajowo zwany "bananem") służący tylko do grupowania potomnej geometrii w celu animacji.
FreeSpotLight Definiuje punkt świetlny widoczny z określonego kąta i aureolę poświaty w okół niego.
Stars Lista okólnych punktów świetlnych. Każdy o indywidualnie zdefiniowanym kolorze świecenia. Uwaga, odwrócona przestrzeń barwna!

Renderowanie:

Renderowanie odbywa się w dwóch przebiegach. Parametr materiału opacity definiuje, czy dany obiekt będzie renderowany w przebiegu przezroczystych opacity: 0. Wtedy wyświetlane są jego półprzezroczystości, ale sortowanie wielu planów półprzezroczystych kuleje i część takowych obiektów może nie być wyświetlana. Dla opacity: 100 przezroczystość ucinana jest do binarnej (w najnowszych exe dla alfy 50%) i nie ma problemu z sortowaniem.

Hierarchia:
Modele muszą mieć ustaloną hierarchię obiektów. Przy jej braku, e3d generuje obiekt nadrzędny trzymający resztę.
Obiektów powinno być jak najmniej. Dzielenie wymuszone jest:
-innym materiałem
-animacją
-innym zakresem widoczności
W pozostałych przypadkach obiekty powinny być łączone we wspólne siatki.
Hierarchię utrzymujemy możliwie płaską. Im mniej transformów do mnożenia w stosie tym lepiej.
Wszystkie nieanimowane obiekty powinny mieć transform będący macierzą jednostkową.

Tekstury:
Modele statyczne mogą mieć zdefiniowaną teksturę wymienną (Map: replacableskin) ustawianą parametrem we wpisie modelu na scenerii. Modele dynamiczne mogą mieć do czterech tekstur wymiennych (Map: -1 do -4) ustawianych parametrem we wpisie dynamic teksturename a pliki nazwane texturename,1.ext do texturename,4.ext. Czwarta tekstura wymienna może być przeznaczona na tablicę relacyjną pojazdu.

Tekstury powinny mieć rozmiar boku 2^n o dowolnych proporcjach. Inny jest logowany jako błąd i nie wyświetla się poprawnie na wszystkich kartach graficznych.
Obecnie używana jest jedynie tekstura diffuse. W przeciągu roku prawdopodobnie zostanie dodana opcjonalna tekstura normal i specular.
Tekstury tga zapisujemy z originem w lewym dolnym rogu.

Im mniej tekstur tym lepiej. Wiele małych tekstur ma uzasadnienie, gdy są one kafelkowane (mapowanie wykracza wielokrotnie poza przestrzeń UV 0-1), lub z danej tekstury będzie korzystać wiele modeli (przykładowo sprzęg wagonu). W innych przypadkach należy umieścić jak najwięcej elementów na wspólnej teksturze.

Animacje:
Model statyczny może mieć do ośmiu świateł. Obiektów wyświetlanych warunkowo. Sterowanych eventami, migającymi okresowo, wyświetlanymi zależnie od oświetlenia globalnego sceny.
Każdym obiektem można poruszać za pomocą animacji prostych przesunięcia i obrotu, wyzwalanych eventami.
Możliwe też są animacje automatyczne: http://rainsted.com/pl/Format_binarny_modeli_-_E3D#Rodzaje_animacji
Obroty przy animacjach automatycznych wykonywane są w okół osi Y w kierunku X>Z.

Polycount:
Polycount nie jest nijak normowany. Co modelarz to inne zasady, ale pamiętajmy, że robimy do gry komputerowej i cała ta geometria musi być liczona w czasie rzeczywistym.
Obiekty statyczne mają od kilkuset do kilkunastu tysięcy tri.
Obiekty dynamiczne od kilkunastu tysięcy do 150 tysięcy tri.
Kabiny są wyświetlane tylko raz, wiec tu można puścić wodze fantazji.

Jeśli geometria obiektu jest na tyle skomplikowana, że można ją uprościć przynajmniej pięciokrotnie, należy zastosować fazy LOD. Większość modeli ma tylko jedną fazę siatki uproszczonej oraz kilka stopni ukrywania detali. Nie ma przeciwwskazań stosowania większej ilości faz LOD.

Skrypty eksportowe:
Blender: http://eu07.pl/forum/index.php?action=dlattach;topic=26905.0;attach=81251
3ds Max: http://eu07.pl/userfiles/4220/priv-skrypty.rar

Strasznie nieskładnie i roboczo. Proszę zadawać pytania. Będę uzupełniał i poprawiał składność tekstu.

83
Baza infrastruktury / Ludziki z cadnav.com
« dnia: 16 Stycznia 2017, 19:01:53 »
Paczka ludzików z cadnav.com. 39 facetów, każdy w dwóch pozycjach. Każdy model z lodem.

Instalator do wersji dds: http://eu07.pl/userfiles/23180/posers_cadnav.r_i

Wersja TGA: http://eu07.pl/userfiles/23180/posers_cadnav.com.7z

Na stronie jest jeszcze kilka męskich modeli i kilkadziesiąt żeńskich. Mogę nagrać tutorial jak je konwertować oraz udostępnić swoje pliki pomocnicze (model lowpoly w t-pose i animacje), jeśli będzie zainteresowany. Jak powstanie repaint na mundur kolejowy, panów w garniturach można użyć jako maszynistów.

Dodane do repozytorium revision: 1994 . @Matek123

------------
Źródła modeli można znaleźć od połowy strony dziesiątej. Niestety nie widzę żadnej kategorii gdzie byłyby do kupy. http://www.cadnav.com/3d-models/human/man/index-10.html
Kobiety z tej serii też są, ale do nich musicie sami zrobić lowpoly, a to będzie wymagać więcej pracy, bo o ile panowie mają trzy rodzaje ubioru, to u pań już ciężko będzie wyrzeźbić coś uniwersalnego.
Devkit: http://eu07.pl/userfiles/23180/bugs-cadnav.com_posers_devkit.7z Plik max (9) męskiego lowpoly, użyte pliki animacji bipeda (do pozowania).

84
Bieżące Symulatorowe / Poprawka słupków hektometrowych
« dnia: 29 Marca 2017, 00:01:16 »
Jak wszyscy wiemy, słupki hekto mrugają. Mają konflikt bufora głębokości między modelem słupka a tabliczkami z numerem na trójkątach terenu.

Mamy dwa rodzaje słupków (mamy jakieś inne jeszcze w podfolderach?)
Trójkąty terenu na tabliczce:
slupek-hm.inc
slupek-hmmedium.inc
slupek-hmsmall.inc
Modele na tabliczce:
slupek-sredni.inc
slupek-szeroki.inc
slupek-waski.inc


---
W załączniku zmodyfikowane tekstury, ince, scenerie i nowe modele. Jeśli ktoś zobaczy po wgraniu tej paczki jakieś migające słupki hektometrowe, krzyczeć, podając scenariusz i współrzędne jego lokalizacji.

Grr, pomieszane parametry między wersjami są. Musze to jakoś ustandaryzować. Póki co ściągam bo paczkę sobie napsujecie i cofam repo.
Ince miały błędne komentarze co mnie zmyliło. Będzie standaryzacja do formatu slupek-hmmedium.inc, czyli:
p6=dziesiątki km
p7=jednostki km
p8=hektometr

Small miały:
p6=jednostki km
p7=nieużywane
p8=nieużywane
p9=hektometr

Uniwersalne
p6=jednostki km wyśrodkowane (0-9 km)
p7=dziesiątki km
p8=jednostki km
p9=hektometr

Jak skrypty 3ds Max i Rainsted się do tego mają?
Patrzę, że słupki rainstedowe mają jeszcze setki kilometrów jaki p6. Może tu przesunąć i zostawić szóstkę pustą dla zgodności?

Dla deweloperów: Plik slupek-hm.inc zostaje usunięty. Proszę podmienić na tworzonych sceneriach na slupek-hmsmall.inc dla <10km i na slupek-hmmedium.inc dla 10<km<100.

85
Baza infrastruktury / Kościół w Białym Kościele
« dnia: 25 Lutego 2017, 15:37:49 »
Model kościoła z miejscowości Biały Kościół. Dzwony biją o 7:30, 11:30 i 16:30.

Wersja TGA: http://eu07.pl/userfiles/23180/kosciol_bialy_kosciol.7z

Dodane do repozytorium. Rev. 1650.

86
Bieżące Symulatorowe / Opisy tekstur dla startera
« dnia: 19 Lutego 2017, 21:50:29 »
Rainsted ma możliwość wyświetlania komentarza dla każdej tekstury. Po wpisie w textures.txt można za dwoma slashami umieścić dowolną treść. Obecnie jest to wyświetlane tylko w zakładce tabor posiadany, ale mam nadzieję, że niedługo ujrzymy go również w pojazdy do edycji składu.
Proponuję jednolity szablon opisu, dający się formatować w tabelę, którą będzie można sortować i filtrować po poszczególnych kategoriach w przyszłości.
Chciałbym zawrzeć:
  • Oznaczenie eksploatacyjne
  • Właściciela/dzierżawiącego (kod EVN?)
  • Stację macierzystą
  • Datę rewizji
  • Zakład dokonujący rewizji?
  • Autora tekstury
Czyli dla naszego testowanego Rumcajsa byłoby:
303E-TV-477_HIST.TGA=303E-TV,EU07,EU07-477_HIST //EU07-477,PKPC,Wrocław,2006.11.10,Zakład_Taboru_w_Krakowie,LelekW miejsce nieznanych tokenów wstawiamy pytajniki, by parser dobrze to łapał.

Póki co czekam na opinie. Tabelę umieści się na stronie, jako listę autorów tekstur. Oczywiście będzie potrzebna wasza pomoc, bo jedna osoba całego taboru nie skataloguje. Zazwyczaj będzie to kwestia przepisania danych z tekstury, ilostanu i forum.

87
Bieżące Symulatorowe / Format mmd zgodny z YAML
« dnia: 25 Stycznia 2017, 17:18:53 »
Ra proponuje dostosować format mmd do specyfikacji YAML, póki co zostawiając stary parser. Ale ta zmiana pozwoli łatwo uprościć go w przyszłości. Można po potraktować jako wytyczne do nowych plików mmd. Jak ktoś ma ochotę zrobić przynajmniej część tych punktów na starych na repo, to oczywiście zachęcam. Nierangowych chętnych zapraszam do aplikacji do WPC.

http://rainsted.com/pl/Symulator/MaSzyna/Pliki_MMD

88
Poradniki / [INNE] Ekran komputera pokładowego w pythonie
« dnia: 20 Grudnia 2016, 21:13:09 »
Wstęp teoretyczny:
Symulator ma w siebie wbudowany moduł pythona interpretujący kod programu rysujący ekran. Jest on niekompilowany, możemy go dowolnie modyfikować notatnikiem przed inicjalizacją symulacji.
Moduł podmienia teksturę jednego obiektu w kabinie pojazdu generowaną dynamicznie.
Kod: ("SP42.mmd") [Zaznacz]
pyscreen: komp ekranikOznacza, że ekranem będzie obiekt (submodel w kabinie) "komp" a jego tekstura będzie generowana skryptem/funkcją "ekranik". Jeśli w danej kabinie nie zostanie znaleziony taki obiekt, zostanie on zignorowany.
Jak widać mamy tylko jeden obiekt, który w t3d może mieć tylko jedną teksturę. Przy kilku ekranach w pojeździe musimy je wszystkie scalić w jeden obiekt i mapować z różnych części jednej dużej tekstury. Zniesione. Pojazd może obsłużyć dowolną ilość skryptów.
Liczenie tekstury odbywa się w osobnym wątku, którego priorytet względem symulacji można ustawić w eu07.ini wpisem:
pyscreenrendererpriority normal // (normal, lower, lowest, idle) priorytet wątku pythonowego renderera. Odciąża procesor zmniejszając odświeżanie ekranów w lokomotywach.Ciężki skrypt na wolnym komputerze może znacznie spowolnić symulację. Niższy priorytet za to powodować, że klatka ekranu będzie liczona nawet raz na kilka tysięcy klatek symulacji, przez co ciężko będzie nawet dostrzec animację tekstury.

W pętli symulatora część wartości fizycznych naszego pojazdu/składu jest udostępniana do słownika pythona. Lista kluczy dostępna jest tutaj: https://wiki.eu07.pl/index.php/Python
Klucze rozpoczynające się frazą "eimp" oznaczają "electric induction motor parameter" i nie działają dla innych typów pojazdów. Niekiedy dokumentacja może też trochę wyprzedzać publiczne wersje exe.
Wartości fizyczne ze słownika mogą być wykorzystane w naszym programie. Dodatkowo możemy używać wartości uzyskanych z bibliotek wbudowanych w środowisko pythona. W ten sposób uzyskiwana jest choćby data systemowa, jako że symulacja nie ustawia konkretnej fikcyjnej daty.
Cały program jest jak zapewne się domyślacie napisany w języku python, więc wymagana jest podstawowa znajomość składni. Zazwyczaj nie trzeba wymyślać koła od nowa. Ekrany zawierają podobne dane. Wystarczy zmienić ich reprezentację graficzną i ustawić w dobrym miejscu, modyfikując gotowy kod.
Warto jednak przejrzeć podstawy https://docs.python.org/3/ lub znaleźć sobie dowolny, polskojęzyczny poradnik by poznać zasady inicjalizacji zmiennych, budowy funkcji, pętli, warunków.

Używamy głównie zmodyfikowanej biblioteki PIL-PILLOW. https://pillow.readthedocs.io/en/3.4.x/ W szczególności modułu ImageDraw.
Pozwala on na wczytanie grafiki tła, nakładanie na nią innych grafik, generowanie prostej grafiki wektorowej, napisów i eksport w postaci nowej bitmapy.
Taki proces właśnie jest przeprowadzany w naszym programie. Bierzemy teksturę ekranu, na podstawie zaczerpniętych i odpowiednio przeliczonych wartości fizycznych pojazdu rysujemy na niej napisy, słupki, diagramy, nakładamy ikonki i eksportujemy do bufora. Ten obrazek jest wysyłany do menadżera tekstur w głównym wątku symulatora i nakładany na obiekt zdefiniowany w mmd pojazdu.

Przykład:
Dostałem od @EP08_015 prośbę:

Cytuj
Data aktualna, predkosc cyfrowa pod predkoscia pasek rozszerzajacy sie domyslam sie ze to procent max szybkosci oraz oststni prad trakcyjny cyfrowy z paskiem sily trakcyjnej.

Ekranik musi się świecić w nocy. Świecenie jest atrybutem materiału obiektu a nie tekstury, więc pythonem na nie nie wpłyniemy. Ekranik ma się więc świecić cały czas/być podłączony pod universala. Częścią świecącą będzie sam czarny prostokącik (świecenie na czarno=brak świecenia).
Na teksturze którą otrzymałem ma on rozdzielczość 158x124 px. Nie wiem jaką ma w rzeczywistości, ale że ma być teksturą wyświetlaną przez symulator, musi mieć wymiary 2^n i jak wszystkie tekstury dynamiczne, mieć głębię 24 bitów.
Zeskalowałem podkładkę do 256^2 px. U dołu został biały pasek. Niestety musi zostać. Część tekstury się zmarnuje. Tak to wygląda obecnie:


Potrzebujemy więc:
1. Szare tło 256x256 px.
2. Pikselową czcionkę do cyferek.
3. Godzinę w symulacji.
4. Prędkość pojazdu.
5. Prąd trakcyjny silnika spal-ele.
6. Siłę trakcyjną.

Punktów 5-6 nie zrobimy, bo nie są zaimplementowane w exe471.

Otwieramy notatnik i zaczynamy pisać program.

Potrzebujemy tła. Zazwyczaj bierzemy jakiś rysunek na tło, ale tu jest jednorodne, wiec nie ma to sensu. Generujemy nowy plik. https://pillow.readthedocs.io/en/3.4.x/reference/Image.html#constructing-images

Z biblioteki PIL wczytujemy moduł Image. W nagłówku piszemy:
from PIL import ImageMamy teraz dostęp do wszystkich funkcji klasy Image

Tworzymy podstawową strukturę programu.
class ekranik(abstractscreenrenderer):
def __init__(self,lookup_path,name,cab):
#tu będą inicjowane stałe
def _render(self, state):
#tu będą zmienne odświeżane w każdej klatce

W metodzie render tworzymy nasze tło. Musi się odświeżać w każdej klatce by zakrywać stare napisy.
obrazek=Image.new(mode, size, color=0)mode=RGB (3x8-bit pixels, true color)
size=(256,256)
color=(57,57,57) (ciemnoszary, takie rgb odczytało mi z podkładki)
obrazek=Image.new(RGB, (256,256), color=(57,57,57))
I na końcu metody zwracamy finalny obrazek do bufora:
return obrazek
By móc coś rysować po naszym obrazku używamy funkcji Draw z modułu ImageDraw z biblioteki PIL.
Dodajemy ją do nagłówka. Razem z poprzednią będziemy mieć:
from PIL import Image, ImageDraw
W metodzie render po wygenerowaniu tła, ładujemy je do edycji, przypisując funkcję pod zmienną draw by nie pisać tego przy każdej funkcji korzystającej z niej później:
draw=ImageDraw.Draw(obrazek)
Zegarek:
Kopiujemy gotowy kod z traxxa:
#czas
if state['seconds'] != self.last_time_update:
dt = state['seconds'] - self.last_time_update
if dt < 0:
dt+=60
self.kilometry += dt*speed * 0.0002778
self.last_time_update = state['seconds']
if state['hours']<10: #dodaje zero przed liczbą gdy ma tylko jedną cyfrę
godz = "0" + str(state['hours'])
else:
godz = str(state['hours']) #zapisuje do zmiennej "godz" liczbę godzin jako string
if state['minutes']<10:
min = "0" + str(state['minutes'])
else:
min = str(state['minutes'])
if state['seconds']<10:
sec = "0" +str(state['seconds'])
else:
sec = str(state['seconds'])
Licznika kilometrów nam nie potrzeba, więc go usuwamy.
Mamy trzy zmienne z godzinami, minutami i sekundami. Wyświetlamy je na ekranie:
draw.text((x,y), godz +":"+ min +":"+ sec, fill, font)Musimy podać pozycję, kolor i czcionkę napisu. Użyjemy obecnej już w symulatorze czcionki Alterebro Pixel Font Regular. Otwieram w gimpie podkładkę i piszę nią napis by pokrył się ze zdjęciem. Odczytuję:
Lewy górny róg ramki tekstu (zero w grafice rastrowej): (7, 20)
Rozmiar: 68
Kolor jest strasznie zszarzały. Wezmę intensywniejszy (193,164,50)

W metodzie init definiuję czcionkę:
self.pixel = ImageFont.truetype(lookup_path + "Alterebro Pixel Font Regular.ttf", 68)Używam modułu ImageFont, więc dodaję go do nagłówka. Mamy tam już:
from PIL import ImageDraw, ImageFont, ImageDodajemy również nasz kolor. Można go za każdym razem podawać jako RGB, ale w ten sposób w jednym miejscu możemy go zmieniać jakby efekt był niezadowalający.
self.zolty = (193,164,50)
Pod stworzonym tłem rysujemy właściwy napis:
draw.text((7, 20), godz +":"+ min +":"+ sec, fill=selfzolty, font=self.pixel)Używamy domyślnej funkcji draw.text justującej do lewej. Składamy godziny, minuty i sekundy, oddzielając je dwukropkami. Zazwyczaj dwukropki migają z pulsacją 1s, ale nie wiem jak osiągnąć taktowanie 0,5s na wł/wył.
Do dyspozycji mamy trzy funkcje wypisujące tekst o niestety różnej kolejności argumentów. Oprócz tej jest justująca do prawej (czy raczej justująca pole na stałą ilość znaków do lewej a tekst w nim do prawej) i centrująca napis. Wszystkie funkcje naszego autorstwa są do wglądu w pliku: python\local\abstractscreenrenderer.py. Jeśli napiszecie coś mającego uniwersalny potencjał, warto rozważyć dodanie funkcji tam, by nie dublować w każdym skrypcie tego samego.
def print_fixed_with(self, draw, text, start_point, character_count, font, color, correction=0):
rozmiar_osemki = font.getsize("8")[0]
start_point_tmp = start_point[0]
for znak in range(len(text), character_count):
start_point_tmp += rozmiar_osemki-correction
for znak in range(0,len(text)):
rozmiar_act = font.getsize(text[znak])[0]
draw.text((start_point_tmp + rozmiar_osemki - rozmiar_act, start_point[1]), text[znak], font=font, fill=color)
start_point_tmp += rozmiar_osemki-correction

def print_center(self, draw, text, X, Y, font, color):
w = draw.textsize(text, font)
draw.text(((X-w[0]/2),(Y-w[1]/2)), text, font=font, fill=color)

Prędkościomierz:
W metodzie render (musi odczytywać prędkość co klatkę), odczytujemy wartość prędkości liniowej pojazdu (nie łapie poślizgu zestawów niestety; może kiedyś zmienimy).
speed = float(state['velocity'])Pod zmienną lokalną "speed" podstawiamy wartość wysłaną przez moduł fizyki jako zmiennoprzecinkową float.
Umieszczamy ją jako napis, podobnie jak z zegarkiem.
draw.text((21, 96), '%d' % speed, fill=self.zolty, font=self.pixel)"%d"-formatowanie; tylko część całkowita. Zamiast tego można by skonwertować ją do int.

Pasek procentu prędkości:
Musimy ograniczyć odczyt prędkości by nam nie wychodził poza zakres jak ktoś zacznie majstrować przy lokomotywie. SP32 ma Vmax=100km/h i taki zakres przyjmę, ze względu na brak wyskalowania prędkościomierza na ekranie.
if speed > 100:
speed = 100
Gdy zmienna przekracza 100, ucinamy do setki.

Mierzymy nasz pasek na maksymalnym wypełnieniu. Nie mam zdjęcia i nie wiem gdzie on się kończy, ale by się komponował na ekranie przyjmę następujące wartości:
Zero prostokąta (lewy górny róg): (17,150)
Rozmiar: (108,12)
Czyli rogi będą we współrzędnych: (17,150),(17,162),(125,150),(125,162)
Wzór na długość paska zależnie od prędkości, to:
x2=x1+(V/Vmax*dx)
Podstawiamy nasze dane i mamy:
x2=17+(speed/100*108)=17+1.08*speed
Rysujemy prostokąt którego lewa krawędź będzie w x1=17 a prawa w x2. Dla V=0 x2=x1 czyli pasek jest jednostkowy. Dla V=Vmax wypełnia cały zakres do x2=125. Podajemy dwa przeciwległe narożniki, poczynając od tego o mniejszych wartościach współrzędnych.
x2=17+1.08*speed
draw.rectangle(((17,150),(x2,162)), fill=self.zolty)

Prąd trakcyjny i pasek siły trakcyjnej:

Pasek siły trakcyjnej wymagał zmian w exe, stąd będzie działał tylko na 472+. Dodawanie nowych zmiennych jest banalne. Wystarczy odszukać ją w którymś z modułów pojazdu (mover/dynobj/train) i przekazać do pythonowego słownika w PyObject *TTrain::GetTrainState().
Siłę trakcyjną pobieramy jako "tractionforce" i wrzucamy jako pasek analogicznie do prędkości. Wcześniej musimy sobie zmierzyć siłę maksymalną, ale że mamy ją na ekranach diagnostycznych F1/F2, to nie jest to problemem. W innym przypadku można wyprowadzić tymczasowo wartość jako tekst na ekran pythonowy. Pomaga to w debugowaniu gdy dzieją się cuda, zwłaszcza przy implementacji nowych odczytów.
Prąd trakcyjny jest bardziej problematyczny. Mamy zmienną "im", ale w dieselelectric podaje ona prąd na wyjściu prądnicy głównej. Dokładnie to jest wyprowadzane na amperomierz analogowy. Oprócz prądu trakcyjnego mamy w nim prąd ogrzewania. Mamy dwie opcje. Możemy wbić się w funkcję liczącą ten prąd w mover.pas i dodać zmienną pomocniczą, łapiącą prąd przed dodaniem do niego prądu ogrzewania i to ją wyprowadzić na ekran. Wymaga to rekompilacji movera, co jest odrobinę problematyczne, przez błędnie generujące się nagłówki i gryzłoby się z przepisywaniem go na cpp. Druga opcja, to policzyć prąd ogrzewania w pythonie i odjąć go od odczytanego prądu całkowitego. Nie będę się w to zagłębiał, nie wiem czy ma on dostępne wszystkie potrzebne dane, bo nie to jest istotą tworzenia ekranu.

Całość kodu:
from PIL import ImageDraw, ImageFont, Image #Ładujemy biblioteki

class ekranik(abstractscreenrenderer): #klasa renderera
def __init__(self,lookup_path,name,cab): #inicjalizacja stałych
self.pixel = ImageFont.truetype(lookup_path + "Alterebro Pixel Font Regular.ttf", 68) #definicja czcionki na napisy
self.zolty = (193,164,50) #kolor na napisy

def _render(self, state): #pętla rendera

#czas
if state['hours']<10: #dodaje zero przed liczbą gdy ma tylko jedną cyfrę
godz = "0" + str(state['hours'])
else:
godz = str(state['hours']) #zapisuje do zmiennej "godz" liczbę godzin jako string
if state['minutes']<10:
min = "0" + str(state['minutes'])
else:
min = str(state['minutes'])
if state['seconds']<10:
sec = "0" +str(state['seconds'])
else:
sec = str(state['seconds'])


obrazek=Image.new(RGB, (256,256), color=(57,57,57)) #tworzymy nowy obrazek tła
draw=ImageDraw.Draw(obrazek) #ładujemy go do edycji

draw.text((7, 20), godz +":"+ min +":"+ sec, fill=self.zolty, font=self.pixel) #napis-zegarek

#prędkość
speed = float(state['velocity']) #odczyt prędkości
draw.text((21, 96), '%d' % speed, fill=self.zolty, font=self.pixel) #napis-prędkość

if speed > 100: #ucięcie prędkości jakby wyszła poza zakres
speed = 100
x2=17+1.08*speed #długość paska prędkości jako procent Vmax x2=17+(speed/100*108)
draw.rectangle(((17,150),(x2,162)), fill=self.zolty) #prostokąt procentu prędkości

return obrazek #wysyłamy finalny obrazek do bufora

Inne funkcjonalności:

Włączenie wraz z baterią:
Całość rendera wrzucamy w warunek na stan 'battery' a na tło po którym rysujemy dajemy wygaszony ekran, możliwie ciemny, bo musi mieć selfillum=true w materiale.

Mierniki kołowe:
Czyli coś w stylu siłomierza traxxa. Figury ograniczonej krzywymi nie możemy narysować o ile mi wiadomo. Obszedłem to przez rysowanie wycinku koła i zakrycie go prostokątną maską w kolorze tła z przezroczystym wycięciem na część która ma być widoczna. Uwaga na błąd powodujący osiąganie przez wartość fizyczną liczby niezgodnej z argumentem wypełnienia wycinka koła. Odsyłam do traxxa, bo jest ona przepuszczana przez gotową funkcję filtrującą, której nie rozumiem do końca.

Mierniki obrotowe:
Tu wymagane są podstawy geometrii analitycznej. Liczymy wskazówkę w stanie "na dwunastą" jako krzywą łamaną zdefiniowaną n punktów. Potem Każdy z tych punktów wyrażamy we współrzędnych biegunowych z zerem w osi obrotu naszej wskazówki. Za amplitudę przyjmujemy naszą wartość fizyczną po znormalizowaniu do zakresu miernika i skompensowaniu obrotem w lewo od położenia pionowego do zera na skali miernika. Przeliczamy to na współrzędne kartezjańskie i wyświetlamy. Uwaga, w istniejących ekranach mogą być błędy w zastosowanych funkcjach trygonometrycznych, skutkujące złym znakiem na wyjściu, co zostało zamaskowane mnożeniem wszystkiego przez -1. Zamiast kopiować kod, warto ustawić je prawidłowo.

89
Tabor kolejowy / PRZENIESIONY: Jak fotografowac na tekstury ?
« dnia: 29 Listopada 2016, 22:35:39 »
Ten wątek został przeniesiony do Poradniki.

http://eu07.pl/forum/index.php?topic=5365.0

90
Poradniki / [TEX] - Tutorial robienia tekstur latarni
« dnia: 26 Listopada 2015, 13:04:02 »
Może ktoś się skusi dołączyć do projektu jak opiszę wszystko krok po kroku. :) Ogólnie do tekstur też się nada.

1. Robimy zdjęcia.
Jak zrobić zdjęcia 8+ metrowego słupa nie mówiąc o zawieszonej nań oprawie? No nie bardzo się da. Gdy się odsuniemy na wymaganą odległość by skadrować całość, mało co będzie widać na naszych zdjęciach, a zwykły kompakt prześwietli krawędzie na kontrastującym tle nieba. Ja staram się skadrować słup od ziemi do wysokości około metra nad oznaczeniem słupa. Podobnie jak przy wszystkich obiektach, staramy się możliwie odsunąć od obiektu i zdjęcia wykonywać na maksymalnym zoomie optycznym by zredukować zniekształcenie soczewki (beczkę). Obchodzimy fotografowany obiekt wykonując zdjęcia co około 30 st. Im więcej, tym lepiej, ale potem mamy więcej sklejania. Ze względu na zniekształcenia na horyzontach naszej bryły obrotowej, użyteczny jest tylko środek, więc im więcej zdjęć po obwodzie, tym mniejsze zniekształcenia na teksturze. Jest to szczególnie istotne przy obiektach pokrytych napisami (butle, słupy ogłoszeniowe i.t.p.). W przykładowym słupie połowa zdjęć ma zdecydowanie za krótką ogniskową. Było to wymuszone szerokością peronu. Lepiej więcej się narobić przy obróbce, niż wpaść pod pociąg/samochód.
Przy okazji mierzymy obwody i wysokości elementów. Na ile wzrost nam pozwala.
Oprawy warto fotografować tylko gdy mamy możliwość znaleźć się na podobnej wysokości. Z okna budynku, chodnika mostu/wiaduktu. Ze względu na trudność wykonania zdjęć czegoś na takiej wysokości, warto przeszukać internet. Moja najładniejsza oprawa jest oteksturowana sklejką ze zdjęć producenta i portali aukcyjnych.

2. Sklejamy zdjęcia.
Zrzucamy sobie wszystkie zdjęcia do edytora grafiki rastrowej i układamy po obwodzie. W pierwszej kolejności ustawiamy prowadnice pionowe i korygujemy perspektywę tak, by słup przy podstawie miał taką samą średnicę jak u góry. (O ile oczywiście nie zwęża się w rzeczywistości. Latarnie zazwyczaj mają 2-4 segmenty o stałych średnicach) Następnie skalujemy je by uzyskać zgodną wysokość. W przykładzie mam czarny pas izolacji fundamentu, redukcję średnicy i biały pas z oznaczeniem. Zawsze mamy przynajmniej redukcję średnicy i poziom gruntu.


Następnie oddzielamy części o różnych średnicach na osobne warstwy i kadrujemy dokładnie. Wykadrowane elementy obwodu układamy na zakładkę tak, by duplikujące się fragmenty nakładały się możliwie dokładnie. Dla każdej średnicy osobno. Pierwszy element obwodu doklejamy również za ostatni by uzyskać zakładkę. Z krańcowych też będzie trzeba usunąć zniekształcone fragmenty. Dobrze by łączenie było na możliwie regularnej części. U mnie wychodzi koło napisu "PLK", więc dodam na koniec jeszcze warstwę "2" i łączenie wykonam gdzieś na niej. Na dolnym segmencie nie ma tego problemu, więc tylko duplikuję "1#1" i ustawiam za "9#1". Od razu scalam duplikaty, bo będę ich potrzebował na wspólnej warstwie (lub grupie, ale te w gimpie póki co średnio działają) o czym dalej.

Teraz bierzemy gumkę z rozmytą krawędzią i wymazujemy nakładające się fragmenty tak, by została z obu zakładek część o możliwie małym zniekształceniu.

Dla każdej warstwy (można połączyć górę i dół) ustawiamy jasność/kontrast/balans barw by uzyskać jednolitą sklejkę. Gdy jesteśmy zadowoleni z efektu łączymy wszystko do dwóch warstw - po jednej dla każdej średnicy.

Prostujemy linie, które powinny być proste już bawiąc się stempelkiem. Czarna i biała farba oraz żebra na redukcji średnicy. Bez przesady, bo to człowiek malował i nawet jak miał szablon, to nie wyszło mu idealnie równo. Wyprostowałem też nieco klapkę rewizyjną bo nie zrobiłem jej prostego zdjęcia. Dalszy retusz będę już robił na układzie, bo mój komputer nie pozwala na stempelkowanie dużych obszarów. Zeskaluję całość i praca stanie się znacznie przyjemniejsza.

3. Tworzymy teksturę
W swoich słupach zdecydowałem się na następujący układ tekstury. Całość ma proporcje 1:32 (128x4096px). Dolny segment dzielę na pół po obwodzie i te połówki wklejam jedna nad drugą. Nad nimi umieszczam obwód górnego segmentu już w całości.
By uzyskać ładną krawędź łączenia, tnę sklejkę w innym miejscu niż będzie ona przebiegać. Łączenie będzie przebiegać po prowadnicach. Zaznaczenie kopiuję na lewo jako nową warstwę. Potem wyretuszuję jego prawą krawędź by pasowała do tła nie dotykając okolic prowadnicy. Uzyskam w ten sposób piksel w piksel połączenie z sąsiadującym na mapowaniu fragmentem przy drugiej prowadnicy.

Kadruję dolny segment między dwoma prowadnicami. Umieszczam trzecią prowadnicę po środku tej warstwy. Zaznaczam pół dolnego segmentu i kopiuję do nowego pliku o podanych wyżej wymiarach, skalując go do 128px na szerokość. To samo robię z drugą połówką. Miałem nieparzystą szerokość, wiec tą u góry zeskalowałem o 1 px dla równego rachunku, ale równie dobrze można to zrobić potem na mapowaniu. Taka różnica w proporcjach nie powinna być widoczna na łączeniu.

Teraz przydadzą się wymiary. U mnie wysokość od ziemi do końca redukcji wynosi 145 cm. Obwód powyżej redukcji 75 cm. Ze zdjęcia poglądowego latarni szacuję z proporcji wysokość słupa nad redukcją na 5,4 m. Wysokości są znormalizowane, więc długość całej żerdzi przyjmę 9 m. Założę, że jest to typ EOC 9/2,5 by brakujące wymiary nie były z czapy. Z normy PN – EN 40-4:2008 przyjmę średnicę górną żerdzi na 13 cm co się zaraz przyda przy modelu.
Wracając jednak do tekstury. Górny segment ma mieć 75x540 cm (1:7,2). Sklejka jednak, po uzyskaniu ładnego łączenia i przykadrowaniu podobnie jak przy dolnej części, ma (1:4,6) bo w końcu na zdjęciach miałem tylko dół słupa. Liczę ile w pikselach powinna wynosić proporcjonalna tekstura i odpowiednio powiększam (nie skaluję) warstwę, dając pustą przestrzeń u góry. Teraz mierzę ile miejsca zostało mi na układzie po naniesieniu dolnych segmentów. U mnie jest to 3318 px. Góra po zeskalowaniu do 128px na szerokość zmieści się na połowie tekstury! Zmniejszamy rozmiar. :) Skaluję więc sklejkę góry do rozdzielczości 128x1270 px (lepiej zniekształcić proporcje, niż marnować miejsce), nanoszę ją na układ i jego górną połówkę wywalam. Ten słup jest dość gruby i niski, więc takie proporcje okazały się zbędne. W sumie to można zrobić proporcjonalnie i dodać więcej betonu na górę. Będzie wtedy można tym zmapować słupy na 10,5 m i tak zrobię.

Teraz pozostało domalować brakujące elementy słupa. Stempelek i plasterek w ruch. Staramy się uzyskać możliwie nieregularna powierzchnię. Mi wyszło takie coś. Spłaszczamy, konwertujemy do 24 bitów i eksportujemy do tga.

Teksturka gotowa. Teraz tylko nanieść ją na prosty model, co też pewnie opiszę w swoim czasie.

Strony: 1 2 [3] 4 5 6