Autor Wątek: Możliwości Ogre 3D a C++  (Przeczytany 5016 razy)

Offline Blackmoore

  • Użytkownik

# Czerwiec 05, 2010, 00:44:02
Witam, od 2 lat programuję w C++, jak dotąd głównie konsolowe aplikacje (przeróżne znane algorytmy), z DirectX miałem niewielki kontakt ale podstawy znam. Chciałbym wraz z grupką znajomych napisać grę 3D z możliwością grania multiplayer przez internet. Jestem totalnie zielony w temacie gotowych silników graficznych, takich jak Ogre 3D. Czy taki silnik graficzny nie ograniczy naszych możliwości jako programistów? Czy to jest jakiś zwykły edytor czy w pełni współpracująca aplikacja z językiem C++, czy nie będzie problemu używając takiego silnika napisać multiplayer (internet oraz lan), skomplikowaną interakcję z otoczeniem itd? Powinienem korzystać z Ogre 3D czy jest jakiś inny silnik, który byście mi polecili? Czy może lepiej pisać w samym DirectX? :)    (modele będą wykonywane w 3ds Max)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Capad

  • Użytkownik

# Czerwiec 05, 2010, 00:54:11
Ekspertem nie jestem i pewnie ktoś mnie zaraz poprawi, ale odpowiem najlepiej jak umiem:
1. Znasz podstawy DirectX-a? To świetnie, tylko do napisania własnego silnika/gry trzeba znać trochę więcej niż podstawy - shadery, wczytywanie modeli z własnych formatów itd, to nie jest tak "hop-siup"
2. Multiplayer... Mogę ci powiedzieć, że to "tylko i aż" w kwestii programowania - powinieneś mieć chociaż zarys co, gdzie i jak chcesz przesyłać, a ponieważ to Twój pierwszy projekt inny niż konsolowy, odradzam! Zmarnujesz tylko swój czas (szczególnie w połączeniu z punktem 1)
3. To jest gotowy silnik wraz z narzędziami - edytorem, dokumentacją itd. Cały czas wymaga to jednak wiedzy programistycznej, która pozwoli przejście po linii silnik-gra
4. Używając tego silnika może być ci łatwo napisać multi, a może być supertrudno. Zależy od podejścia, upodobań i wiedzy. Ponieważ ostatni z parametrów nie spełnia wymogów, odradzam pisanie multi.
5. Silników jest mnóstwo, użyj szukajki a coś się znajdzie
6. Interakcja z otoczeniem zależy od silnika fizycznego - możesz kupić, napisać własny lub skorzystać z gotowych. Niestety, jeśli oczekujesz Bad Company 2, to rewelacji się nie spodziewaj
7. Nie ograniczy, na pewno (koledzy z forum zaraz Ci napiszą, że lepiej własny silnik pisać:))
Podsumowując: jeśli uważasz, że masz samozaparcie, to pogooglaj : Havoc, Ogre3D, WinSock, Direct3D, PhysiX
Jeśli nie, odpuść sobie bo zmarnujesz czas na coś, co nie przyniesie Ci pożytku

Offline hfjh

  • Użytkownik

# Czerwiec 05, 2010, 01:03:17
Ogre3D to tylko (i aż :D) silnik graficzny - to jak będzie zrealizowana fizyka/sieć/whatever nie ma z nim żadnego związku.

Offline Blackmoore

  • Użytkownik

# Czerwiec 05, 2010, 01:11:53
Dzięki, jeżeli chodzi o multi, to z samym przesyłaniem danych nie będzie problemu, pisałem już programiki na linuxa i windę na socketach i korzystające z konkretnych protokołów. W tym temacie nie jestem jeszcze jakoś super obeznany ale to dla mnie nie problem pogłębić trochę wiedzę. Jestem na drugim roku informatyki na Polibudzie Gdańskiej i jeżeli chodzi o programowanie to moja wiedza jest z wszystkiego po trochu, pisałem w wielu językach ale w żadnym jeszcze jakoś super nie programuję, nas więcej myślenia uczą niż konkretnego języka jak na razie. Jeżeli ten silnik nie ogranicza programistów to super :) bo chciałem też zaimplementować jakąś sztuczną inteligencję do NPC, algorytmy samo uczące się. Jeżeli chodzi o niskopoziomowe programowanie to problemu nie będzie, tyle że na grafice 3d się nie znam za bardzo. Najbardziej zastanawia mnie jak mogę kontrolować szkielet przeniesiony z modelu z 3DS Max w C++, czy to jest zapisane w jakiejś tablicy wektorów (słyszałem, że można przenieść model z szkieletem)?

