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.


Wiadomości - Dragomirus

Strony: [1] 2
1
Projekty rozpoczęte / Odp: Prezentacja mojego silnika MagicEngine
« dnia: Listopad 28, 2017, 23:17:39 »
@up
No właśnie im więcej robię coś w tym edytorze tym bardziej ten szczegół mnie denerwuje, więc jak najbardziej pewnie na końcu to zmienię :P

Jako, że dokopałem się do screenów mojego silnika z 2014/2015 roku to udostępniam bo chyba warto zobaczyć ten old school :P. Całość była pisana w Javie (bez OpenGLa jeszcze) i miała to być wersja 2D. Połączenie socketowe było tragiczne i ciągle sypało wyjątkami. Ponad to taka ciekawostka: część grafik była wzięta z Tibii w wersji 3.1 (1997 rok):

https://imgur.com/a/VTEwO
Okno tworzenia postaci

https://imgur.com/a/do0Ac
Edytor do tworzenia przedmiotów i obiektów

https://imgur.com/a/XHOcw
Edytor do tworzenia lokacji

https://imgur.com/a/0GhVY
Widok zmiany stroju

https://imgur.com/a/cCl81
Jakaś tam karczma. Widok niestety z edytora bo musiałbym skonfigurować bazę danych żeby wrzucić widok z gry :/

https://imgur.com/a/lEGhn
Jakieś pole i wieżyczka

https://imgur.com/a/8dVZQ
Świątynia, gdzie zaczynało się grę i kawałek portu.

2
Projekty rozpoczęte / Prezentacja mojego silnika MagicEngine
« dnia: Listopad 28, 2017, 15:24:33 »
Witajcie,
od czasu do czasu po pracy włączam sobie kompilator i coś tam próbuje sobie napisać własny silnik do tworzenia gier MMORPG 3D. Ogólnie to zacząłem to jako projekt na studia w 2014 roku, ale dopiero chyba teraz zaczyna to cokolwiek przypominać bo trochę więcej wiem o programowaniu gier :P (może później wrzuce jakieś stare fotki).

Korzystam z:
 - modułu algorytmiczngo silnika LibGDX -> mapy, tablice, sortowanie
 - moduł matematyczny silnika LibGDX -> wektory, kwaterniony, macierze (większość obliczeń jest liczona w C++)
 - LWJGL
 - Kryonet
 - Java
 - OpenGL (min. 4.0)
 - SWING

To sam już zrobiłem:
 - obsługa strumieniowania z plików (wszystko jest liczone i robione w C++)
 - obsługa shaderów: vertex, geometry, tessellation evaluation, tessellation control, fragment
 - wstępne ładowanie tekstur z plików PNG (w przyszłości może jakiś własny format plików) i obsługa atlasów tekstur
 - obsługa wielu canvasów jednocześnie, które dzielą context openGL'a pomiędzy sobą
 - obsługa sieciowa po TCP/IP, działa przesyłanie pakietów i szyfrowanie XTEA (dla pakietów), RSA (dla pakietu logowania)
 - kamera ortograficzna
 - biblioteka do wyświetlania figur geometrycznych na ekranie (2D i 3D)
 - biblioteka do wyświetlania GUI (2D)
 - projekt wstępnej kamery projekcyjnej (w tym tzw. fly camera)
 - wstępny projekt skydome
 - wstępne wyświetalnie terenu oparte na tesalacjii i drzewie czwórkowym
 - skończony edytor do lokalizacji i przypisywania voice overów

W planach:
 - skończyć material editor (60%)
 - zabrać się za katalog do assetów
 - zabrać się za edytor siatki

I poniżej póki co tylko podgląd na to co obecnie można jedynie zobaczyć, czyli mój edytor materiałów, który jest skończony w jakiś 60%. Ogólnie to inspiracja płynie z silnika Redkit 2 (Wiedźmin 2) bo edytor sam w sobie dawał mnóstwo swobody i można było stworzyć w nim większość shaderów, ale żeby nie było trochę rzeczy zrobiłem po swojemu (jak atrybuty) żeby po prostu było trochę czytelniej i bardziej poukładane.

