Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
3D MultiGame - Kollisionen, Physik über GraKa
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 411

Themenstarter:

3D MultiGame - Kollisionen, Physik über GraKa

beantworten | zitieren | melden

Servus,

in einem Hobbyprojekt entwickeln wir (2) eine kleines Multiplayergame. Wir sind gerade auf den 3D Bereich gestossen und haben uns für OpenGL entschieden. So, nun haben wir gleich 2 grundsätzliche Fragen die wir uns nicht so ohne weiteres beantworten können.

1.) Wie können wir die geom. Daten eines Objekts (erstellt mit z.B. 3D Studio Max, Blender, ...) auslesen?

2.) Die geometrische Welt soll auf den Server und auf dem Client berechnet werden. Der Client bekommt alle xyz Sekunden ein Update vom Server und gleicht seine Ergebnisse an. Da der Server normaler Weise keine Graka besitz berechnet die CPU die komplette Physik, Kollisionen, Aktionen, .... Doch wie ist dies auf der Clientseite. Ist es irgendwie möglich, einen Teil dieser Arbeit (Physik, Kollisionen) auf diie GraKa umzuwältzen?

MfG,
Thomas
private Nachricht | Beiträge des Benutzers
Atomroflman
myCSharp.de - Member



Dabei seit:
Beiträge: 274
Herkunft: Hamburg

beantworten | zitieren | melden

Mit Sicherheit is das möglich aber warum soll der Server die ganzen Physiken nachrechnen wenn das der Client auch schon macht?
Wäre es nicht sinnvoller den Server einfach die Positionen von den Objekten an die Clients weiterleiten zu lassen?
Von all den Sachen, die mir verloren gegangen, hab ich am meisten an meinem Verstand gehangen... MfG...
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 411

Themenstarter:

beantworten | zitieren | melden

Servus Atomroflman,
Zitat
Wäre es nicht sinnvoller den Server einfach die Positionen von den Objekten an die Clients weiterleiten zu lassen?


Das wäre wohl die Lösung Nr. 1, jedoch haben wir hierfür bereits bei einer sorgfältigen Analyse folgendes festgestellt:
- Die Welt muss aufgrund der Größe bereits in Sektoren eingeteilt werden (dynamische und statische Sektoren)
Was geschiet mit den Sektoren, wo sich kein Spieler aufhält, jedoch KI's und sich bewegende Objekte vorhanden sind?

- um möglichst Ressourcen schonende Clientsoftware zu erstellen, rechnet der Client nur mit einer 16bit und/oder 8bit Genauigkeit. Der Server soll jedoch mit 64bit und 32bit rechnen.

- die Spielwelt baut auf einen "ein Serverstandort" auf -> jeder Server hat seine eigene Spielwelt -> um die Stabilität des Spiels gewährleisten zu können, können sich Clients nur mit einem max. 123 Ping anmelden -> begrenzter Einzugsbereich eines Servers
Nehmen wir mal an, der max. Ping ist auf 150ms begrenzt und der Client führt alle Berechnungen aus. Die Aufgabe des Servers besteht nun eigentlich nur die Vermittlung der Clients (Server teilt jedem Client mit, wer sich sonst noch im Sektor befindet). Jeder Client teilt somit alle seiner Aktionen der Clients im Sektor mit.
Sektor: A
Clients im Sektor: 2, 3, 7, 8

Alle Clients haben einen Ping < 150 zum Server. Client 2 führt nun eine Aktion aus und teilt diese den anderen Clients mit. Jedoch hat er zum Client 7 einen Ping von 300ms und zum Cl. 8 einen Ping von 250ms.
Wie bekommen nun 7 und 8 die Aktion mitgeteilt?
Zudem bekommen alle Clients die Aktion zu verschiedenen Zeitpunkten. Wie sieht eine Regelung dieser Verspätungen aus? Es resultieren ja sehr hohe Ungenauigkeiten daraus im Vergleich zwischen den Clients.

Mir persönlich würde diese Regelung am besten gefallen, da der Server fast keine Arbeit (im Vergleich gesehen) erledigen muss und somit eine hohe Spielerzahl >10.000 ohne weiteres möglich wäre.