Offline Capad

  • Użytkownik

# Czerwiec 05, 2010, 11:38:42
Wszystko zależy od formatu, jaki sobie wybierzesz :)
Dzięki, jeżeli chodzi o multi, to z samym przesyłaniem danych nie będzie problemu, pisałem już programiki na linuxa i windę na socketach i korzystające z konkretnych protokołów.
Wykazujesz odrobinę ignorancji :) zauważ, że skoro, według Twojego założenia, chcesz napisać FPS-a, to najważniejsza będzie synchronizacja - nie możesz przecież dopuścić do sytuacji, w której gracz A biegnie w lewo, natomiast gracz B tylko do niego celuje i zawsze (lub nigdy) nie trafia, bo ramki się nie zgadzają :) Artykuł na gamedevie (lub Xiona) o pętli gry:)

Jeżeli ten silnik nie ogranicza programistów to super :) bo chciałem też zaimplementować jakąś sztuczną inteligencję do NPC, algorytmy samo uczące się. Jeżeli chodzi o niskopoziomowe programowanie to problemu nie będzie, tyle że na grafice 3d się nie znam za bardzo.
Silnik graficzny nie ma nic wspólnego ze sztuczną inteligencją jako tako (za wyjątkiem sytuacji "jeśli widzi gracza to strzela"), więc nie ogranicza Cię w żadnym stopniu. Jeśli chodzi zaś o grafikę, to na forum i w Linkowni bez problemu znajdziesz strony z materiałami, które na początek Ci w zupełności wystarczą.

Jeśli chcesz pogłębiać swoją wiedzę -> Warsztatowa Wiki -> "Z czego się uczyć"

Offline Blackmoore

  • Użytkownik

# Czerwiec 05, 2010, 12:46:16
Dzięki za poradę, poczytam o tej pętli głównej. Jeżeli chodzi o multi to raczej sam bym się za to nie brał (za mało pisałem takich rzeczy), raczej zleciłbym to któremuś ze znajomych. Ja chce zająć się bardziej kontrolą postaci oraz kolizją. A co do projektu to obecnie mam 3 programistów chętnych, po sesji podejrzewam, że będę miał grupę 5-7 osobową (głównie programiści, problem mogę mieć z grafikiem 3d ale znajdzie się lepszy lub gorszy :P). Pierwsza faza projektu to ma być animacja modelu 3d, poruszanie się za pomocą klawiatury. Przewidziany jest jakiś posąg na małej arenie (cała gra będzie w małych lokacjach, żeby ograniczyć ilość tekstur) i postać gracza, która może mu zadawać obrażenia. Orientujecie się jak czasochłonne może być wykonanie tej "pierwszej fazy"? Czy w 3 miesiące mam szanse napisać coś takiego? Po wykonaniu tamtego etapu, wziąć się za NPC, który będzie walczył z graczem (tu jakiś algorytm uczący się, że jak gracz często używa jakiegoś ciosu to przeciwnik zaczyna częściej bronić się przed tym konkretnym), następnym etapem byłby multiplayer. Czy taki projekt w moim przypadku jest do zrealizowania czy przesadzam z ambicjami?
« Ostatnia zmiana: Czerwiec 05, 2010, 12:48:48 wysłana przez Blackmoore »

Offline BrutalComputer

  • Użytkownik

# Czerwiec 05, 2010, 14:06:13
Jestem na drugim roku informatyki na Polibudzie Gdańskiej
Pozdrawiam kolegę z uczelni. Silnik graficzny w żaden sposób nie ogranicza ( tym bardziej, jeżeli masz jego źródła ) typów gier, jakie możesz na niego pisać. Zdarza się, że jeden silnik jest nieco lepszy od innego dla danego zastosowania ( ale nie przez pierwszy rok nauki ). Przestań zadawać pytania, ściągnij SDK i przejrzyj kod sampli, a wszystko się wyklaruje.

Offline toxic

  • Użytkownik