https://imgur.com/CXLKwZc
Początkowy wygląd diagramów, gdzie niebieskie bloki oznaczały uniformy, a czerwone zmienne.

https://imgur.com/Ys477EH
Wstępny szkic atrybutów, które są przekazywane z vertex shadera do fragment shadera oraz końcowy output node czyli obliczenie konkretnego koloru piksela.

https://imgur.com/tkwodFi
Wszystkie nody odpowiedzialne za obliczenia matematyczne (na razie tylko te co są dostępne w redengine 2) oraz nowy uniform - czas.

https://imgur.com/0nzTEkR
Tutaj widać, że node editor zaczyna tłumaczyć nody na język glsl. Na pomarańczowo zmienne, na niebiesko uniformy.

https://imgur.com/FxV52yF
Tutaj edytor zaczyna tłumaczyć połączenia pomiędzy nodami na język glsl.

https://imgur.com/A6J8wol
Tutaj widać wielki test dodawania kilku wartości :P.

https://imgur.com/qXd2tBQ
Tutaj dodana reszta funkcji matematycznych. Widać, że jak edytor musi dodać wektor4D i floata to tego drugieo przekształca do wektora4D.

https://imgur.com/QpO16fR
Widok drzewa atrubutów w edytorze. Działa zmiana parametrów dla zmiennych w glslu. Zasada jest taka, że wyszstke uniformy mają ustawione standardowe wartości. Jeżeli użytkownik zmieni, któryś z nich w edytorze modeli (wkrótce) to tworzy się nowa instancja materiału z tym zmienionym paramterem.

https://imgur.com/vu0BOKl
Widok drzewa atrybutów dla tekstur. Myślę, że tutaj możnaby zrobić troszeczkę większe te tekstury.

Mam nadzieję, że uda mi się na bierząco aktualizować zmiany w silniku. Jak ma ktoś jakieś sugestie, rady i uwagi to proszę o komentarz, będę bardzo wdzięczny :).

3
Serwis / Nie można założyć konta
« dnia: Listopad 27, 2017, 15:37:25 »
Od kilku miesięcy chcę założyć konto na Warsztat.gd (tutaj wszystko działa), ale po utworzeniu (robiłem tak z dwoma mailami) konto zostaje utworzone, ale hasło nie może zostać wysłane (komunikat taki). Próbowałem parę razy zgłosić to przez formularz kontaktowy z kilku różnych komputerów, ale za każdy razem jest informacja: "Could not open socket". Co robić?

4
OpenGL / Odp: OpenGL shader node editor
« dnia: Listopad 24, 2017, 15:52:35 »
Dzieki wielkie za pomoc :). Chce wstawic screen z edytora bo prawie skonczony jest, ale cos nie moge sie zarejestrowac na stronie warsztatu. No nic jeszcze raz wielkie dzieki :)

5
Programowanie grafiki / Odp: Cube mapy - real vs fake
« dnia: Listopad 14, 2017, 14:03:15 »
Ok dzięki za odpowiedź i super, że pomogliście to zrozumieć od środka bo pewnie w żadnej książce czy tutorialu bym tego nie znalazł. Jeszcze raz dzięki :)

6
Programowanie grafiki / Odp: Cube mapy - real vs fake
« dnia: Listopad 13, 2017, 22:34:12 »
Dzięki za odpowiedź, strasznie byłem ciekawy i jednocześnie zaskoczony tym bo nigdy się wcześniej z takim czymś nie spotkałem, żeby prerenderować sobie cube mape, a jak widać oszczędza to dużo fpsów pewnie :). Co do dynamicznego oświetlenia to mam coś takiego zaimplementowane w moim silniku i teraz pytanie czy w takim przypadku robię zamiast jednej prerenderowanej cube mapy robię dwie, gdzie na jednej jest otoczenie, a na drugiej samo słońce lub księżyć i blenduje te dwie tekstury? Bardzo jestem ciekaw jak to się robi żeby dodać właśnie to źrodło światła :)