MfG,
Thomas
private Nachricht | Beiträge des Benutzers
TNDAri
myCSharp.de - Member

Avatar #avatar-2507.jpg


Dabei seit:
Beiträge: 139
Herkunft: Bremen

beantworten | zitieren | melden

Also deine GraKa kann keine Physik rechnen. Da ist die stumpf zu blöde für. Sie kann "nur" deine grafik berechnen. Deswegen heisst sie ja Grafikkarte und nicht Physikkarte
[EDIt] sorry muss mihc verbessern, die neusten GraKas haben auch eine Physik prozessor mit drauf, aber könnt ihr davon ausgehen, das jeder Client so eine besitzt????[/EDIT]

Grafik funzt mit OpenGL, DirectX nur so wahnsinnig schnell, weil die CPU nicht mit Grafik berechnung ausgelastet ist sondern das alles schön zur GPU schickt.
Die CPU kann dann rein für Physik oder andere berechnungen genutzt werden.
Wenn ihr eine Client Server variante wollst, dann kann euer server ruhig die physik berechnen und dem client in kurzen abständen, die position von objekten schicken, die der client dann zeichnet. Das muss dann aber auch wieder nur auf objekte zutreffen, die ein client sehen kann. Also sollte der Server nicht bie jedem update alle objekte berechnen.

Zudem muss ich sagen, das ihr euch mit euren Projekt glaube ich maßlos überschätzt, wenn ihr noch nie was mit spiele programmierung bzw 3d programmierung gemacht habt. (ist jetzt nur mal meine vermutung).
Kann dazu immer nur wieder sagen : fangt klein an, baut erstmal ein kleine 3D welt in der ihr rum laufen könnt, dann abut nen Physik engine mit ein usw....nie glech in grossen maßstäben denken, sondern immer schön eins nach dem andern. Und erst wenn die aktuelle Sache 99%tig läuft, zum nächsten über gehen. Ihr werdet sonst sehr schnell an eure frustrationsgrenze kommen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von TNDAri am .
Gruss Ari
Wer lesen kann ist klar im vorteil!
MSDN
Dein Feund in allen fragen
private Nachricht | Beiträge des Benutzers
0815Coder
myCSharp.de - Member



Dabei seit:
Beiträge: 770

beantworten | zitieren | melden

Zitat von Siassei
Was geschiet mit den Sektoren, wo sich kein Spieler aufhält, jedoch KI's und sich bewegende Objekte vorhanden sind?

Gegenfrage:
Was ist, wenn im Wald ein Baum umfällt und keiner ist da, der den Krach hören kann?
loop:
btst #6,$bfe001
bne.s loop
rts
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 411

Themenstarter:

beantworten | zitieren | melden

Zitat von TNDAri
Also deine GraKa kann keine Physik rechnen. Da ist die stumpf zu blöde für. Sie kann "nur" deine grafik berechnen. Deswegen heisst sie ja Grafikkarte und nicht Physikkarte
[EDIt] sorry muss mihc verbessern, die neusten GraKas haben auch eine Physik prozessor mit drauf, aber könnt ihr davon ausgehen, das jeder Client so eine besitzt????[/EDIT]

Wir können davon ausgehen ;-) Da wir die erste Alpha erst in ca. 4 Jahren (Hobby) erwarten und bis dahin sollte dies doch ein Standart in einer Grafikkarte sein und bei einer Onboard Lösung wird das OpenGL wahrscheinlich auf die CPU schieben. Hast du schon Erfahrungen mit diesen Modell gesammelt? Gibt es irgendwo hierfür eine vernünftige Doku für OpenGL?

Achja, wir haben schon das mit der kleinen Singleplayerwelt hinteruns und wollen jetzt mal eine Multiplayergame bauen.

MfG,
Thomas
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 411

Themenstarter:

beantworten | zitieren | melden

Zitat von 0815Coder
Zitat von Siassei
Was geschiet mit den Sektoren, wo sich kein Spieler aufhält, jedoch KI's und sich bewegende Objekte vorhanden sind?

Gegenfrage:
Was ist, wenn im Wald ein Baum umfällt und keiner ist da, der den Krach hören kann?

