- Symulator MaSzyna -

Symulator EU07 (i nie tylko) => Na warsztacie => Wątek zaczęty przez: ShaXbee w 29 Sierpnia 2014, 05:48:45

Tytuł: Zabawy z OpenGL 3.2/3.3+
Wiadomość wysłana przez: ShaXbee w 29 Sierpnia 2014, 05:48:45
Zrodelka: https://github.com/shaxbee/maszyna-client

Instrukcja kompilacji:


Build:

OpenGL:
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: ShaXbee w 16 Września 2014, 09:48:11
Na dzien dzisiejszy mam przygotowany szkielet z wymaganymi zaleznosciami na https://github.com/shaxbee/maszyna-client. Poki co kompiluje sie na Macu i Linuxie.

Tworzenie okna i inicjalizacja kontekstu jest robiona przy pomocy GLFW, rozszerzenia OpenGL sa ladowane przy pomocy GLEW, dodatkowo dorzucilem googlemock / googletest do unit testow.
Mam gotowa integracje flatbuffers (binarna serializacja/deserializacja) na osobnym repo wiec niedlugo zaczne pisac prosty loader modeli i renderer.
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: Sawi w 16 Września 2014, 09:56:59
@ShaX jako, że nie znam się na programowaniu zapytam otwarcie, jakich wad i zalet (opis dla laika) można się spodziewać po wykonaniu tej implementacji?
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: ShaXbee w 16 Września 2014, 14:42:23
To jest poki co tylko zbior luznych pomyslow.
Chcialbym zeby renderer nie mial artefaktow przy renderowaniu przezroczystosci, wprowadzic lepsze oswietlenie i umozliwic szybkie i latwe wyswietlanie duzej ilosci powtarzalnych obiektow (drzewa, trawa, ogrodzenia etc.).

Edit:
@Ra: Dodalem wstepna definicje binarnego formatu modeli: https://github.com/shaxbee/maszyna-client/blob/master/client/schema/model.fbs (https://github.com/shaxbee/maszyna-client/blob/master/client/schema/model.fbs) - masz pomysl co warto tam jeszcze dodac?
@Q: Jakies postepy z kompilacja pod windowsem?
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: Ra w 16 Września 2014, 18:09:37
Mi to nic nie mówi, poza tym nie mam czasu na takie rzeczy.
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: ShaXbee w 17 Września 2014, 09:05:46
@Ra: Mozesz zawsze zapytac? Naprawde oczekiwalbym choc odrobine wspolpracy...

Edit: Po drobnych zmianach i aktualizacji sterownikow projekt kompiluje sie i uruchamia u Q
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: ABu w 17 Września 2014, 12:21:37
Postuluję dodanie do "notatnika" listy kroków prowadzących do przeprowadzenia poprawnej kompilacji (łącznie ze wskazaniem narzędzi). Z tego co widzę na shoutBoxie trochę tam się z tym trzeba pobawić.
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: ShaXbee w 18 Września 2014, 11:27:55
Ok, wrzuce instrukcje po powrocie z pracy.

Kolejna obserwacja - obecnie w wydaniach MaSzyny umieszczamy modele binarne, ktore sa juz zoptymalizowane konkretna wersja EXE - powoduje to problemy przy zmianie optymalizacji / sposobu wyswietlania / formatu e3d.

Wobec tego proponuje zeby format binarny byl domyslnie niezoptymalizowany, nastepnie optymalizacja powinna byc wykonywana przy pierwszym ladowaniu modelu, a zoptymalizowany model zawieral sume kontrolna, ktora byla by tworzona na podstawie wersji EXE i ewentualnie sum kontrolnych zaleznych plikow (.mmd w YAMLu etc). Dzieki temu jakakolwiek zmiana powyzszych parametrow spowoduje ponowne wygenerowanie zoptymalizowanego modelu.
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: Ra w 18 Września 2014, 13:35:32
Nie potwierdzam. Format binarny zapisu modeli nie jest "keszem". Optymalizacja polega na wyjedynkowaniu transformów submodeli, które nie mają flagi animacji, i odpowiednim przeliczeniu wierzchołków tych submodeli, oraz ich potomnych. Nie bardzo widzę zakres, w jakim ta optymalizacja miała by być zmieniona. Gdyby wszystkie modele miały wyjedynkowane transformy wszędzie tam, gdzie faktycznie są one zbędne, to optymalizacja w EXE nie była by potrzebna. Ale na poprawienie modeli w tym zakresie można by się i po paru latach nie doczekać.

Jeśli chodzi o zmianę sposobu wyświetlania, to póki co nie padła żadna wiążąca propozycja, która by wymagała modyfikacji plików modeli. Nie widzę specjalnie sensu w robieniu rzeczy dla sztuki samej w sobie.

Zmian formatu E3D nie przewiduję, ponieważ z jednej strony włożyłem dużo pracy w jego optymalne opracowanie, a z drugiej przewidziany jest prosty mechanizmy rozbudowy. Można by ewentualnie zmienić sposób zapisu długości kromki, aby nie zawierała ona 8 bajtów długości nagłówka (dążąc do jakiejś tam zgodności ideologicznej np. z PNG), ale to jest sztuka dla sztuki i żadnych praktycznych korzyści z tego nie będzie.