7
Programowanie grafiki / Cube mapy - real vs fake
« dnia: Listopad 13, 2017, 18:04:41 »
Ostatnio natrafiłem na jedną dziwną rzecz w silniku do wiedźmina 2. Otóż jak się okazuje elementy metaliczne mają coś takiego jak cubemap do odbijania otoczenia. Ku mojemu zdziwieniu nie jest to jednak prawdziwa wyrenderowana cube mapa a fejkowa (wcześniej przygotowana, gdzie jest po prostu słońce i jakiś kawałek losowego terenu rozmazany) i teraz moje pytanie jest czy to normalne w dzisiejszych grach? Niestety nie mam wglądu w silnik wieśka 3, ale możliwe, że tego nie zmieniali.

Po prostu chciałbym wiedzieć, czy rzeczywiście dla przedmiotów jest sens generowanie cube mapy w czasie rzeczywistym czy nie lepiej użyć fake cube mapy (oczywiście nie mówię tutaj o wodzie itd, ale o na przykład mieczu czy czegoś w tym stylu). No i jak jest w dzisiejszych silnikach jeżeli ktoś wie :)

8
OpenGL / Odp: OpenGL shader node editor
« dnia: Listopad 08, 2017, 18:23:00 »
Długo mnie nie było tutaj :P
Przede wszystkim mobilki pomijam bo zależy mi na fajnyche efektach graficznych, a wiem, że one tego nie pociągną. Poza tym w końcu zrobiłem tak, a raczej zrobię dzisiaj dopiero, że dodałem dodatkowe nody odpowiadające za atrubuty wierzchołków i tak mam: vertex color, normal, position, ale też takie rzeczy jak worldnormal itd. Ogólnie to buffer i atrybuty dopasowują się do nodów. Co do optymalizacji to raczej chodziło mi o sytuacje:

vec4 alala = vec4(1, 1, 1, 1);
vec4 alala2 = vec4(alala.xyz, 0);

Pytanie raczej było czy obie zmienne, które są używane w ciele fragment shadera znikną podczas kompilacji jeśli ich już nie używam w dalszej części kodu :).

9
OpenGL / Odp: OpenGL shader node editor
« dnia: Październik 26, 2017, 13:27:55 »
Dobra chyba już mam wszystko co potrzebowałem do zrozumienia mechaniki takiego edytora i mogę pisać sam. Dzięki za odpowiedzi :)

10
OpenGL / Odp: OpenGL shader node editor
« dnia: Październik 25, 2017, 22:26:50 »
Czyli w sumie te atrybuty wierzchołka to są stałe w zależności czy jaki Output będzie? W sensie że jak będę robił materiał dla modelu to zawsze jest normal, pozycja, tangent, bitangent oraz UV a jak robię materiał na przykład dla post procesów to mam tylko w sumie pozycje i Uv?

Co do 2 to chodziło mi oto że w vertex shaderze przekazuję tylko wartości do fragment shaderze a niczego nie liczę.

Jeżeli chodzi o 4 to chodziło mi o takie zmienne jak shiness żeby później obliczyć specular w zależności od tego jaki przedmiot to jest.

No i finalne pytanie bo znalazłem w necie node editor z podglądem na kod. Jest tam coś takiego ze zawsze jest jeden Output i on tam właśnie ma już diffuse metal itd. I w kodzie wygląda to tak że są zmienne o nazwie diffuse metal itd. I mają on wartość zero jeżeli nie ma nodow. Outputem już we fragment shaderze jest suma diffuse metal etc. Tak że zawsze one mają sens bo albo wartość czegoś jest zero albo nie. I teraz pytanie czy jak zmienna diffuse jest 0 i jest ona w sumie to czy czasem glsl przy kompilacji shadera nie wywalić automatycznie tej zmiennej? W ogóle czy glsl czasem nie optymalizuje sobie sam kodu przed skompilowaniem? Wiem że ciężko tłumacze ale z góry dzięki :)