# Czerwiec 05, 2010, 18:02:30
Dzięki za poradę, poczytam o tej pętli głównej. Jeżeli chodzi o multi to raczej sam bym się za to nie brał (za mało pisałem takich rzeczy), raczej zleciłbym to któremuś ze znajomych. Ja chce zająć się bardziej kontrolą postaci oraz kolizją. A co do projektu to obecnie mam 3 programistów chętnych, po sesji podejrzewam, że będę miał grupę 5-7 osobową (głównie programiści, problem mogę mieć z grafikiem 3d ale znajdzie się lepszy lub gorszy :P). Pierwsza faza projektu to ma być animacja modelu 3d, poruszanie się za pomocą klawiatury. Przewidziany jest jakiś posąg na małej arenie (cała gra będzie w małych lokacjach, żeby ograniczyć ilość tekstur) i postać gracza, która może mu zadawać obrażenia. Orientujecie się jak czasochłonne może być wykonanie tej "pierwszej fazy"? Czy w 3 miesiące mam szanse napisać coś takiego? Po wykonaniu tamtego etapu, wziąć się za NPC, który będzie walczył z graczem (tu jakiś algorytm uczący się, że jak gracz często używa jakiegoś ciosu to przeciwnik zaczyna częściej bronić się przed tym konkretnym), następnym etapem byłby multiplayer. Czy taki projekt w moim przypadku jest do zrealizowania czy przesadzam z ambicjami?
3 miesiące, ale ile czasu w tygodniu? Pół etatowo, czyli załóżmy 20h na tydzień? Jeśli tak (i zakładając tego Ogre'a), to bym szacował, że:
  • poruszanie się za pomocą klawiatury -> ze 2-3tygodnie (bo będziesz musiał podpiać jakąś bibliotekę kolizji/fizyki, co nie?)
  • animacja modelu 3d -> a co dokładnie pod pojęciem 'animacja' rozumiesz?
  • wyświetlanie statycznej lokacji, wyświetlanie posągu, wyświetlanie gracza -> 1tydzień
  • zorganizowanie modelu posągu, gracza i lokacji (czyli pewnie wymodelowanie w 3d maxie?) -> nie wiem, nie moja działka :)
  • logika zadawania obrażeń -> a co dokładniej masz na myśli pod tym pojęciem? co to są obrażenia? w jaki sposób gracz może je zadawać? (klikając myszką na posągu? naciskając spację będąc tuż obok posągu?) co się ma dziać w momencie zadawania obrażeń? jakieś bajery typu tryskająca krew, przewracający się posąg, machanie mieczem, jakieś paski życia itp?
Ja bym strzelał, że to będzie łącznie tak z 1,5 osobomiesiąca roboty na tą "pierwszą fazę". Raczej nie więcej - chyba że gdzieś tam pod pojęciami "animacja modelu 3d", "małe lokacje", "zadawanie obrażeń" kryją się dodatkowe funkcjonalności, których nie widzę.

Offline Blackmoore

  • Użytkownik

# Czerwiec 05, 2010, 21:15:25
-Animacja modelu 3d - poruszanie się i zadawanie ciosów, system walki podobny do Mount&Blade (myszka przesuwana w górę + LPM = cios z góry)
-Ile czasu tygodniowo to ciężko stwierdzić, jak mnie wciągnie praca to mogę siedzieć po kilkanaście godzin dziennie.
-Logika zadawania obrażeń - ciężar broni * prędkość - odporność_przeciwnika = obrażenia (coś w tym stylu)
-bajery typu paski życia, tryskająca krew i ślady po ranach będę chciał zaimplementować

Jeżeli chodzi o kolizję i fizykę to mógłbyś polecić mi jakieś biblioteki? Chciałbym żeby w grze ciała upadały bezwładnie.
Chcę też dodać coś takiego, że jak miecz trafi w ciało to będzie miał możliwość wbicia się a jak w kawałek zbroi to się zatrzyma.

Offline hfjh

  • Użytkownik

# Czerwiec 05, 2010, 21:42:09
Jeśli cały czas mowa o Ogre, to poszukaj na wiki tego silnika. Tam masz wrappery dla takich silników fizycznych jak ODE czy PhysX, z którymi można napisać kolizje, ładne ragdolle itp. (chyba że wolisz napisać to w 'czystym' api silnika fizycznego).
« Ostatnia zmiana: Czerwiec 05, 2010, 21:43:54 wysłana przez hfjh »

Offline toxic

  • Użytkownik