Niezoptymalizowanym formatem jest T3D, który nie ma policzonych wektorów kontrolnych, wyjedynkowanych zbędnych transformów ani nie ma flag określających sposób wyświetlenie submodelu. Nie widzę korzyści z tworzenia osobnego bytu w postaci niby "niezoptymalizowanego formatu binarnego". Większym problemem są błędy w modelach T3D, w postaci niepotrzebnie namnożonych submodeli, źle ustawionych flagach przezroczystości, braku oznaczenia animowanych submodeli. Ponadto, przeprowadzanie dodatkowych operacji na modelach podczas ich wczytywania jest zbędnym marnowaniem czasu. Jeszcze większym problemem jest brak elastyczności w animacjach — dodanie chociażby nastaw hamulców w wagonach, czy ukrywanie zbędnych submodeli z poziomu MMD jest na razie niewykonalne.
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: ShaXbee w 18 Września 2014, 16:33:40
Fakt ze uzytkownicy musza usuwac E3D swiadczy ze jakis mechanizm trzeba dostarczyc - chociazby sume kontrolna. T3D sa ciezkie do dystrybucji i parsowania, E3D sa wzbogacane o informacje o chociazby animowanych submodelach.
Tytuł: Odp: Notatnik
Wiadomość wysłana przez: Ra w 18 Września 2014, 17:19:15
Muszą usuwać, gdy zamiast E3D dostają T3D. W prawie wszystkich przypadkach jest to związane z poprawieniem modelu T3D. Wczytywanie T3D jest niekorzystne przede wszystkim ze względu na konieczność policzenia wektorów normalnych, czego czas rośnie z kwadratem liczby trójkątów w submodelach.

W E3D można by wprowadzać dalsze zmiany, jak wyszukiwanie identycznych wierzchołków i wprowadzenie indeksów, rozpoznawanie zwielokrotnionych kształtów (np. wystarczy jedna kopia osi, a w T3D każda musi mieć osobno siatkę). Jednak z ankiet przeprowadzonych wśród użytkowników wynika, że czas wczytywania ani zagadnienia dotyczące plików modeli nie są kluczowe. Na pierwszy plan wysuwa się zapis stanu symulacji oraz oświetlanie scenerii, niemniej zagadnienia te dotyczą wygody i estetyki, a nie samej symulacji.

Z typowo symulacyjnych rzeczy należałoby uealastycznić zależności w sterowaniu lokomotyw poprzez wyprowadzenie ich z C++ do zewnętrznego języka, co wiąże się również uealstycznieniem definiowania animacji w kabinach. Druga potrzebna sprawa to syntezator nagrań dźwiękowych dla kierownika oraz operacji typu próba hamulca, bo obecnie jest to trochę zbyt sztywno robione. Trzecia rzecz, to synchronizacja w multiplayerze. Jako czwartą dałbym przejrzenie kodu pod kątem zacinania się. Nawet na sprzęcie z 60 FPS w każdym miejscu są zauważalne przycięcia. Podejrzewam, że może to być związane z kompilowaniem obiektów w sektorach, a być może są jakieś pętle/rekurencje w fizyce. Być może coś by się dało wydzielić do osobnego wątku (np. kompilację obiektów), ale z tym trzeba ostrożnie, bo szukanie błędów w wątkach będzie udręką.
Tytuł: Odp: Zabawy z OpenGL 3.2/3.3+
Wiadomość wysłana przez: Tolein w 18 Września 2014, 20:08:01
@ShaXbee Może warto popracować nad skryptami, tzn. przede wszystkim stworzyć skrypty generujące .e3d i przede wszystkim pozwalające twórcom zadbać o optymalizację modelu. Przykład: jeżeli twórca stworzy jedną oś, a pozostałe ustawi w modelu jako klony, to .e3d pozwala na zapis takiej właśnie optymalizacji (siatka osi zapisywana jest jednorazowo, klony to tylko indeksy odnoszące się do oryginalnego submodelu oraz właściwe transformy).
A i użytkownicy Blendera też liczą, że kiedyś ktoś im przygotuje skrypty.
Tytuł: Odp: Zabawy z OpenGL 3.2/3.3+
Wiadomość wysłana przez: Sawi w 18 Września 2014, 20:26:57
Skrypt generujący e3d zrobił jakiś czas temu @ISDR. Zatem nie trzeba nad tym pracować. Do Blenedra owszem by się przydały. Tym bardziej, że to darmowy program.
Tytuł: Odp: Zabawy z OpenGL 3.2/3.3+
Wiadomość wysłana przez: ShaXbee w 19 Września 2014, 10:21:04
@Ra: Przyjrzalem sie Pythonowi (CPython/PyPy), Javascript (V8) i Lua i szczerze mowiac ten ostatni mi sie najbardziej podoba - banalnie sie inetegruje z C, jest relatywnie niewielki, ma latwa skladnie i jest uzywany w wielu grach. Co do normalnych - dawno, dawno temu wrzucilem patch ktory to robil w O(n)
@Tolein: Tak, pracuje nad supportem Pythona, ale chcialbym zeby modele byly w nieco bardziej elastycznym formacie, ktory nie wymaga recznie pisanych parserow...
Tytuł: Odp: Zabawy z OpenGL 3.2/3.3+
Wiadomość wysłana przez: ShaXbee w 14 Października 2014, 05:36:23
Mam zrobione okolo 70% Pythonowych bindingow biblioteki flatbuffers, ktora mozna by uzyc do serializacji modeli. Czy ktos podjalby sie napisania skryptu do Blendera?
Tytuł: Odp: Zabawy z OpenGL 3.2/3.3+
Wiadomość wysłana przez: ShaXbee w 25 Marca 2015, 16:25:51
Zmiany - projekt pobiera sobie sam zaleznosci i je kompiluje, zamienilem tez przestarzaly GLEW na glbinding ktore daje nam bezpieczne API do OpenGL.

Edit:
Dodana zaleznosc do GLM, ktory zastepuje operacje macierzowe z OpenGL usuniete w profilu Core OpenGL.