11
OpenGL / OpenGL shader node editor
« dnia: Październik 25, 2017, 13:51:25 »
Witam,
od dłuższego czasu programuje swój silnik i parę razy podchodziłem do tematu, ale zawsze jakoś pojawiały się bardziej istotne rzeczy, ale w końcu zabrałem się za pisanie swojego własnego edytora materiałów (dodam tutaj, że wzoruje się na RedKicie, Unreal itd.). Cała część 2D jest już gotowa, eytor rysuje diagramy/nody (nie wiem do końca jak to się nazywa). Problem pojawił się jednak przy przetłumaczeniu tego wszystkiego na język GLSL i pojawiło mi się w głowie parę pytań:
1. Co z atrybutami wierzchołka? No właśnie. Są one generowane w zależności od tego co jest potrzebne w materiale? np. gdy mam nod o nazwie normal mapping to pojawia się w VAO atrybut bitangent, tangent.
2. Z tego co potrafiłem zrozumieć z innego edytora to vertex shader służy tutaj tylko do przekazywania zmiennych z silnika takich jak na przykład pora dnia, ale też innych rzeczy takich jak pozycja uv, normalne itd. do fragment shadera. Dobrze rozumiem?
3. Node takie jak: add, multiply, clamp są poprostu funkcjami glsl'a? Problem w tym czy jak robię noda add gdzie mam parametry A i B to czy w rezultacie tworzy się nowa zmienna, która jest wynikiem tego działania czy korzystam z już wcześniej użytych zmiennych.
4. Node takie jak: vector, scalar są po poprostu typami uniform, które ustalam dla konkretnego modelu i przekazuje je do fragment shadera?
5. No i ostatnie pytanie czy wszystko dzieje się tylko i wyłącznie we fragment shaderze? W sensie wszystkie te obliczenia w materiale na nodach są w nim robione?

Ogólnie to docenie każdą inforamcję jaką ktoś posiada na każdy temat tego typu edytora. Mile widziany jest też kod ze zdjęciem nodów jeżeli ktoś ma takowy. Z góry dzięki :)

12
OpenGL / Odp: Problem z macierzą 2D
« dnia: Lipiec 30, 2017, 17:11:18 »
Temat do zamknięcia okazuje się, że problem był z macierzą, która powinna wyglądać tak:
public static Matrix4f createOrthographicMatrix(float left, float right,
float bottom, float top, float far, float near)
{
Matrix4f result = new Matrix4f();
result.setIdentity();

//First row
result.m00 = 2.0f / (right - left);
result.m10 = 0.0f;
result.m20 = 0.0f;
result.m30 = -((right + left) / (right - left));

//Second row
result.m01 = 0.0f;
result.m11 = 2.0f / (top - bottom);
result.m21 = 0.0f;
result.m31 = -((top + bottom) / (top - bottom));

//Third row
result.m02 = 0.0f;
result.m12 = 0.0f;
result.m22 = 2.0f / (far - near);
result.m32 = -((far + near) / (far - near));

//Fourth row
result.m03 = 0.0f;
result.m13 = 0.0f;
result.m23 = 0.0f;
result.m33 = 1.0f;
return result;
}
Gdzie Matrix4f jest to standardowa macierz z lwjgl 2.9.3 i używam jej tak:
Matrix4f projMatrix = MagicMaths.createOrthographicMatrix(0f,
width,
height,
0f, 0f, 1f);
Temat można zamknąć, ale komuś się to może przydać bo w necie mało informacji o tym jest :).

13
OpenGL / Problem z macierzą 2D
« dnia: Lipiec 29, 2017, 23:19:29 »
Witam,
ostatnio próbuje zakodzić sobie prosty sposób na renderowanie sceny 2d (dla GUI) i natknąłem się na problem związany z macierzami. Mam jedno VAO z wierzchołkami: (-1f, 1f), (-1f, -1f), (1f, 1f), (1f, -1f) i renderuje je triangle_strip'em. Ponad to mój kod wygląda tak:

