Które paczki do 3D?

3

Chcę się pobawić grafiką 3D w Rust i zastanawiam się, co jest takim "state of the art", jeśli chodzi o tę kwestię. Tzn. zależy mi na tym, żeby apkę można było skompilować łatwo zarówno do WebAssembly jak i na 3 główne systemy operacyjne (MacOS, Windows, Linux).

I zależy mi na czymś bibliotekowym. Może być to być biblioteka w stylu "stwórz czerwoną kostkę na pozycji 0, 0, 0 i kamerę na pozycji 0, 0, 10", może to być biblioteka bardziej niskopoziomowa typu "stwórz bufory wierzchołków, stwórz shadery, pomnóż macierze, rysuj trójkąty" itp. Natomiast nie potrzebuję jakichś wydumanych i ciężkich silników.

Póki co bawię się kiss3d, chociaż trochę miałem problemów z kompilacją do Wasm, ale dało radę. Ale jakoś mało informacji na ten temat widzę w necie, to chyba jakaś mniej popularna paczka. Zastanawiam się, czy jest sens wchodzenia w nią głębiej (nie chcę wchodzić w coś, do czego jest słabe wsparcie).

Czy polecacie / odradzacie jakieś paczki do 3D w Rust? Tu jest lista https://arewegameyet.rs/ecosystem/3drendering
ale nie wiem, co z tego wybrać, mogę się kierować co najwyżej liczbą pobrań, datą ostatniej aktualizacji czy rodzajem licencji...

6

Moje ogólne wrażenie jest takie, że jeżeli by patrzeć pod kątem gamedev to w Ruście panuje straszna bieda z nędzą, trudno zatem mówić o jakimś "state of the art", mamy wypalone słońcem pustkowie, po którym się toczą samotne krzaki.

Z grubsza mówiąc, obecna sytuacja jest taka, że główne nadzieje wiążą się z Bevy, które jest intensywnie rozwijane i wygląda całkiem solidnie, ale ciągle brakuje mu sporo ficzerów. Plany są by stał się drugim Godotem, ale używającym Rusta wewnętrznie zamiast osobnego języka (jakiś GDScript w Godocie), ale muszą dopiero naklepać edytor, oraz dać wsparcie do animacji. Tutaj jest roadmapa. Na chwilę obecną jest to przede wszystkim renderer + ECS (nad którym autor nieustanie się rozpływa przy każdej okazji), więc nie wiem czy określenie "ciężki" do końca pasuje. Tutaj niby jest przykład robienia jakiegoś mesha, można też załadować modele gLTF i się bawić.

Poza Bevy są jeszcze dziadek Piston i dziadek Ametyst, oraz względnie nowe rg3dengine, aczkolwiek trudno mi cokolwiek o nich powiedzieć.

Natomiast faktycznie czego mi brakowało, to gołego, surowego renderera, do którego mógłbym stosować własny kod do zarządzania sceną i obiektami. Szczególnie w porównaniu z C++, gdzie jest tego na pęczki, do wyboru do koloru (jeszcze poza wymienionymi autor pominął dziadka Ogre'a i FIlament). I jakbym chciał pisać w ten sposób to nie miałbym wielkiego wyboru jak wziąć któreś z tamtych API, wygenerować bindingi (takie coś można automatyzować z rust-bindgen) i opakował w bezpieczny interfejs.

BFGX ma bindingi do C (reszta to raczej sam C++), bindingi do Rusta są też dostępne jako osobna biblioteka, więc byłaby to jakaś opcja. BGFX jest wypróbowany w boju (piszą nawet, że jest używany w Minecfrafcie). Pewnym problemem z tym silnikiem jest niestety brak sensownej dokumentacji, informacji w necie czy tutoriali (poza https://www.sandeepnambiar.com/getting-started-with-bgfx/) i trzeba się wzorować na przykładach. Te są niestety nieco pokręcone, bo sporo boilerplate'u jest schowanego w kodzie do obsługi poszczególnych platform https://github.com/bkaradzic/bgfx/tree/master/examples/common/entry.

Poza tym, jeśli chcesz się tylko bawić, to ciekawą taką zabawą może być pisanie własnego raytracera/renderera software'owego - można tu sporo osiągnąć (patrz tu). No i zawsze można rzeźbić w gołym OpenGL-u, na przykład poprzez bindingi do SDL-a czy SFML-a.

Ogółem jednak moje wrażenie jest, że jest ciągle w Ruście okropna bieda pod kątem bibliotek do grafiki. Język fajny, ale ekosystem niedojrzały i pełen dziur. Jak przepatrzyłem co jest dostępne to koniec końców stwierdziłem, że swoją śmieszną gierkę dla zabawy jednak piszę w C++, gdzie mam od groma przydatnych narzędzi (jak ozz-animation czy recast-detour).

1 użytkowników online, w tym zalogowanych: 0, gości: 1