# Czerwiec 07, 2010, 14:16:41
-Animacja modelu 3d - poruszanie się i zadawanie ciosów, system walki podobny do Mount&Blade (myszka przesuwana w górę + LPM = cios z góry)
Patrząc na filmiki na youtubie (nie grałem nigdy w M&B więc się posiłkowałem filmikami z sieci) to wygląda mi to na odgrywanie stałych, przygotowanych uprzednio animacji. W sensie, że za każdym razem postać tak samo porusza bronią, taką samą sekwencje ruchów wykonuje. Zmuszenie ogra do odgrywania poprawnie takich animacji powinno zająć gdzieś z tydzień. Problem jest tylko ze zorganizowaniem tychże animacji - bo ktoś musi jakoś wymodelować ten ruch dłoni podczas ataku, ruch tułowia przy obracaniu itd itp. Ile to może czasu zająć? Ja stwierdzę, że jest to awykonalne :( (czytaj: ja nie wiedziałbym jak takie animacje zorganizować w ciągu 3 miesięcy)

Cytuj
-Logika zadawania obrażeń - ciężar broni * prędkość - odporność_przeciwnika = obrażenia (coś w tym stylu)
Ale prędkość czego? Broni w miejscu/momencie zetknięcia się z ciałem przeciwnika? I odporność czego? Bo tam poniżej mówisz coś o wbijaniu/odbijaniu się od zbroi i się zastanawiam, czy chodzi Ci o różne odporności różnych przeciwników (np. słaby goblin i wytrzymały troll), czy różne odporności tego samego przeciwnika (np. słaba głowa i wytrzymały tors)?

Cytuj
-bajery typu paski życia, tryskająca krew i ślady po ranach będę chciał zaimplementować
Ja myślę, że tak po tygodniu powinieneś doliczyć na pasek życia i na tryskającą krew.
Ślady po ranach - w jaki sposób? W sensie jak je sobie wyobrażasz?

Cytuj
Chcę też dodać coś takiego, że jak miecz trafi w ciało to będzie miał możliwość wbicia się a jak w kawałek zbroi to się zatrzyma.
U. Panie... Bałbym się coś takiego realizować... (nie wiem ile coś takiego mogłby zająć czasu, ale raczej liczyłbym w miesiącach niż w tygodniach)

Offline Vx-x.

  • Użytkownik
    • Vx-x. Page

# Czerwiec 07, 2010, 15:14:24
Się przypatrzyliście tym miesiącom  :) Dla mnie zatrzymanie miecza na zbroi nie jest zbyt skomplikowane, tym bardziej jak mamy silnik fizyczny i model danej postaci dzieli się na np. 2 różne modele - ciało i dopasowana zbroja. Jeśli gracz zaatakuje, to sprawdzamy szybko czy nie zaszła kolizja między mieczem a zbroją, a jeśli zaszła to kończymy atak  ;)

Offline K'Aviash

  • Użytkownik

# Czerwiec 07, 2010, 15:53:53
Się przypatrzyliście tym miesiącom  :) Dla mnie zatrzymanie miecza na zbroi nie jest zbyt skomplikowane, tym bardziej jak mamy silnik fizyczny i model danej postaci dzieli się na np. 2 różne modele - ciało i dopasowana zbroja. Jeśli gracz zaatakuje, to sprawdzamy szybko czy nie zaszła kolizja między mieczem a zbroją, a jeśli zaszła to kończymy atak  ;)
A nie prościej aby miecz przechodził przez ciało ?

Offline Blackmoore

  • Użytkownik

# Czerwiec 07, 2010, 16:30:54
Cytuj
Zmuszenie ogra do odgrywania poprawnie takich animacji powinno zająć gdzieś z tydzień.
Animacje mogę wyexportować bezpośrednio z 3ds max'a czy muszę je napisać w formie kodu?
Cytuj
Ale prędkość czego? Broni w miejscu/momencie zetknięcia się z ciałem przeciwnika? I odporność czego? Bo tam poniżej mówisz coś o wbijaniu/odbijaniu się od zbroi i się zastanawiam, czy chodzi Ci o różne odporności różnych przeciwników (np. słaby goblin i wytrzymały troll), czy różne odporności tego samego przeciwnika (np. słaba głowa i wytrzymały tors)?
Prędkość poruszania się broni + prędkość poruszania się postaci. A jeżeli chodzi o odporność to bohater jak i przeciwnicy będą mieli taką samą odporność, o co mi chodzi z zatrzymywaniem się miecza na zbroi i przebijaniu ciała to aby ciosy w zbroję nic nie robiły a cios w ciało mógł być śmiertelny (w zależności od tego jak bardzo zagłębi się miecz)
Cytuj
Ślady po ranach - w jaki sposób? W sensie jak je sobie wyobrażasz?
W kilku grach typu FPS widziałem jak po strzale zostają zmienione tekstury (np: krwawiąca dziura, przykład gier: Far Cry, Global Operations lub chociażby ślady po strzale na ścianach w wielu grach).
Problem w tym, że nie wiem w jaki sposób mógłbym edytować teksturę w trakcie gry, ale mam nadzieję że dowiem się tego w trakcie pisania.