Kod tworzący macierze:
public static Matrix4f createOrthoProjectionMatrix(float left, float right,
float bottom, float top, float far, float near)
{
Matrix4f result = new Matrix4f();

result.m00 = 2.0f / (right - left);
result.m01 = 0.0f;
result.m02 = 0.0f;
result.m03 = 0.0f;

result.m10 = 0.0f;
result.m11 = 2.0f / (top - bottom);
result.m12 = 0.0f;
result.m13 = 0.0f;

result.m20 = 0.0f;
result.m21 = 0.0f;
result.m22 = -2.0f / (far - near);
result.m23 = 0.0f;

result.m30 = -(right + left) / (right - left);
result.m31 = -(top + bottom) / (top - bottom);
result.m32 = -(far + near) / (far - near);
result.m33 = 1.0f;
return result;
}

public static Matrix4f createTransformationMatrix(Vector2f position, Vector2f scale)
{
Matrix4f matrix = new Matrix4f();
matrix.setIdentity();
Matrix4f.translate(position, matrix, matrix);
Matrix4f.scale(new Vector3f(scale.x, scale.y, 1.0f), matrix, matrix);
return matrix;
}

Kod renderujący:
Matrix4f projMatrix = MagicMaths.createOrthoProjectionMatrix(0f,
screenWidth,
screenHeight,
0f, -1f, 1f);
Matrix4f modelMatrix = MagicMaths.createTransformationMatrix(
pos,
size);
program.setUniformMatrix("u_projMatrix", projMatrix);
program.setUniformMatrix("u_modelMatrix", modelMatrix);
quadVAO.render();

Kod shadera:
#version 330

in vec2 a_position;

uniform mat4 u_modelMatrix;
uniform mat4 u_projMatrix;

void main(void)
{
gl_Position = u_projMatrix * u_modelMatrix * vec4(a_position, 0.0, 1.0);
}

Niestety rendering dla zmiennych: pos = (0, 0) i size = (100, 100) nie działa ponieważ nic się nie wyświetla (po prostu chcę wyświetlić prostokąt, gdzie pos (0, 0) jest w lewym górnym rogu ekranu, a size to są jego wymiary w pikselach). Jednak gdy usunę z shadera uniform u_projMatrix i dam dane: pos = (0.5, 0.5) i size = (0.25, 0.25) to kod działa, ale dla współrzędnych openGL, gdzie punkt (0, 0) to środek ekranu. a (1, 1) to prawy górny róg. Macie jakieś pomysły może co jest nie tak. Będą wdzięczny za każdą pomoc :)

14
OpenGL / Odp: QuadTree/LOD przy renderowaniu terenu
« dnia: Lipiec 24, 2017, 03:29:21 »
@Mergul
Ok już wszystko jasne. Zacząłem właśnie już robić tak jak mi mówiłeś, czyli chunki wielkości 32x32 wierzcholki. Mam cztery poziomy level of detail i kod działa, jednak jeszcze z braku czasu nie zacząłem robić spojenia pomiędzy chunkami, ale już mam jakiś tam pomysł w głowie zwłaszcza, że sąsiadów teraz mi łatwiej znaleźć niż w drzewie czwórkowym co za tym idzie ich LOD. Jak będę miał problemy to na pewno się odezwę. Dzięki chłopaki za pomoc :)

15
OpenGL / Odp: QuadTree/LOD przy renderowaniu terenu
« dnia: Lipiec 23, 2017, 14:13:20 »
Z tymi wierzchołkami to rzeczywiście w przyszłości chciałbym zrobić więcej na jednego chunka terenu jak już będę miał podstawowy algorytm bo rzeczywiście słusznie zauważyłeś, że to mało. Najbardziej mnie zainteresowała metoda w której to chunk z niższym LODem dopasowuje się do tego z wyższym. Rozumiem, że w tym wypadku dla każdego chunka sprawdzam jego tylko najbliższych sąsiadów, które mają ten sam LOD (zawsze będzie ich tylko dwóch) i w zależności od tego czy mają dzieci (co oznacza, że mają jeszcze większy LOD) to wybieram odpowiednią permutacje?

Strony: [1] 2