Autor Wątek:  Zabawy z OpenGL 3.2/3.3+  (Przeczytany 9845 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Zabawy z OpenGL 3.2/3.3+
« dnia: 29 Sierpnia 2014, 05:48:45 »
Zrodelka: https://github.com/shaxbee/maszyna-client

Instrukcja kompilacji:
  • Pobierz zrodla z repo
  • Zainstaluj Microsoft Visual Studio Express 2013
  • Zainstaluj CMake
  • Uruchom CMake, ustaw 'source directory' na katalog do ktorego sciagnales repo, a 'build directory' na nowy, czysty katalog
  • Kliknij Configure/Generate i wybierz opcje Microsoft Visual Studio 2013
  • Otworz wygenerowany projekt visual studio z katalgu ustawionego wczesniej w 'build directory'


Build:

OpenGL:
  • Minimalna wersja OpenGL 3.2
  • Wyswietlanie tylko GL_TRIANGLE
  • Modele w formacie binarnym, optymalizacja modeli offline
  • Geometry instancing dla powtarzalnych obiektow
  • Frustrum culling / system czasteczkowy na GPU przy uzyciu transform feedback
  • glMultiDrawArraysIndirect - renderowanie wielu obiektow przy uzyciu jednego wywolania
  • Aliasy do tekstur - binding tekstur dla wielu submodeli jednoczesnie (do 32 jednoczesnie)
« Ostatnia zmiana: 14 Października 2014, 05:43:10 wysłana przez ShaXbee »

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Notatnik
« Odpowiedź #1 dnia: 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.

Offline Sawi

  • Zasłużony dla Symulatora
  • Wiadomości: 9228
  • O.M.D - Electricity, O.M.D - Enola Gay. 01.09.2012
    • Zobacz profil
  • Otrzymane polubienia: 750
Odp: Notatnik
« Odpowiedź #2 dnia: 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?
« Ostatnia zmiana: 16 Września 2014, 10:01:30 wysłana przez Sawi »
Życie jest bardzo kruche i w najmniej oczekiwanym momencie tracisz bliskich. Nie widzisz kogoś lata i nagle już tej osoby nie ma :(. Jedynie co tobie zostaje, to wspomnienia http://www.youtube.com/watch?v=Rk_sAHh9s08 "Co mnie nie zabije, to mnie wzmocni".

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Notatnik
« Odpowiedź #3 dnia: 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 - masz pomysl co warto tam jeszcze dodac?
@Q: Jakies postepy z kompilacja pod windowsem?
« Ostatnia zmiana: 16 Września 2014, 16:34:38 wysłana przez ShaXbee »

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6340
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 368
Odp: Notatnik
« Odpowiedź #4 dnia: 16 Września 2014, 18:09:37 »
Mi to nic nie mówi, poza tym nie mam czasu na takie rzeczy.
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Notatnik
« Odpowiedź #5 dnia: 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
« Ostatnia zmiana: 17 Września 2014, 12:03:18 wysłana przez ShaXbee »

Offline ABu

  • Zasłużony dla Symulatora
  • Wiadomości: 514
    • Zobacz profil
  • Otrzymane polubienia: 46
Odp: Notatnik
« Odpowiedź #6 dnia: 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ć.
ABu

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Notatnik
« Odpowiedź #7 dnia: 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.

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6340
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 368
Odp: Notatnik
« Odpowiedź #8 dnia: 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.
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Notatnik
« Odpowiedź #9 dnia: 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.

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6340
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 368
Odp: Notatnik
« Odpowiedź #10 dnia: 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ą.
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline Tolein

  • Wiadomości: 483
  • Kanapowy Toromistrz
    • Zobacz profil
  • Otrzymane polubienia: 1
Odp: Zabawy z OpenGL 3.2/3.3+
« Odpowiedź #11 dnia: 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.
"Podejrzewam, że:
1. poświęcają na to niewiele czasu,
2. mają ograniczoną liczbę zwojów mózgowych, przez co są w stanie wykonywać tylko proste i powtarzalne czynności,
3. wydaje im się, że mogą nawet podbić kosmos, ale życie weryfikuje im to negatywnie."

Offline Sawi

  • Zasłużony dla Symulatora
  • Wiadomości: 9228
  • O.M.D - Electricity, O.M.D - Enola Gay. 01.09.2012
    • Zobacz profil
  • Otrzymane polubienia: 750
Odp: Zabawy z OpenGL 3.2/3.3+
« Odpowiedź #12 dnia: 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.
Życie jest bardzo kruche i w najmniej oczekiwanym momencie tracisz bliskich. Nie widzisz kogoś lata i nagle już tej osoby nie ma :(. Jedynie co tobie zostaje, to wspomnienia http://www.youtube.com/watch?v=Rk_sAHh9s08 "Co mnie nie zabije, to mnie wzmocni".

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Zabawy z OpenGL 3.2/3.3+
« Odpowiedź #13 dnia: 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...
« Ostatnia zmiana: 19 Września 2014, 10:23:58 wysłana przez ShaXbee »

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Zabawy z OpenGL 3.2/3.3+
« Odpowiedź #14 dnia: 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?

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Zabawy z OpenGL 3.2/3.3+
« Odpowiedź #15 dnia: 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.
« Ostatnia zmiana: 29 Marca 2015, 18:08:29 wysłana przez ShaXbee »