Zdaję sobie sprawę z tego jak czasochłonny może być ten projekt i będę zadowolony jak w ciągu roku skończymy wersję single i będziemy mogli się wziąć za multi. Wypytuje o takie pomysły jak np: rany, krew itd bo chcę wiedzieć czy któryś z nich nie okaże się niewykonalnym lub strasznie czasochłonnym. Jak już wcześniej wspominałem, pierwsze co chcę zrobić to poruszanie się za pomocą klawiatury, resztą będę martwił sie później. Na początku prace mogą iść powoli bo mam tylko 3 programistów, którzy zadeklarowali że będą w wakacje siedzieć nad tą grą :) lecz jak już będą widoczne efekty pracy nad grą i będę wiedział jakie zadania mogę przydzielić nowym osobom to zebranie zespołu do 10 osób nie powinno być problemem. Problem mogę mieć z grafikami 3D bo jestem na studiach informatycznych i o wiele łatwiej mi znaleźć programistę :P
« Ostatnia zmiana: Czerwiec 07, 2010, 16:44:10 wysłana przez Blackmoore »

Offline toxic

  • Użytkownik

# Czerwiec 08, 2010, 00:27:52
Cytuj
Zmuszenie ogra do odgrywania poprawnie takich animacji powinno zająć gdzieś z tydzień.
Animacje mogę wyexportować bezpośrednio z 3ds max'a czy muszę je napisać w formie kodu?
Bezpośrednio z 3ds max'a. Myślę, że większość wspomnianego tygodnia spędziłbyś na wyklikiwaniu opcji eksportera i rozwiązywania problemów pt. "model wyświetla się do góry nogami".

Cytuj
Cytuj
Ale prędkość czego? Broni w miejscu/momencie zetknięcia się z ciałem przeciwnika? I odporność czego? Bo tam poniżej mówisz coś o wbijaniu/odbijaniu się od zbroi i się zastanawiam, czy chodzi Ci o różne odporności różnych przeciwników (np. słaby goblin i wytrzymały troll), czy różne odporności tego samego przeciwnika (np. słaba głowa i wytrzymały tors)?
Prędkość poruszania się broni + prędkość poruszania się postaci. A jeżeli chodzi o odporność to bohater jak i przeciwnicy będą mieli taką samą odporność, o co mi chodzi z zatrzymywaniem się miecza na zbroi i przebijaniu ciała to aby ciosy w zbroję nic nie robiły a cios w ciało mógł być śmiertelny (w zależności od tego jak bardzo zagłębi się miecz)
Kapuję. Wyznaczanie prędkości poruszania się broni (klingi?) i postaci to powinno być małe piwo - tak na jeden wieczór, może dwa. Natomiast poprawna i efektywna obsługa wykrywania kolizji ze zbroją i ciałem... średnio to widzę. Kolega powyżej napisał:
Dla mnie zatrzymanie miecza na zbroi nie jest zbyt skomplikowane, tym bardziej jak mamy silnik fizyczny i model danej postaci dzieli się na np. 2 różne modele - ciało i dopasowana zbroja. Jeśli gracz zaatakuje, to sprawdzamy szybko czy nie zaszła kolizja między mieczem a zbroją, a jeśli zaszła to kończymy atak
Generalnie zgadzam się z powyższym. Martwię się jednak, że nie istnieje taki silnik fizyczny, który by "z pudełka" oferował funkcjonalność wykrywania kolizji pomiędzy dowolnie poruszającym się mieczem a wklęsłymi bryłami (zbroja, ciało). Ja przynajmniej nie znam. Raczej spodziewałbym się ostrej dłubaniny żeby zmusić silnik fizyczny do precyzyjnej i efektywnej detekcji ww. obiektów w ruchu.

Cytuj
Cytuj
Ślady po ranach - w jaki sposób? W sensie jak je sobie wyobrażasz?
W kilku grach typu FPS widziałem jak po strzale zostają zmienione tekstury (np: krwawiąca dziura, przykład gier: Far Cry, Global Operations lub chociażby ślady po strzale na ścianach w wielu grach).
Problem w tym, że nie wiem w jaki sposób mógłbym edytować teksturę w trakcie gry, ale mam nadzieję że dowiem się tego w trakcie pisania.
Samo dogrzebanie się do buforów tekstur i pokolorowanie ich to jest robota na jeden wieczór. Gorzej, że to co jest sugerowane w dokumentacji ogra może nie działać na wszystkich konfiguracjach sprzętowych. Doświadczyłem kiedyś takiego problemu, że na części komputerów tekstura fajnie się zaktualizowała w trakcie gry, a na innych komputerach ta tekstura aktualizowała się, ale z x-sekundowym opóźnieniem :o. Ostatecznie ile by z tym było roboty? Nie wiem.
Ale może rany da się inaczej zrealizować? Dekalami czy czymś takim... ::)