Gegenfrage:
Jetzt gehe ich in den Wald und der Baum steht noch, aber ich hab ja vorher einen Zeitzünder angebracht 8)
private Nachricht | Beiträge des Benutzers
TNDAri
myCSharp.de - Member

Avatar #avatar-2507.jpg


Dabei seit:
Beiträge: 139
Herkunft: Bremen

beantworten | zitieren | melden

Moinsen!

Also erstmal zu euerem Baum ding: Wenn kein player in einem Sktor ist, muss dort auch ncihts passieren, uasser vielleicht spawns von npc's. Ob sich ein NPC nun 2 felder vor bewegt oder nicht ist vollkommen unerheblich.

Dann zu erfahrung: Also ich hab mal ne zeit lang an einem multiplayer rollenspiel gesessen (in 2d aber) habs dann irgednewann auf gegeben, weils einfach ein zu grosse aufgabe für mihc war.
Zur zeit bastel ich einen 2D Engine für XNA (hab bock auf simple jump and run spiele ). Ausserdem hilfts in die ganze materien erstmal rein zu kommen, bevor ich auf 3D umsteige.

Sachen zu OpenGL, physik usw, würde ich mal bei GameDev.net im forum nachfragen bzw suchen. Da hocken die experten was spiele programmierung angeht und bis jetzt kann ich nur positives von der community dort berichten.
Gruss Ari
Wer lesen kann ist klar im vorteil!
MSDN
Dein Feund in allen fragen
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 411

Themenstarter:

beantworten | zitieren | melden

Danke für deine Antwort.

Ah 2D Spiele. Die besten Spiele allerzeiten wurden in 2D programmiert ;-) Leider liegt seit ca. 6 Jahren der Schwerpunkt in der Grafik. Die KI kann noch so blöd sein, wenn die Grafik gut ist, wird das Spiel ein Kassenschlager. Achja die gute alte Zeit mit Comados, StarCraft, Age of Empieres, Falcon, ...

MfG,
Thomas
private Nachricht | Beiträge des Benutzers
TNDAri
myCSharp.de - Member

Avatar #avatar-2507.jpg


Dabei seit:
Beiträge: 139
Herkunft: Bremen

beantworten | zitieren | melden

Ja is leider so :(. Und genau das nervt mich auch an den heutigen spielen. Alle sind nur noch geil auf Grafik aber ein wirklich gut durchdachtes spiel prinzip findet man nur noch selten.
Aber ich leg mein schwerpunkt zur zeit auf sachen Physik. Will mal ein Jump 'n Run spiel haben, was 1. ne geniale Physik beinhaltet und 2. mal so nebenbei gespielt werden kann. Und dafür brauch ich nicht soooo die hammer Grafik. Klar muss es chic aussehen, aber nicht total überlastet sein (man schaue sich z.B. die FIFA Spiele von EA an. Jedes jahr ein neues und dabei wurde die Engine nur etwas mehr aufgebohrt. Die KI ist aber immer gleich blöd geblieben)

Bin echt mal gespannt auf euer 3D ding Wenn ich irgendiw ehelfen kann, sagt bescheid.
Gruss Ari
Wer lesen kann ist klar im vorteil!
MSDN
Dein Feund in allen fragen
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 411

Themenstarter:

beantworten | zitieren | melden

Danke für dein Hilfe angebot. Ich hab jetzt ein Netzwerk Konzept gefunden und werde es mal umzusetzen versuchen. Da bin ich schon gespannt. Das mit der Graka und Physik hat sich erledigt, da das Programm sowie so immer die Positionen der einzelnen Objekte kennen muss -> meiner Meinung nach ist der Informationsaustausch zwischen GraKa und CPU langsamer, als das Abrufen der Daten aus dem RAM.

-> GraKa wird nur zur visuellen Darstellung genutz.

Jetzt wird es wohl in den nächsten Monate viele lange Nächte geben. Wenn wir das Grundgerüst der 3D Welt haben und das Netzwerknetz steht, werden wir ein OpenSource Projekt erstellen. Denn hier entsteht erst die Arbeit ...

Ich werde mich jedenfalls ihr mal wieder bei dir melden (ca. 1/2 Jahr)

MfG,
Thomas
private Nachricht | Beiträge des Benutzers