Ich habe in letzter Zeit Spiele wie MW2 gespielt und als Programmierer neige ich dazu, mich zu fragen, wie sie das Spiel so immersiv machen. Zum Beispiel, wie sie die Geschossgeschwindigkeit simulieren.
Wenn ein NPC eine Kugel aus seiner Waffe abfeuert, bewegt sich die Kugel dann wirklich von seiner Waffe zum angegebenen Ziel oder ignorieren sie diesen Teil vollständig und platzieren einfach ein Einschussloch auf dem Ziel?
Wenn die Kugel wirklich von der Waffe zum Ziel fliegt, mit welcher Geschwindigkeit fliegt sie dann tatsächlich?
projectile-physics
mahen23
quelle
quelle
Antworten:
Die meisten FPS-Spiele verwenden Raycasting für das eigentliche Gameplay. Kugeln reisen sofort und treffen das Ziel, wenn sie abgefeuert werden.
In den meisten Spielen werden jedoch auch "gefälschte" Tracer verwendet. Alle 3 Schüsse oder ein anderes Intervall wird ein Tracer zusammen mit der Kugel abgefeuert, der Tracer ist sehr schnell, aber nicht sofort. Dies geschieht nur als visueller Effekt und wirkt sich nicht direkt auf das Spiel aus, sondern gibt dem Schützen, dem Schuhläufer, Hinweise und gibt Zuschauern einen Hinweis auf Schüsse.
Die meisten Spiele, in denen diese Art von Kugelphysik verwendet wird, sind unrealistisch, da es keine Abpraller und keine Kugelfragmente gibt und wenn es eine Penetration gibt, ist diese normalerweise linear.
Einige Spiele wie ARMA II, STALKER (ganze Serie) verwenden eine realistischere Geschossphysik mit Laufzeit, Abprallern und Durchschlag mit Ablenkungswinkeln. Ich glaube, diese Systeme verwenden Raycasting, aber mit einer Grenze, die durch die Geschwindigkeit der Kugel bestimmt wird. Bei diesen Spielen kann die Mündungsgeschwindigkeit realistisch sein wie bei ARMA II oder ungefähr so aussehen wie bei STALKER.
Ich bevorzuge eine realistische Geschossphysik, da Geschütze Projektile abfeuern, keine Laser.
quelle
Bei Kugeln machen sie sich im Allgemeinen nicht die Mühe, die Kugel zu simulieren, die tatsächlich durch die Luft fliegt, und setzen einfach ein Einschussloch auf das Ziel, sobald es abgefeuert wird. Andere Dinge wie Raketen sind langsamer * und das Spiel zeigt, wie sie durch die Luft fliegen.
Auf den kurzen Strecken bewegen sich die Kugeln, zusammen mit dem Zeitraffer zwischen den Bildern, die sie sowieso zwischen oder innerhalb von 1 Bild vom Schützen zum Ziel bringen würden.
* Das heißt, langsamer als Raketen im wirklichen Leben, damit der Spieler sie durch die Luft fliegen sieht.
quelle
Ich habe den Bullet-Code für PlanetSide geschrieben. Wir hatten ein paar "Hitscan" -Projektile, simulierten die Projektile jedoch größtenteils so gut wir konnten, da die CPU-Beschränkungen und die große Anzahl der zu spielenden Kugeln jederzeit gegeben waren.
Im Fall von Hitscan wird die Auswirkung im selben Frame wie die empfangene Eingabe bestimmt, häufig unter Verwendung eines einzelnen Raycasts. Dies ist für Waffen wie Laser oder andere extrem schnelle Projektile geeignet. Wir haben den Trefferscan durchgeführt, indem wir die Anfangsgeschwindigkeit des Projektils so hoch eingestellt haben, dass es das Spielbrett in einem einzigen Tick überquert.
Non-Hitscan-Geschosse werden entweder auf die Grafik-Frame-Zeit oder auf einen festen Zeitschritt angehakt, wobei Berechnungen für Beschleunigung (Think Rockets), Schwerkraft, Luftreibung, Lenkung (Think Heat Seeking Projectiles) usw. angewendet werden. Das Ziel ist es, die Endposition des Projektils für den Zeitschritt zu generieren. Sobald der Start- und Endpunkt festgelegt sind, können ein oder mehrere Strahlen geworfen werden, um die Flugbahn zu approximieren und Kollisionen zu erkennen, die während des Fluges aufgetreten wären.
Was bei einer Kollision sowohl bei Hitscan- als auch bei Nicht-Hitscan-Projektilen passiert, hängt von Ihren Projektileigenschaften und der Oberfläche ab, auf die Sie einschlagen. Zum Beispiel könnten Sie auf eine harte Oberfläche treffen. In diesem Fall könnten Sie Ihre Abprallzahl überprüfen und entweder die Position und Geschwindigkeit pro Reflexion anpassen oder das Projektil zur Detonation bringen, wenn Sie Ihre maximale Abprallzahl erreicht haben. In diesem System hat eine Rakete nur eine maximale Abprallzahl von 0. Sie könnten auf eine weiche Oberfläche treffen und dann Ihre Durchschlagskraft prüfen, um festzustellen, ob das Projektil das Material durchschlagen soll usw.
Es hat Spaß gemacht, Code zu schreiben. Außerdem ist es sehr nützlich, eine gute Debug-Visualisierung der Vorgänge zu schreiben, damit Sie Flugwege, Ereignisse usw. visuell überprüfen können.
quelle
Das hängt vom Spiel und der Genauigkeit / dem Realismus ab.
Das Synchronisieren von Schieß- und Schadensmodellen in Mehrspielereinstellungen ist ziemlich schwierig, da Sie genau bestimmen müssen, wo und wann genau eine Kugel abgefeuert wurde, ob sie ein Ziel getroffen hat und ob etwas anderes den Pfad passiert hat.
Daher vermute ich, dass Spieleentwickler die Dinge nach Möglichkeit vereinfachen, indem sie entweder einige Schüsse als augenblicklich behandeln (sodass Sie nur den Standort aller zu einem bestimmten Zeitpunkt berücksichtigen müssen) oder die Reichweite der Kugel einschränken. Zum Glück entspricht dies oft der realen Physik. Beispielsweise feuern Scharfschützengewehre Hochgeschwindigkeitsgeschosse ab.
Viele Spiele können einen mehrstufigen Multi-Snapshot-Pfad eines sich langsam bewegenden Objekts (wie Artillerie, Bomben, Markierungsrunden usw.) simulieren. Dies ist jedoch sehr kostspielig und Synchronisierungsprobleme treten häufiger auf, was zu lustigen YouTube-Videos führt.
Ein weiteres Problem sind Spiele, in denen kleinere "Umgebungen" separat verwaltet werden (z. B. wird jeder Raum separat simuliert), um die Illusion eines größeren Raums zu erzeugen. In diesen Fällen können Dinge innerhalb der Grenzen eines "Raums" korrekt simuliert werden, so dass jeder im Raum über die Serie von Übergängen im Raum, die die Kugel macht, informiert wird, andere außerhalb dieser Umgebung jedoch nicht.
quelle
Bei Projektilen, die sich schneller fortbewegen, als das Auge sehen kann, wird häufig Raycasting angewendet. Ein Strahl aus der Mündung wird mit der entsprechenden Richtung berechnet und mit potenziellen Zielobjekten verglichen, um festzustellen, was getroffen wurde. Dies kann mit mehreren Strahlen und einigen zusätzlichen Berechnungen kompliziert sein, wenn Sie Dinge wie das Abwerfen von Kugeln und dergleichen simulieren möchten. Sie können den Projekten auch eine Geschwindigkeit geben und diese verwenden, um der Berechnung einen zusätzlichen Realismus zu verleihen (Aufzählungszeichen sind also nicht sofort sichtbar).
quelle
Es hängt von der Implementierung ab, aber ich weiß, dass die Source Engine überhaupt keine physischen Kugeln (Projektilobjekte) verwendet hat, sondern nur einen Strahlenwurf vom Spieler zum Ziel mit einem zufälligen "Trefferzonen" -Kreis (abhängig von größeren oder kleineren Radien) Wie schnell die Waffe abgefeuert hat und ob der Spieler den Feuerknopf gedrückt gehalten hat), welches Zentrum der Punkt war, auf den der Spieler zielte, nachdem der tatsächliche Strahl vom Spieler zum zufällig bestimmten Punkt geworfen wurde und abhängig von anderen Faktoren (wie bullet "weight" und mündungsgeschwindigkeit (alle internen zahlen), objekttreffer usw.) der strahlwurf wurde durch mehrere objekte geworfen oder bis er gelände traf.
Auf der anderen Seite verwendete die Torque 3D Engine DID tatsächliche Projektilobjekte und der Konstrukteur konnte ihre individuellen Geschwindigkeits-, Masse- und Schwerkraftmodifikatoren beeinflussen. Der Motor hat lediglich alle 32 Millisekunden die Werte aktualisiert.
BEARBEITEN
Zusätzlich zur Verwendung von Projektilobjekten ermöglichte die Torque 3D Engine auch die Verwendung von Raycasts als Alternative. (Ich habe mehrere Spiele gemacht, in denen das "Projektil" tatsächlich ein Partikeleffekt ist, der nicht die Unterstützung hat, die Projektilobjekte hatten, weshalb ein Strahlenwurf erforderlich war.)
quelle
Im Team Fortress 2 Wiki gibt es eine ziemlich coole Beschreibung des Verhaltens ihrer Projektil- und Treffer-Scan-Waffen.
http://wiki.teamfortress.com/wiki/Mechanics#Hit_detection
quelle
Tatsächlich verwenden viele Spiele einen GPU-Rendering-Hit-Test-Algorithmus. Hier ist die grundlegende Funktionsweise:
1) Erstellen Sie außerhalb des Bildschirms ein Rendering der aktuellen Ansicht, in der das gesamte Gelände schwarz ist und jedes Zeichen eine nicht schwarze Farbe hat. 2) Ermitteln Sie die Farbe des Pixels unter dem Fadenkreuz. > Spielerzuordnung und einen Treffer auf dieses Ziel anwenden.
Diese Methode wird seit Jahren in Spielen eingesetzt, vor allem, weil sie pixelgenau ist. Wenn ein einzelnes Pixel des Spielerhutes hinter einer Wand hervorsteht, können Sie ihn schlagen. IE, wenn Sie es sehen können, können Sie es schlagen. Diese Art von Präzision ist mit einfachen Strahlgusstechniken so gut wie unmöglich. Und zweitens ist diese Art von Test extrem schnell und kann auf der GPU durchgeführt werden.
quelle
Einige Spiele verwenden zweifellos realistische Geschossphysik unter Berücksichtigung der Geschosslaufzeit und des Abwurfs, aber ich vermute, dass die meisten Spiele dies nicht tun, zumindest für NPCs.
Für ein Spiel, das eine direkte Kugelbewegung (kein Tropfen) ausführt, wird eine imaginäre Linie (Vektor) vom Punkt des Laufs nach vorne gezogen. Es berechnet dann, mit was sich diese Linie schneidet, und registriert einen Aufzählungspunkt "Treffer" an diesem Punkt. Es kann sich um ein festes Objekt wie eine Wand handeln, an der ein Aufprall einen Effekt auslöst, z. B. einen Aufprall auf eine Kugel und eine Rauchwolke. Es kann auf ein zerbrechliches Objekt einwirken, wodurch es zerbrochen wird, oder es kann auf ein physisches Objekt einwirken und ihm einen "Tritt" geben. Oder natürlich trifft es den Spieler oder einen anderen NPC und verursacht einen Gesundheitstreffer. Harte Kernsimulationen modellieren das Eindringen des Geschosses in Wände und lösen einen Treffereffekt auf der Ausgangsseite aus, wodurch der Schaden des Geschosses beim Austritt wahrscheinlich verringert wird.
Nur damit NPCs kein perfektes Ziel haben, fügen viele Spiele dem Vektor eine Art Randomisierung hinzu, um die Ausbreitung der Kugeln zu modellieren. Dies ist, was Sie im wirklichen Leben sehen würden, wo nicht alle Kugeln nur dort treffen, wo Sie zielen, sondern in einem Muster, das um den Zielpunkt zentriert ist.
Um die Ausbreitung der Kugel zu visualisieren, stellen Sie sich statt einer geraden Linie (Vektor) einen Kegel vor, der aus der Waffe austritt. Die tatsächliche Geschossrichtung ist zufällig so gewählt, dass sie sich irgendwo innerhalb dieses Kegels befindet. Befindet sich der Schütze wirklich in der Nähe des Ziels, ist die Streuung gering und die Genauigkeit hoch. Wenn das Ziel weit entfernt ist, erhöht sich die Streuung des Kegels, sodass der Schütze das Ziel weniger wahrscheinlich trifft.
Diese Idee des Schusskegels kann verwendet werden, um die Schützengenauigkeit (Fertigkeit), Waffengenauigkeit und andere Bedingungen zu modellieren. Beispielsweise könnte ein NPC mit niedrigem Level einen Schusskegel mit niedriger Genauigkeit erhalten, wohingegen ein NPC mit hohem Qualifikationsniveau eine hohe Genauigkeit aufweisen würde. Ein Spieler, der mit einer Maschinenpistole aus der Hüfte schießt, hat einen weiten Schusskegel, der sich verringert, wenn er aufhört zu laufen oder zielt. Scharfschützengewehre hätten von Natur aus engere Schusskegel als eine Pistole.
quelle
Apropos Nexuiz-Quellcode: Als ich einen Blick darauf geworfen habe, haben sie tatsächlich kein 'Aufzählungszeichen' von Punkt A nach Punkt B gesendet. Der Code zeigt an, wohin Ihre Waffe zeigt, wenn sie abgefeuert wird. Wenn es auf eine Person gerichtet ist (und eine Sofortwaffe ist), wenn Sie auf "Feuer" klicken, haben Sie einen Treffer erzielt.
Bemerkenswert ist auch, wie Nexuiz die serverseitige Möglichkeit hatte, Treffer auf dem Client oder auf dem Server zu berechnen. Wenn Sie vermuten, dass Clients betrügen, können Sie zu serverseitigen Trefferberechnungen wechseln, um dies zu verringern.
quelle
Eine andere Strategie ist eine Mischung aus Rendering und Raytracing. Sie müssen nicht unbedingt jede Kugel rendern. Wenn Ihre Waffe beispielsweise 30 Schuss / Sekunde abfeuert, kann ein Schuss einige hundert Partikel erzeugen ... Sie können das Rendering durch die Verwendung eines "Tracer-Effekts" reduzieren, jeden dritten Schuss rendern und die anderen beiden Strahlen verfolgen. Der Spieler sieht immer noch 10 Schuss pro Sekunde auf den Feind schießen.
Passen Sie die Einstellungen an Ihre spezifische Situation an, rendern Sie mehr für Waffen mit niedrigerer Feuerrate und weniger für höhere.
quelle
Vergessen Sie nicht, dass die Framerate im Vergleich zur Geschwindigkeit des Geschosses ein Problem sein kann. In einigen Fällen kann das Geschoss ein Objekt durchdringen, ohne es zu treffen, wenn Sie Ihre Physik-Engine nicht gut genug codiert haben. Für diese Angelegenheit gibt es eine Lösung, an die ich mich nicht sehr gut erinnere ...
Wie auch immer, ich denke, es kann sehr problematisch sein, realistische Kugeln in einer Multiplayer-Umgebung zu kompensieren, wenn nicht unmöglich, wenn die Latenz länger als 30 oder 50 ms ist.
Eines Tages interessiert sich der ISP vielleicht ein bisschen mehr für die Latenz und liefert verschiedene Angebote ... aber ohne FTTH ist es immer noch ein Traum ...
quelle
In solchen Spielen wie Bad Company, Battlefeild 3 und Stalker glaube ich, dass die Kugel eine tatsächliche Einzelentität ist, die wie eine "Rakete" abgefeuert wird. Ich denke nur, dass Raytracing notwendig ist, wenn die Kugel das Ziel sofort trifft. Wenn die Entität sich selbst in realistischen Kugeln befindet, tickt sie nur, um zu sehen, ob sie jemanden trifft.
quelle
Wenn Sie sich Videowiederholungen in Call of Duty ansehen, können Sie tatsächlich schwach einen orangefarbenen Zweibeiner sehen, der durch die Luft zum beabsichtigten Ziel fliegt, und attackinghobo hat tatsächlich größtenteils die richtige Antwort darauf.
Wenn Sie einen Richochet-Effekt wie Hobo möchten, spielen Sie einfach eines der Halo-Spiele. Wenn Sie aus einer näheren Position auf eine Metallwand schießen, können Sie die Kugeln sehen, die vom Metall abprallen. Der Scharfschütze hinterlässt eine Spur, auf die er trifft.
Retarted Antwort beendet, ich kann später zurückgehen, um zu beheben.
quelle
Die Kugeln und die gesamte Physik in der Stalker-Reihe von Spielen verwenden eine Open-Source-Bibliothek mit dem Namen "Open Dynamics Engine".
http://en.wikipedia.org/wiki/Open_Dynamics_Engine
Die Kugeln fallen mit der Schwerkraft und hüpfen sogar an Wänden herum und stopfen sehr genau, wenn Sie klug genug sind, eine Kugel von etwas abzubiegen, um auf jemanden zu schießen, den Sie nicht sehen, aber dessen Position kennen. Die Kugel ist ein tatsächliches Objektmodell. Dies ist die realistischste Methode, die ich je gesehen habe. Die Ray-Trace-Methode ist nicht praktikabel, wenn Sie sich in große Räume begeben. Es wäre aber in Ordnung, eine Laserpistole zu schießen.
Andere Spiele, die es verwenden BloodRayne 2, Call of Juarez, World of Goo, X-Moto und OpenSimulator.
Eine weitere gute Wahl wäre die Physikbibliothek "Bullet". http://en.wikipedia.org/wiki/Bullet_%28software%29
Es wurde in Grand Theft Auto 4, Red Dead Redemption und mehr verwendet.
ps arma 2 verwendet eine hauseigene physik-engine, ihr nächstes spiel arma 3 wird die physX physik-engine verwenden
quelle