User Tag List

Ergebnis 1 bis 11 von 11

Thema: Performance-Frage zu Overlap-Checks

  1. #1
    Stammgast Avatar von Josch
    Registriert seit
    19.06.2010
    Ort
    Dresden, Wunschheimat: Padua
    Beiträge
    1.323
    Renommee-Modifikator
    19

    Performance-Frage zu Overlap-Checks

    Heyhoh,

    ich hatte vor einiger Zeit mal im Unreal-Forum eine Frage bezüglich Overlap-Chekcs gestellt. Aber wie so oft kam dort keine Antwort trotz vieler Views.. Deswegen versuche ich hier nochmal mein Glück. Aus Faulheitsgründen kopiere ich hier einfach mal meinen Text aus dem Original-Thread. Falls jemand eine Übersetzung braucht, einfach Bescheid geben, da fasse ichs nochmal kurz in Deutsch zusammen. Aber ich denke, dass die meisten hier eh englisch beherrschen?

    Hey everyone,

    Iam still working on my GTA2-Remake and part of that project is to simulate pedestrians and traffic. For not having to simulate a ridiculous amount of AI_characters and AI_vehicles that populate the entire city I spawn the respective actors inside a volume around the player.
    For keeping track on how many cars and pedestrians are within that volume I have them register into lists (currently Iam using arrays but I read that probably sets are more performance efficient?). That requires me to make my "player frustum volume" make a lot of "OnBeginOverlap" and "OnEndOverlap" events. Of course only the actors that are character or vehicle AI actors are being added to the lists (Iam currently sorting that out by checking the actor names) but naturally also all other actors that are present in the level will fire these events.

    Then, for finding suitable spawning locations I have to do some more overlap checks. For instance: When a car is supposed to be spawned a collision box with the approximate size of the car is placed at the potential spawning location and an overlap check is done. Only if the space is free the car is actually spawned.

    And then, of course, each car has to sense a bit its surroundings in order to not constantly crash into each other. Therefore each AI_vehicle has a box collision component attached in front of itself that makes it aware when it has to break.

    Finally there will be more overlap checks: At traffic lights (for telling the car to stop in the correct place), for crosswalks (both pedestrians and vehicles have to know if to wait or not) and i suppose that some more might come in the further development.

    As you can see my current approach relies on a quite impressive amount of overlap checks. At least for my impression but Iam quite new in this entire business^^
    So my question is: Is the approach Iam following reasonable for creating the game logic that I want to have? Or are the many overlap checks eventually a bit too costly? Iam still in my planning phase and could still quite simply switch strategies.

    Many thanks and best wishes,
    Hackmet
    Falls jemand von euch dazu etwas sagen kann, wäre ich ganz dankbar. Oder auch für Ideen diesbezüglich.
    Nur Puffin schenkt mir die Kraft und Ausdauer, die ich brauche!

  2. #2
    Administrator Avatar von DaEngineer
    Registriert seit
    23.06.2010
    Beiträge
    1.576
    Blog-Einträge
    2
    Renommee-Modifikator
    20
    Hm, so wirklich weiterhelfen kann ich dir damit nicht, weil ich auch nur Artist bin und mit Blueprints so weit komme, wie meine Fähigkeiten das gerade noch zulassen. Ich bin leider nie bis KI gekommen und hab mich auch für all solche Dinger immer auf Collider verlassen. @eXi weiß da bestimmt mehr drüber, aber ich frag mich gerade auch, wie man das eleganter Lösen soll. Ich wär auf jeden Fall auch interessiert an der Lösung

  3. #3
    Mapping-Profi Avatar von eXi
    Registriert seit
    21.06.2010
    Ort
    Krefeld
    Alter
    27
    Beiträge
    2.554
    Renommee-Modifikator
    28
    Ich versuch morgen mal was Zeit zu finden drüber zu lesen. Ansonsten nochmal taggen damit ich dran erinnert werde.

    Du/ihr könnt auch unseren Discord Server joinen. Dort sind mittlerweile 5k+ Member die in jedem Thema iwo Hilfe anbieten. Dort kann man mich auch als "cedric_exi" finden. Das geht meist schneller als des Forum.

    Einfach dem link folgen: Http://www.unrealslackers.org

  4. #4
    Moderator Avatar von Campeòn
    Registriert seit
    20.06.2010
    Ort
    Bielefeld
    Beiträge
    2.205
    Blog-Einträge
    1
    Renommee-Modifikator
    22
    Wow, das sind wirklich viele Member. Bin auch gleich mal gejoint.

    Spontan würde ich sagen, dass das schon richtig ist was du dir da überlegt hast. Wenn du sagen wir mal 50 Autos und 50 Passanten in deinem Volumen um den Player herum hast (was schon beides ziemlich hohe Zahlen wären), dann würde es vermutlich reichen 2-3 Abfragen pro Sekunde pro Auto/Passanten zu machen. wären 200-300 Overlap abfragen pro Sekunde, was sich für mich performance technisch unproblematisch anhört. (habe mit performance in unreal aber auch nicht viel Erfahrung, das spricht meine reine Programmierer Erfahrung )

    Man könnte es aber auch verbessern, in dem sich Autos zum Beispiel an einer roten Ampel registrieren und so lange wie die Ampel rot ist keine Overlap checks machen (da sie eh still stehen). Genau so mit Passanten, die gerade nur rumstehen.

    Anstelle von Overlap Checks könntest du auch ray castings machen. Ich weiß aber nicht was von beidem schlauer oder performance sparender ist.
    Geändert von Campeòn (12.05.2017 um 00:39:21 Uhr)
    Because we do not know when we will die, we get to think of life as an inexhaustible well, and yet everything happens only a certain number of times ... And a very small number really. How many more times will you remember a certain afternoon of your childhood ... an afternoon that is so deeply a part of your being that you can't even conceive of your life without it? Perhaps four or five times more. Perhaps not even that. How many more times will you watch the full moon rise? Perhaps 20. And yet it all seems limitless.

  5. #5
    Mapping-Profi Avatar von eXi
    Registriert seit
    21.06.2010
    Ort
    Krefeld
    Alter
    27
    Beiträge
    2.554
    Renommee-Modifikator
    28
    Also die Overlap events sind eigentlich nicht sooo wild.
    Was du machen kannst ist dir "Collision Object Channel" und "Collision Trace Channel" in den ProjectSettings erstellen.
    Dann kannst du zum Beispiel die Overlap checks für das Spieler Frustum nur auf Objekte der Klasse "Auto" und "Pedestrian" beschränken.

    Für "Check beim Spawnen vom Auto", kannst du eigentlich auch einen "Shape Trace" machen. Wenn du BPs benutzt heißt das irgendwie "Box Trace by Object/Channel". Für C++ musst du googlen.
    Dann musst du keinen Actor dafür spawnen. Eine andere Idee wäre es sich den NavMesh zunutze zu machen.
    Wenn du einen NavMesh hast, dann kannst du die getracete Position nehmen und dann (weiß den Namen der Node gerade nicht) die nächst beste Position auf dem NavMesh finden lassen.

    Traffic Lights, Crossings, etc. lassen sich auch per Trace/Object Channel auf bestimmte Actors begrenzen.

    Für die AI Cars zum orientieren würde ich eher Single Line Trace by Channel/Object nehmen, anstatt nen Overlap, aber denke das macht den Braten auch nicht fett.

  6. #6
    Stammgast Avatar von Josch
    Registriert seit
    19.06.2010
    Ort
    Dresden, Wunschheimat: Padua
    Beiträge
    1.323
    Renommee-Modifikator
    19
    Danke für den Tipp mti den ObjectChannels, da muss ich mal gucken. Das würde meinen Code auf jeden Fall einfacher machen, weil ich aktuell immer ganz schön rumfiltern und gucken muss, dass er nur die relevanten Dinge ausspuckt.
    Den BoxOverlapByChannel hab ich auch schon genutzt, aber performancetechnisch ist das ja eigentlich egal, ob ich das nutze oder ne CollisionBox und da die Overlaps abrufe.

    Navmesh nutze ich für die Fahrzeuge nicht, aber die Fußgänger werden damit arbeiten.

    Für die AI Cars mit LineTraces arbeiten könnte ich mal testen, aber ich habe etwas Schiss, dass er dann Dinge übersieht, weil das letzendliche Volumen, in das ein Hindernis kommen muss, damit das Auto bremst, doch entsprechend klein ist.. Ich habe schon mit der Größe der CollisionBox für die Bremserkennung der Autos etwas gespielt, damit er nicht zu wenig und nicht zu viel erkennt.
    Nur Puffin schenkt mir die Kraft und Ausdauer, die ich brauche!

  7. #7
    Stammgast Avatar von Josch
    Registriert seit
    19.06.2010
    Ort
    Dresden, Wunschheimat: Padua
    Beiträge
    1.323
    Renommee-Modifikator
    19
    Zwar miserable Qualität (muss mich nochmal in die Aufnahmesachen reinfriemeln), aber ich bin ganz happy, dass die Fahrzeug-"KI" jetzt ganz gut funktioniert


    Das ganze ist jetzt tatsächlich über eine SpawnBox realisiert, die guckt, wie viele Fahrzeuge drin sind und dann entsprechend nachgeneriert. Wenn weitere Infos gewünscht sind, kann ich das ganze gern etwas genauer dokumentieren
    Nur Puffin schenkt mir die Kraft und Ausdauer, die ich brauche!

  8. #8
    Mapping-Profi Avatar von eXi
    Registriert seit
    21.06.2010
    Ort
    Krefeld
    Alter
    27
    Beiträge
    2.554
    Renommee-Modifikator
    28
    Sieht gut aus. Du kannst zum Aufnehmen eigentlich OBS benutzen. Das ist zwar eigentlich zum Streamen gedacht, hat aber eine Aufnahme Funktion.

    Ansonsten poste sowas mal auf Twitter mit "@UnrealEngine", "@UnrealAlexander" und "@exifrexi".
    Epic Games, Community Manager und natürlich auch Ich teilen sowas immer gerne! (:

  9. #9
    Moderator Avatar von Campeòn
    Registriert seit
    20.06.2010
    Ort
    Bielefeld
    Beiträge
    2.205
    Blog-Einträge
    1
    Renommee-Modifikator
    22
    Sieht sehr geil aus wie bei Sekunde 40 das Auto rechts um die Kurve driftet.
    Because we do not know when we will die, we get to think of life as an inexhaustible well, and yet everything happens only a certain number of times ... And a very small number really. How many more times will you remember a certain afternoon of your childhood ... an afternoon that is so deeply a part of your being that you can't even conceive of your life without it? Perhaps four or five times more. Perhaps not even that. How many more times will you watch the full moon rise? Perhaps 20. And yet it all seems limitless.

  10. #10
    Stammgast Avatar von Josch
    Registriert seit
    19.06.2010
    Ort
    Dresden, Wunschheimat: Padua
    Beiträge
    1.323
    Renommee-Modifikator
    19
    Zitat Zitat von eXi Beitrag anzeigen
    Sieht gut aus. Du kannst zum Aufnehmen eigentlich OBS benutzen. Das ist zwar eigentlich zum Streamen gedacht, hat aber eine Aufnahme Funktion.

    Ansonsten poste sowas mal auf Twitter mit "@UnrealEngine", "@UnrealAlexander" und "@exifrexi".
    Epic Games, Community Manager und natürlich auch Ich teilen sowas immer gerne! (:
    Ich poliere das ganze noch etwas und poste es dann mal ;-) Habe glaube noch einen TwitterAccount - muss ich mal gucken

    Zitat Zitat von Campeòn Beitrag anzeigen
    Sieht sehr geil aus wie bei Sekunde 40 das Auto rechts um die Kurve driftet.
    Ja, ich muss glaube nochmal die Höchstgeschwindigkeit in den Kurven etwas anpassen; noch fetzen die wirklich recht flott rum.
    Nur Puffin schenkt mir die Kraft und Ausdauer, die ich brauche!

  11. #11
    Mapping-Profi Avatar von eXi
    Registriert seit
    21.06.2010
    Ort
    Krefeld
    Alter
    27
    Beiträge
    2.554
    Renommee-Modifikator
    28
    Zitat Zitat von Josch Beitrag anzeigen
    Ich poliere das ganze noch etwas und poste es dann mal ;-) Habe glaube noch einen TwitterAccount - muss ich mal gucken


    Ja, ich muss glaube nochmal die Höchstgeschwindigkeit in den Kurven etwas anpassen; noch fetzen die wirklich recht flott rum.
    Mach das, hier mal die relevanten Twitter Accounts die du "@Name" markieren kannst:

    https://twitter.com/exifrexi
    https://twitter.com/UnrealAlexander
    https://twitter.com/UnrealEngine

    Und schön auf follow drücken. Dann kriegste auch alle spannenden posts mit

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
[email protected]