Moja nauka WebGL (1)

Three.js stało się w pewnym momencie tym, co mnie ogranicza + zacząłem odczuwać zmęczenie tą biblioteką. Szanuję za same możliwości, jakie ta biblioteka daje (bo jednak ułatwia sporo pisanie w 3D), to uważam, że nie jest ona zbyt przyjazna dla użytkownika, tak z perspektywy developer experience. No i też kwestia dopasowania do potrzeb. Zacząłem mieć trochę większe potrzeby jeśli chodzi o 3D i nawet pisząc w Three.js musiałem się namęczyć i sporo napisać kodu, żeby coś zrobić. Plus świadomość narzutu, tego, że jednak bundle trochę zajmuje, że jednak biblioteka robi masę rzeczy "pod spodem" itp. itd.

To wszystko spowodowało, że postanowiłem więc iść dalej i uczyć się czystego WebGLa. Mam pełną wolność, co robię. Chociaż ogranicza mnie póki co brak umiejętności. Uczę się dopiero około tygodnia. No, co prawda pisząc w Three.js napisałem też kilka shaderów, więc to jakaś wprawka. Kiedyś też jakieś HelloWorld napisałem w WebGL. Ale ogólnie jest to dla mnie nowość. I intensywnie kombinuję, eksperymentuję, czytam, oglądam vlogi. Dużo jest koncepcji, matematykę też trzeba ogarniać (szczególnie macierze, wektory), oczywiście samo API WebGLa trzeba poznać. Chociaż to akurat jest pewnie najprostsze z tego wszystkiego (najtrudniejsze są chyba przeliczenia matematyczne. No i optymalizacja. Nie zawsze wiem, dlaczego mam spadek FPSów na przykład).

No i wszystko robi się bardzo niskopoziomowo. Nie można np. "wyświetlić cienia", tylko (to jedna z technik) robi się to tak, że dla każdego światła się renderuje osobno scenę w specjalnym buforze ramki, ale tak, że kamera jest w tym miejscu, co światło. A potem bierze się z-bufor i przy renderingu właściwej sceny się porównuje głębokość danego punktu z tym, co jest w z-buforze (tj. głębokość względem światła, jeśli się nie mylę). I sprawdza się czy dany punkt jest "widoczny przez światło". Jak nie jest, to jest tam cień.

No i to jest na razie dla mnie dość trudne. Próbowałem tak zrobić, ale udało mi się dojść do tego, jak wyświetlić scenę w buforze ramki (już samo to było dla mnie trudne) i jak pobrać z-bufor z bufora ramki(to też!). No ale myślę, że kilka tygodni i będę w stanie zrobić prostą grę w WebGL. A za kilka miesięcy planuję już ogarnąć na tyle, żeby móc robić w tym własne silniki. W zasadzie już zacząłem robić pierwszy silnik w WebGL (pierwszy, bo to będzie proces iteracyjny - na razie robię silnik mocno improwizowany, a za kilka tygodni, jak nabędę wiedzy w WebGL, to zacznę pisać nowy silnik od zera itp.).

Docelowo marzy mi się zrobić coś popularnego w świecie JSowym. Taka jakby biblioteka 3D, z której ktoś faktycznie by korzystał i która mogłaby konkurować z innymi rozwiązaniami. Ale to zobaczymy.

Komentarze

Popularne posty z tego bloga

Ściemy z ogłoszeń o pracę

Jak nie sprawdzać wiedzy technicznej: platformy online

Jak zrobić prostą grę w JavaScript?