Skocz do zawartości

Exigo

Użytkownicy
  • Postów

    1 165
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Exigo

  1. @Anty, kto jest autorem tych konceptów? Macie kogoś nowego w teamie (ostatnio wrzucaliście oferty na skillshota)? Tak zwyczajnie pytam, z ciekawości, bo koncepty pełną gębą. ;>
  2. Pierwszy pomysł: Niewykluczone że Game Maker ma wbudowany sprite batching, więc można mu pomóc rysując wszystko "wszerz", a nie "w głąb". Szkopuł tkwi w tym, że obiekty nie mogą na siebie nachodzić (obiekty, nie sprite). Poniżej pseudokod który pokazuje jak rysujesz obecnie (dla porównania). Poniżej pseudokod który może przyśpieszyć. W pierwszym rozwiązaniu VBO resetuje się za każdym razem przed narysowaniem tekstury (zakładając że nie używasz atlasu tekstur), czyli masz 3750 draw calli. W drugim rozwiązaniu tekstura zmieniana jest jedynie tyle razy, ile masz tekstur (czyli wyjdzie coś koło ~kilkunastu draw calli). Nie mam benchmarka na potwierdzenie, ale w innych silnikach taka strategia działa, tylko że bardziej komplikuje kod (optymalizacje mają to do siebie że komplikują, kek). Drugi pomysł (nie wyklucza się z pierwszym): Jeśli obrazki nie są dynamiczne, możesz rysować planszę do surface i przerysowywać ją tylko wtedy, kiedy coś się na niej zmienia. Przełączanie bufora (surface_set_target i surface_reset_target) może mieć duży narzut, czyli nie możesz robić tego per obiekt w evencie draw, ale globalnie, raz na klatkę lub rzadziej (bo inaczej będą krótkie "przywieszki" podczas przerysowywania; będziesz miał 25x25 bind calli). Trzeci pomysł (też się nie wyklucza): napisz swój shader wycinając niepotrzebne rzeczy (np. z blending który jest podawany jako atrybut w defaultowym shaderze). Elo.
  3. Exigo

    Galeria Grafik

    @I am Lord, nie jestem w stanie wskazać konkretnych źródeł. Musisz jednak zrozumieć że GLSL to dosć specyficzny język programowania i nie da się "nauczyć shaderów". Możesz nauczyć się języka, ale w zależności od tego co będziesz chciał robić (oświetlenie, rozmycie, etc.) to będziesz musiał odpowiednio dokształcić się w temacie żeby w ogóle wiedzieć co chcesz zrobić. W 90% przypadków będziesz adaptował gotowe rozwiązania, a nie pisał od zera. Większość rzeczy jest już wymyślona, tylko trzeba poskładać to w kupę żeby wyszło coś fajnego. Polecam stronkę ShaderToy jako źródło inspiracji, rozwiązań, oraz prezentacji tego co można zakodzić przy pomocy shaderów. Btw. warto śledzić ogarniaczy którzy poświęcają swój czas aby opisać "jak rozwiązałem pewien problem" by podzielić się tym na swoim blogu. Np. ostatnio dużo czerpałem z tego wpisu implementując flary anamorficzne (artefakty kamery) o których chyba kiedyś wspominałem. To jest jeden z przykładów, a takich jest bardzo dużo w sieci. @Milena78, dzięki. Co do pytania: polecam materiały tego typu co podlinkowałem wyżej.
  4. Exigo

    Galeria Grafik

    @I am Lord, 10% całego kodu gry to shadery w GLSL, czyli całkiem sporo. Z gameplayem średnio, bo jedyne co można na tą chwilę zrobić to przemieszczać jednostkami. Wygląda na to że muszę zmienić priorytety. @Ignatus, docelowo chcę aby mechanika dzieliła się na dwie warstwy: pierwsza, główna, to taktyczna gra czasu rzeczywistego w której musisz wygrać bitwę posiadając z góry narzucony pakiet jednostek posiadając na boku jakąś mini-misję, a druga, w skali makro byłaby bardzo uproszczoną turówką w której musisz podbić galaktykę podzieloną na regiony dające pewne bonusy, np. unikalną jednostkę lub takie, które wzbogaciły by bardziej mechanikę (np. dwie akcje na turę, czy coś w tym stylu). @koziu, założę się że twoja gra przy obecnym stanie rzeczy ma bardziej zaawansowany design od mojej.
  5. Exigo

    Galeria Grafik

    Miałem lekką przerwę z RTS-em, ale niedawno wróciłem do prac. Przepisałem sporą część kamery i renderera odchodząc od rzutu ortogonalnego i sztucznie wyliczanej paralaksy na rzecz perspektywy; batcher ma teraz oś Z. Musiałem dopisać frustuma do obcinania sceny (wcześniej to był prostokąt) oraz reprojekcję myszki ekran->świat żeby można było kontrolować jednostki. Działa. Póki co, materiałów zawartych poniżej jeszcze nigdzie nie wrzucałem po za GMC. * Nowy efekt silników wzorowany na samolotach odrzutowych (są bardzo charakterystyczne). Tu gif: http://imgur.com/Dljy8vO * Tu gif jak sobie latają z widocznym efektem (nowej) paralaksy: http://imgur.com/KLnPVcF * Album do którego wrzucam co jakiś czas nowe animacje / screenshoty, pełniący rolę pamiętniczka lub devloga: http://imgur.com/a/IQG1D Poniżej prezentacja nowego świata:
  6. Exigo

    Galeria Grafik

    Zamockowałem interfejs przed właściwą implementacją. Te widgety (bloki z paskami na górze) mogą być (będą) klikalne. Na przykładzie jest "grupa 3" oraz "formacja delta". Podczas aktywacji widget płynnie się rozszerza oraz rozjaśnia. Tła widgetów rozmywają treść znajdującą się za ich warstwą + lekki overlay. Taka jest cała idea. Czcionka to Microgramma. Obawiam się że ograniczenie kolorów (wszystko jest monochromatyczne) utrudni czytelność (brak czerwieni/zieleni).
  7. Exigo

    Galeria Grafik

    @Wojzax, ogarnij jeszcze rigowanie, bo bez tego postacie nie mają żadnej wartości poza tej prezentacyjnej (szczególnie że masz go w T-pose więc kwestia dodania kości). W twoich pracach z modelu na model jest coraz bardziej pro. :) @I am lord, fakt. Myślałem o dodaniu dodatkowej "warstwy" do logiki poruszania statków, coś w stylu flockingu/boidów. Kiedyś zrobiłem proof of concept tej techniki (symulacje na bazie agentów), napisane w Scali, tutaj link do projektu na githubie. Asteroida generowała by wektor separacji jak reszta statków, ale zdecydowanie większy. Bardzo proste rozwiązanie. Wracając, obecnie jest dużo kodu odpowiedzialnego za relacje squadów oraz jednostek między nimi, które mogą mieć wspólne cele (atak/ruch do punktu/etc.) łącząc się w tymczasowe kolektywy które się rozpadają po osiągnięciu celu. Kiedyś trawiłem na write-up od programisty z Ensemble Studios, Dave-a Pottinger-a, który w obszerny sposób opisał parę patentów na przemieszczanie się jednostek w ichniejszych RTS-ach. Aż kupiłem Age of Mythology na Steamie żeby sobie to samemu przeklikać; taka mała inżynieria odwrotna. Oczywiście nie skończyło się na klikaniu, a na maratonie przejścia wszystkich kampanii (nie mogłem się powstrzymać tej pokusie, gra jest za dobra). :jezor: Przed chwilą zacommitowałem proceduralne generowanie asteroid na podstawie tekstury-mapy. W skrócie: wczytujecie bohomazy, a z czerwonego kanału generowana jest mapa asteroid. Poprawiłem też rysowanie kamieni. Ziarno pseudo-losowości brane jest z pozycji i intensywności koloru (random to mersenne twister - daje najlepsze efekty). Generalnie ustaliłem sobie za cel łatwą edycję treści. W tym przypadku odpalając MSPainta otrzymuje się pełnoprawny "edytor map". Złożone dane przetrzymywane są w JSONach (statki, definicje materiałów do renderowania, etc).
  8. Exigo

    Galeria Grafik

    @hamtaren, tak, Homeworld jest główną inspiracją. Ostatnio ograłem Deserts of Kharak i przez klimat już do reszty mi odbiło. Co do drugiego planu: wcześniej była bieda i same statki. Nie dało się zorientować w przestrzeni (przez brak "uchwytu" dla oka). Od kiedy dodałem jakieś statyczne asteroidy w tle, jest już lepiej. Docelowo chcę uzyskać jakąś sztuczną perspektywę (ale nie wpływającą na gameplay; jedynie jako efekt wizualny) oraz delikatny pył dla podkreślenia głębi. @Nikas, no żyję. :) Jakoś ostatnio urwał się kontakt. Teraz jest jakiś wysyp jamów/eventów więc można utworzyć okazję i zobaczyć się.
  9. Exigo

    Galeria Grafik

    Dawno się tu nie udzielałem. :) Sorry za 13MB. Nie potrafię robić gifów. Wyłączyłem UI na czas nagrania. Piszę w wolnych chwilach, po za pracą i życiem. Tech to LWJGL + Kotlin (swoją drogą, ######sty język).
  10. Być może źle używasz batchera. Powinieneś mieć, nie wiem, coś koło max 3-4 draw calle na klatkę. Największy performance uzyskasz używając atlasu tekstur. Winowajce masz tutaj (przykład): https://github.com/libgdx/libgdx/blob/maste....java#L232-L233 (linie 232-233). Każde przełączenie tekstury wymusza flusha, czyli wyrenderowanie i całkowity reset VAO który uzbierałeś do buforu - tym jest właśnie draw call. Jeśli jednak koniecznie nie chcesz używać atlasu, posortuj chociaż rysowania po teksturze, czyli coś w stylu: najpierw wszystkie chmurki, potem wszystkie gwiazdki, etc. Ale to będzie trochę na około problemu (da się zejść do poziomu 1 call == 1 aktywna tekstura). Ostatecznie możesz też zmodyfikować batchera i jego shader; wymaga to lekkiej znajomości OpenGL-a (+ GLSL-a). Samo API dostarcza taką możliwość. Batcher, w założeniu, służy "do wszystkiego" i jest idioto-odporny, więc ma nawalone jakichś zbędnych macierzy, dodatkowych atrybutów (niepotrzebny color? przez które jest potem wszystko przemnażane (a przez cały lifetime shadera wynosi vec4(1, 1, 1, 1) i zaśmieca VAO)), etc., dużo ficzerów których pewnie i tak nigdy nie użyjesz. Jak się postarasz i sprecyzujesz co dokładnie chcesz rysować, z połowę tych rzeczy można zwyczajnie wyciąć, co zoptymalizuje sam shader jak i CPU który jest akurat największym bottleneckiem dla batchera (bo skalowanie, rotacja, translacja - wszystkie są na cpu, TAK, CPU!, czytaj: wszystkie przekształcenia macierzowe (w 2d jest proste cos/sin, ale wciąż), robi Java a nie karta). Np. niesamowicie da się zoptymalizować renderowanie sceny opartej o siatkę (przykład z życia). Mam nadzieję że pomogłem. :) Polecam przejrzeć source i zobaczyć jak on działa. Im więcej rozumiesz co jest w środku, tym większe triki możesz z tym robić. Dawno tu nie pisałem. ;D
  11. Jest też opcja zapisywania tego w bitmapie - w sumie najciekawsza z możliwych. :D Tylko nie wiem jak z prędkością odczytywania kolorów z piksela. Plus jest taki że nie musisz sobie pisać dedykowanego edytora (jak to ma miejsce w plikach binarnych), a jedynie zwykły Paint wystarczy do edycji. Zapisujesz sobie do kanału R typ obiektu, a na B kąt - zostały ci jeszcze dwa puste (oczywiście nic nie stoi na przeszkodzie aby obsługiwać sobie więcej niż jedną bitmapę).
  12. No to posortuj sobie obiekty aby mieć gwarancję zachowania kolejności. Ustaw jakąś flagę na początku pliku jaka jest maksymalna szerokość i wysokość. Nie będziesz musiał wtedy odczytywać wartości w stylu "[b_88X96]". W ogóle wrzuć najlepiej cały plik, bo w sumie nie wiem na czym tak naprawdę pracujesz (czy określasz puste pola czy nie). Btw. obczaj to: https://github.com/bjorn/tiled/wiki/TMX-Map-Format Jest to chyba najbardziej popularny format do tile-map. Możesz sobie dopisać jakiś prosty parser tego, lub po prostu się zainspirować. :)
  13. Spróbuj zapisywać binarnie, nie tekstowo. Dostaniesz kilkukrotnego boosta przy wczytywaniu.
  14. Co ty na to? Bardziej multiplatformowo już się nie da.
  15. Najs, nie wiedziałem. Widzę że doszło sporo sensownych rzeczy. :)
  16. Odpowiadając na twoje pierwsze pytanie: Dodawaj różnicę między kątem postaci a kątem ręki po czym przemnóż przez jakąś wartość. Problem leży w wyliczeniu tej różnicy - trzeba usunąć przeskok między kątem 360 do 0. Wygrzebałem tą funkcję z moich code snippets-ów. Sęk w tym że jest w Javie - musisz przepisać te modulo (procenty) na jakieś gml-owe odpowiedniki (a o takich nie pamiętam, chyba "mod"?). GML public static float angleDifference(float angle0, float angle1) { return ((((angle0 - angle1) % 360) + 540) % 360) - 180; } A to co opisałem na początku, wyglądało by mniej więcej tak. GML katReki += angleDifference(katPostaci, katReki) * 0.25;
  17. Exigo

    Warlocks

    Fajno. Taki big daddy and little sister. Je**ć bluberów.
  18. Exigo

    Wybór szkoły

    Btw. nie bój się przeprowadzki jeśli takowa stoi gdzieś na przeszkodzie. Bardzo dobre doświadczenie.
  19. Exigo

    Wybór szkoły

    Zrób jak uważasz. Ja dużego wyboru nie miałem. Ale chyba najsensowniej jest odznaczenie pozycji w rekrutacji zaczynając od najbardziej "wymagającej/najlepszej/najbardziej polecanej?", w dół. Jak się dostaniesz do pierwszej opcji - bardzo dobrze, widocznie tam pasujesz. W sumie całe to ustalanie priorytetów zostało w tym celu opracowane, prawda? ; ) Btw. nikt nie będzie patrzył do jakiego liceum/technikum chodziłeś (choć pozytywnie napisany egzamin zawodowy jako efekt uboczny technikum jest spoko). Najważniejsze w tym przypadku jest zdać jakoś sensownie maturę która jest wąskim gardłem.
  20. Exigo

    Wybór szkoły

    Dawno temu miałem podobny problem. Poszedłem do technikum i nie żałuję. Ujmując, jeśli masz już jakieś zainteresowania: wybierz tak, aby móc w stanie poświęcić jak najwięcej czasu sobie, jak i swoim projektom w tym kierunku.
  21. Pisze sobie swojego Game Maker-a. Hue-hue. ^^ Na razie taki proof-of-concept. Rysowanie/window/input z GLFW, tekstury SOIL2, język skryptowy AngelScript. Póki co proste rzeczy typu rysowanie prostokąta (patrz: kod). Działa. GML float s; void _atstart() { s = 0; } void _mainloop() { s += .0125; float x = cos(s) * 24; float y = sin(s) * 24; drawRectangle(16 + x, 16 + y, 32 + x, 32 + y); }
  22. Ojej. Czy mi się zdaje, czy transformacje (d3d_transform_...) nie działają na html5? :o Narobili tych portów od cholery, chyba na siłę. Co chwila jakieś bugi.
  23. Mały bump. Pytanie: Ktoś orientuje się czy jest szansa na wbudowany (nie w ide, a wewnątrz skompilowanej aplikacji) glsl compiler? Tzn. gdzie wywołanie w kodzie czegoś w stylu shader = compile("vertex code", "fragment code") byłoby jak najbardziej normalne. Na tą chwilę niczego takiego nie ma, a potrzebuję tego do deferreda - otóż chcę skompilować różne warianty shaderów dla różnych ilości świateł żeby ograniczyć przerysowywania surface-ów n-razy. To by niesamowicie przyśpieszyło proces. Btw. z ten tile renderer co piszę już w sumie działa. :)
  24. Myślałem że nadal można wczytywać format TGA. To już trochę przegięcie. (kontynuując jazdę po studio)
×
×
  • Dodaj nową pozycję...