Results 1 to 10 of 10
  1. #1 Reply With Quote
    Neuling
    Join Date
    May 2021
    Posts
    3
    Hallöle Allesamt,
    Ich weiß nicht ob es angemessen ist, aber fragen kann man ja mal. Also, ich mache gerade ein Spiel, und da ich erst von ungefähr 10 Monaten angefangen habe mir alles selbst beizubringen, da ich vorher null Vorkenntnisse hatte.
    Ich bin schon recht weit gekommen mit meinem Projekt, welches eine solide Basis hat und steht. Das Problem ist die AI, wenn ich ungefähr 30 AI betriebene NPC's in meiner Welt habe, Droppen die FPS super runter. Ich habe alle Spiele von den Piranha Bytes geliebt und gespielt,
    angefangen mit Gothic als ich noch ein kleiner Stubenhocker war bis hin zu Elex. Was mich immer am meisten beeindruckt hat war natürlich das Dialog und Quest System, das die NPC's auch wirklich nachdem er dir sagt er geht in die Stadt, sich auf den Weg dorthin macht.
    Auch die Optimisierung der Welt, Elex zb. läuft super auf max Details und obwohl so viel in der Welt ist und es sich so Lebendig anfühlt, bricht nichts ein, meiner Meinung nach ein RICHTIG guter Job dabei!
    Hier mal eine kleine Liste die ich mir aufgeschrieben habe und irgendwer sie mir beantworten könnte kurz und knapp erklärt reicht schon, und klar wäre es super wenn mir irgendwer antworten könnte, ich weiß ja das die Piranhas selbst gerade viel zu tun haben!

    AI: Wie funktioniert es das ab einem bestimmten Radius die NPC's verschwinden, aber trotzdem ihre Aufgabe machen? Reicht da schon Culling?
    Optimisierung: Wie könnt ihr so viel Gras, Blumen halt die Vegetation allgemein im Spiel haben ohne das die FPS zu stark leiden, ich glaube ich hab eine vage Vorstellung wie, aber wäre cool wenn man das auch nochmal anspricht!

    Das war es eigentlich auch schon, Ich weiß das es viel mit eurem Editor zu tun hat der, wo ich mir sicher bin, unglaublich gut sein muss, aber es gibt ja auch allgemeine Tipps für sowas.

    vielen lieben Dank, an alle die sich die Zeit genommen haben es zu lesen, oder gar zu antworten!
    Rizzlord is offline

  2. #2 Reply With Quote
    General tombom81's Avatar
    Join Date
    Jun 2015
    Posts
    3,521
    Quote Originally Posted by Rizzlord View Post
    Hallöle Allesamt,
    ...
    AI: Wie funktioniert es das ab einem bestimmten Radius die NPC's verschwinden, aber trotzdem ihre Aufgabe machen? Reicht da schon Culling?
    Hallo ebenfalls,

    wer sagt, dass die NPCs weiter "ihre Aufgabe machen"? Nach meiner Erfahrung sind alle NPCs/monster out of RoI (Range of interaction) inaktiv. Ein übergeordnetes EnterROIScript (des gCPerceptionManagers?) müsste laufen (neben Timern, Speedtree und Wettereffekten), das erkennt, wann der PC_Hero in die Perception-Range eines NPCs/monsters eintritt.

    Siehe OnTickScript eines NPCs hier:
    Spoiler:(zum lesen bitte Text markieren)
    class gCPerception_PS {
    Version = 10;
    Properties {
    class bCString PerceptionSpecies = "defaultHuman";
    bool IsPerceiving = True;
    bool IsObservable = True;
    class eCScriptProxyScript AttitudeScript = "GetAttitude";
    class eCScriptProxyScript OnTickScript = "CheckForImportantInfo";
    enum gECrimeLocation CrimeLocation = gECrimeLocation_AbessaCity;
    enum gECrimeBehavior CrimeBehavior = gECrimeBehavior_RefuseTalkLocal;
    }
    ClassData {
    }


    Und bei Objekten wie Obj_Evt_Jet_FlyBy_1 wechselt gCStateGraph_PS seine Zustände, timer-gesteuert, vermute ich. Ansonsten macht es nicht viel Sinn, dass die NPCs im Hintergrund (also "out of ROI") nur einen Finger rühren.

    Weiß auch nicht, ob Perception und ROI dieselben Routinen betreffen. ROI ist vermutlich nur ein Wert (range), der vom Perception-Manager verwendet wird.

    (Nicht, dass ich irgendwelche Ahnung hätte, also bitte nicht jeden Satz auf die Goldwaage legen.)

    Es gibt z.B. AdditionalPerceptionRadius, class gCPerceptionEntry, PlayerPerceptionScript, "CanAutoRejoinOutsidePerceptionRange" usw., d.h. ohne Dokumentation ist man da auf bloße Vermutungen angewiesen.

    (Werde gleich mal testen, ob "OnDebugTogglePerceptionInfo" der DebugKeys aktivierbar ist.)
    "in der Erkundung dieser weiten und wunderbaren Welt" (post #70, höre link unten)
    TAS for Elex 2 at ELEX II Nexus - Mods and Community (nexusmods.com)
    Tuvok, scannen Sie den Planeten nach Mikroplastik!
    "Hört mir bloß auf mit "Stormson".
    "In Toussaint wird schon für kleinere Schmähungen als diese Satisfaktion verlangt."
    Genug der "Blumensträuße". Ich WILL MadBob! Beugt die Realität!
    tombom81 is offline

  3. #3 Reply With Quote
    Neuling
    Join Date
    May 2021
    Posts
    3
    Stimmt wohl, aber mir ist zb. aufgefallen, das wenn man in Elex xy anspricht er sagt er geht zu yx und man ihm folgt, er auch genau dies tut. Das muss ja heißen, dass wenn er in range ist die ai genau das macht was er sagt. Aber wenn man nicht in range ist werden die interaktionen direkt abgeschlossen nach einer weile? Immerhin kannst du diesen xy auch aus range laufen lassen, und dann doch hinterher und er tut was er gesagt hat. Klingt für mich doch ziemlich komplex. Oder es ist so etwas wie ein followtimer drin der dann checkt ob der spieler in den letzten 5min oder so in range war. Und wenn nicht er dann das event abschließt? Ist auf jeden fall richtig gut gemacht, das es sich so lebendig anfühlt.
    Rizzlord is offline

  4. #4 Reply With Quote
    General tombom81's Avatar
    Join Date
    Jun 2015
    Posts
    3,521
    Quote Originally Posted by Rizzlord View Post
    Stimmt wohl, aber mir ist zb. aufgefallen, das wenn man in Elex xy anspricht er sagt er geht zu yx und man ihm folgt, er auch genau dies tut. Das muss ja heißen, dass wenn er in range ist die ai genau das macht was er sagt.
    Wenn er in range ist. Bleib mal stehen und warte, Minuten, Stunden? Wenn du dann zu seinem Treffpunkt läufst (z.B. Caldrim und Orik), geht das Gespräch erst weiter, wenn du dazukommst (anders wärs ja auch sinnfrei).

    Das ist sowieso megageil, dass es solche Gespräche zwischen NPCs gibt (also nicht nur small talk). Weiß nicht, ob es das in Risen 3 schon gab - wurde von kaum einem ELEX-Kritiker gewürdigt, afair.

    Und, apropos, die Tagesabläufe der NPCs hatte ich komplett vergessen. Die haben ja eine Time enum, 10, 19, 23 z.B. für working, relaxing und sleeping (und guarding und was weiß ich).

    Da müsste ich meine vorherige Aussagen korrigieren, weil es sein kann, dass die auch ohne Jax Anwesenheit zu Bett gehen (was zu beweisen wäre).

    Ist auf jeden fall richtig gut gemacht, das es sich so lebendig anfühlt.
    yep.

    Appropos "vergessen", die wandernden Händler habe ich auch vergessen, die agieren auch out of ROI, Und Baxter, z.B. Kann mich noch erinnern, wie ich dessen Irrweg durch die Wüste auf der map verfolgt habe. (Da musste ich aber tricksen, irgendwas war da.)

    Und dann gibts da noch die player scripts, die "per frame" ablaufen - wollte ich mich schon vor nem Jahr mit beschäftigen - auch nicht zu gekommen, echte Schande, das.
    "in der Erkundung dieser weiten und wunderbaren Welt" (post #70, höre link unten)
    TAS for Elex 2 at ELEX II Nexus - Mods and Community (nexusmods.com)
    Tuvok, scannen Sie den Planeten nach Mikroplastik!
    "Hört mir bloß auf mit "Stormson".
    "In Toussaint wird schon für kleinere Schmähungen als diese Satisfaktion verlangt."
    Genug der "Blumensträuße". Ich WILL MadBob! Beugt die Realität!
    tombom81 is offline

  5. #5 Reply With Quote
    Kämpfer Nebbich's Avatar
    Join Date
    May 2007
    Posts
    312
    Quote Originally Posted by tombom81 View Post
    Wenn er in range ist. Bleib mal stehen und warte, Minuten, Stunden? Wenn du dann zu seinem Treffpunkt läufst (z.B. Caldrim und Orik), geht das Gespräch erst weiter, wenn du dazukommst (anders wärs ja auch sinnfrei).

    Das ist sowieso megageil, dass es solche Gespräche zwischen NPCs gibt (also nicht nur small talk). Weiß nicht, ob es das in Risen 3 schon gab - wurde von kaum einem ELEX-Kritiker gewürdigt, afair.
    Kann zu den Ausgangsfragen nichts sinnvolles beitragen - aber diese nicht auf Small talk beschränkten Dialoge zwischen NPCs waren in Risen 2 schon dabei und für manche Missionen entscheidend (meistens konnte man Quest-Lösungen natürlich auch anders rausfinden, wenn man den NPCs nicht zugehört hat). Schade nur, dass seitdem die sinnfreien Ambient-Plauderein fast oder ganz weg sind.
    Nebbich is offline

  6. #6 Reply With Quote
    Legende jabu's Avatar
    Join Date
    Jul 2011
    Posts
    7,866
    Was mir auf die Schnelle dazu eingefallen ist, aber nicht speziell an PB orientiert, sondern allgemeiner:

    Ein günstiges Vorgehen ist, das Culling (im weitesten Sinne) frühestmöglich (und möglichst, wo es effizient geschehen kann, z.B. wo sowieso auf die Daten zugegriffen wird) ansetzen zu lassen und dann jeweils, wo es für den Spielfortschritt im Verborgenden nötig ist, jeweils ein vereinfachtes Modell ablaufen zu lassen.

    Nur ein Beispiel vorweg:
    Wenn sowieso klar ist, dass bestimmte wichtige NPCs sich nicht planlos bekriegen sollen, dann müssen sie auch nicht ständig ihre Angriffsbereitschaft abchecken. Das müssen sie nur, wenn die Notwendigkeit des Vorgangs erwartbar ist, z.B. wenn deine Spielfigur der einzige sinnvolle Angreifer in Reichweite ist. Außerhalb dieser Zone, die einen Hauch größer als der Sichtbereich für NPCs ausfallen kann, würde das vereinfachte Modell greifen, wodurch z.B. bestimmte Trigger, inklusive Berechnung im Vorfeld, wegfallen.

    Bei wichtigen NPCs kann es sinnvoll sein, dass sie sich nicht so leicht provozieren lassen und Gefahren eher umgehen. Aber sobald du siehst, wie der NPC und ein Rudel Wölfe, sei es auch nur durch unglückliche Umstände, sich versehentlich annähern, müssen die schon aus Glaubwürdigkeitsgründen angemessen aufeinander reagieren, was z.B. einen Kampf auslösen kann. Es wäre ziemlich seltsam, wenn ein NPC einfach durch ein Rudel Wölfe hindurchmaschieren würde.

    Ein billiger und effektiver Trick kann darin bestehen, gefährliche Gegner, sobald sie für dich unsichtbar werden oder mit etwas Sicherheitsabstand dazu, auf ihre Startpositionen zurückzusetzen. Das ist zwar nicht gerade die reine Lehre von einer automatisch im Hintergrund weiterlaufenden Welt und kann manchmal enttarnt werden (vor allem bei schwerfälligen Monstern), verhindert aber einigermaßen sicher, dass du allzu oft Zeuge eines Abschnetzelns ganzer Monsterrudel durch einen eigentlich zu schwachen NPC werden musst, zumal du auch noch das Vergnügen haben willst. Du müsstest die Monster also erst wieder an den NPC heranlocken, damit er den (manchmal unglaubwürdigen) Kampf gegen sie aufnimmt.

    Wegen der in Grundposition versetzten Gegner sind die Triggerungen gar nicht nötig, was schon die komplette AI abschaltbar macht. Die Wegfindung liefe aus Glaubwürdigkeitsgründen weiter, aber ohne Animationen und mit einem Minimalmodell für Kollisionen, soweit überhaupt erforderlich. Der NPC würde dabei einfach von Waypoint zu Waypoint über den Boden schleifen oder ein wenig über diesem, falls die Engine den NPC sonst durch den Boden hindurchfallen ließe (falls Fallen inaktiv, eher ein Zuordnungsproblem) oder falls der NPC sonst stecken bleiben könnte oder bei sonstigen Problemen.

    Automatisch generierte oder sonstige feinere Höhenunterschiede unterliegen üblicherweise LODs, weswegen es für ein stabiles System sowieso immer möglich sein muss, den Boden für den NPC daran neuzujustieren, sobald die Detailstufe sich ändert. Das ist also schon da. Wenn man beim Design insofern trickst, dass diese feinen Höhenunterschiede für keine Entität zu keiner Zeit kritisch für Festhängen (z.B. unter einer Decke) werden, dann kann man sie bei Unsichtbarkeit der darauf wandelnden Entität ignorieren.

    Kurz vor Eintreten in deinen Sichtbereich aktivierst du für die mobile Entität (NPC, Monster o.ä.) wieder alles, was du brauchst und setzt sie auf die dann wieder genau kalkulierte Bodenhöhe auf. Unter Umständen, z.B. je nach Engine und Physikmodell, kann es passieren, dass dieses Ausrichten auf Bodenhöhe nicht an geeigneter Stelle vorgesehen ist, sodass die Entität aus geringer Höhe fallen muss (Vorsicht, Deckenhöhe darf nicht zu Problemen führen), wenn keine tiefgreifenden Veränderungen an der Engine erwünscht sind.

    Für Fälle, wo es felsenfeste Sicherheiten geben muss, beamst du den NPC entweder direkt ins Ziel, oder du beamst ihn, wenn er nicht nach einer großzügig bemessen Zeit im Ziel angekommen ist (egal, warum), dorthin (aber nicht vor deine Nase, falls deine Spielfigur sich am Zielort befindet), was glaubwürdiger ist. Solange der NPC nicht "verunfallt", wäre er unterwegs schön beobachtbar. Das Beamen kann jeweils verzögert werden, bis du den NPC nicht mehr siehst, also als Bedingung: Trigger für das Beamen gesetzt UND aus dem Sichtbarkeitsradius heraus.

    Sollte der NPC während seiner Sichtbarkeitsphasen in endlose Kämpfe verstrickt sein, so müsstest du ihn befreien oder kurz den Sichtbereich verlassen, damit der Timer greift. Innerhalb eines geschlossenen Bereiches, den du nicht verlassen kannst, bevor sich die Situation auflöst, könnte das problematisch werden. Aber dann könnte man sich fragen, ob diese Unauflösbarkeit das eigentliche Problem ist, da die Situation als solche erst mal, für sich genommen, ihre eigene Plausibilität hat, also nicht dieser speziellen Reise des NPCs bedarf. Oder du gehst für diesen seltenen Fall ganz sicher, indem du den Timer durchsetzt. Etwas subtiler und gediegener wäre ein gestärkter NPC, der sich befreien kann oder einfach wegläuft.

    Fehler, Ungenauigkeiten, Unvollständigkeiten, Verbesserungspotential usw. vorbehalten.
    jabu is offline Last edited by jabu; 22.05.2021 at 10:05.

  7. #7 Reply With Quote
    World of Elex  Dark_Bauer's Avatar
    Join Date
    Jun 2013
    Posts
    10,255
    Quote Originally Posted by Rizzlord View Post
    Stimmt wohl, aber mir ist zb. aufgefallen, das wenn man in Elex xy anspricht er sagt er geht zu yx und man ihm folgt, er auch genau dies tut. Das muss ja heißen, dass wenn er in range ist die ai genau das macht was er sagt. Aber wenn man nicht in range ist werden die interaktionen direkt abgeschlossen nach einer weile? Immerhin kannst du diesen xy auch aus range laufen lassen, und dann doch hinterher und er tut was er gesagt hat. Klingt für mich doch ziemlich komplex. Oder es ist so etwas wie ein followtimer drin der dann checkt ob der spieler in den letzten 5min oder so in range war. Und wenn nicht er dann das event abschließt? Ist auf jeden fall richtig gut gemacht, das es sich so lebendig anfühlt.
    Da ich selber gerade mit der Unreal Engine ein Spiel entwickle, habe ich mir darüber natürlich auch Gedanken gemacht.
    Ich habe etwa einen NPC, der sagt, er würde in der Nacht alle Schafe schlachten, weil er dem Bauern eins auswichen will.
    Mal grob angerissen.

    Nun wie soll ich es machen?
    Meine Idee ist, dass, wenn ich in der Nähe bin, der NPC genau das ausführt, was er androht.

    Wenn ich aber nicht in der Nähe bin und am nächsten Tag wieder komme, dann ist eben alles erledigt, ohne dass der NPC das wirklich hat machen müssen (weil sie bei mir inaktiv/nicht geladen sind, wenn ich nicht in der Nähe bin).

    Meine NPCs sind in Gebiete eingeteilt. Etwa in Orte.
    Wenn ich in die Nähe eines Dorfes komme, werden die NPC dort erst geladen.
    Und entsprechend „entladen“, wenn ich es verlasse.
    Es gibt aber auch einige, die nicht an sowas gebunden sind.
    Wenn ein NPC durch die Welt wandern soll, ist er auch dem obersten Layer zugeordnet, der Welt.
    So kann er auch Dinge ausführen, ohne dass ich in der Nähe bin (das ist wichtig für einige NPC).

    Edit:
    Ich glaube, das ist eher ein thread für das OT-Forum
    https://worldofelex.de/site/newsarchiv/61-artikel-de/826-elex-ii-review
    Dark_Bauer is offline Last edited by Dark_Bauer; 23.05.2021 at 23:19.

  8. #8 Reply With Quote
    Neuling
    Join Date
    May 2021
    Posts
    3
    Quote Originally Posted by Dark_Bauer View Post
    Da ich selber gerade mit der Unreal Engine ein Spiel entwickle, habe ich mir darüber natürlich auch Gedanken gemacht.
    Ich habe etwa einen NPC, der sagt, er würde in der Nacht alle Schafe schlachten, weil er dem Bauern eins auswichen will.
    Mal grob angerissen.

    Nun wie soll ich es machen?
    Meine Idee ist, dass, wenn ich in der Nähe bin, der NPC genau das ausführt, was er androht.

    Wenn ich aber nicht in der Nähe bin und am nächsten Tag wieder komme, dann ist eben alles erledigt, ohne dass der NPC das wirklich hat machen müssen (weil sie bei mir inaktiv/nicht geladen sind, wenn ich nicht in der Nähe bin).

    Meine NPCs sind in Gebiete eingeteilt. Etwa in Orte.
    Wenn ich in die Nähe eines Dorfes komme, werden die NPC dort erst geladen.
    Und entsprechend „entladen“, wenn ich es verlasse.
    Es gibt aber auch einige, die nicht an sowas gebunden sind.
    Wenn ein NPC durch die Welt wandern soll, ist er auch dem obersten Layer zugeordnet, der Welt.
    So kann er auch Dinge ausführen, ohne dass ich in der Nähe bin (das ist wichtig für einige NPC).

    Edit:
    Ich glaube, das ist eher ein thread für das OT-Forum

    Hey, danke für die genauen Antworten, das System welches du beschreibst, machst du via World Composure?
    Wäre halt echt gut sich mal mit anderen Dev's auszutauschen, ich hab mitlerweile echt viel in meinem Spiel an Systemen drin, aber das nächste Projekt wird wirklich groß. Naja ich werd einfach weiter machen und mich durch die Tipps graben die ich hier bekommen hab, wäre nur noch gut zu wissen wie du Actor selbst cullst, das hat bei mir irgendwie noch nicht so gut funktioniert.

    vielen lieben Dank nochmal an Alle. Es ist wirklich schwer allein so eine große Sache auf die Beine zu stellen, aber immerhin hab ich Zeit =)
    Rizzlord is offline

  9. #9 Reply With Quote
    Legende jabu's Avatar
    Join Date
    Jul 2011
    Posts
    7,866
    Dann hätten wir jetzt also geklärt, dass du einigermaßen wahrscheinlich ebenfalls (wie Dark_Bauer) Unreal benutzt. Das wurde vorher nämlich nicht erwähnt.

    Das zu wissen, ist insofern wichtig, dass wir jetzt davon ausgehen können, dass bestimmte Probleme bereits gelöst sind, z.B. Unterstützung für Finite State Machines oder Behavior Trees (eine Weiterentwicklung von FSMs). Bei Eigenbauten ist das nicht unbedingt vorauszusetzen, sodass das erst geklärt werden müsste.

    Speziell zu Unreal kann ich leider nicht viel beitragen, da meine Erfahrungen damit zu gering sind. Allgemein, auch zu Eigenimplementierungen von Engines und deren Effizienz, könnte ich schon eher etwas beitragen.

    Falls der Flaschenhals wirklich bei der "AI" liegen sollte:
    Eventuell ein Komplexitätsproblem? Quadratische Komplexität? Und die dann irgendwo, wo es eigentlich unnötig ist, zur Geltung kommend? Unnötige Kommunikation zwischen Entitäten? Ellenlange Spezialskripte? Oder ein Timing-Problem (s.u.)?

    Erst einmal würde ich versuchen, ein unter allen umständen stabiles System aufzustellen:
    NPC als (evtl. erweiterte) FSM mit sinnvollen Defaults. Spezialskripte kämen erst hinzu, wo wirklich nötig, zum Überschreiben von Default-Verhalten.

    Ich würde also noch nicht versuchen, ein richtiges Game daraus zu machen, sondern erst mal solche Grundelemente und ein Grundgerüst aufstellen. Das sollte dann möglichst fehlerfrei und performant laufen. 30 NPCs sollten eigentlich nicht per AI zur Bremse werden (per Rendering ist etwas anderes).

    Eventuell erfolgen manche Berechnungen zu fein oder zu genaue Checks. Falls du das noch nicht hast, könntest du mal gucken, ob für die Praxis zu viel des Guten in der Standardkonfiguration, z.B. eines Actors oder in sonstigen Elementen, steckt. Vielleicht wird die Physik zu präzise berechnet (um zeigen zu können, wie gut die Engine ist). Vielleicht werden zu viele Events abgefeuert, z.B. bei jedem Schritt. Außerhalb des Sichtbereiches ist das sicher zu viel des Guten, aber vielleicht ist auch allgemein die Qualität zu sehr über die Performance gestellt.

    Eventuell könntest du ein Timing-Problem haben:

    Wenn die AI allgemein mit einer hohen Frequenz läuft und in jedem AI-Frame alles berechnet wird, dann drückt das natürlich die FPS relativ weit herunter. Bei Systemen, die je System-Tick alle Skript-Handler durchrattern lassen, ist das ein Problem. Game-AI braucht so feine Aktualisierungen normalerweise nicht. Diese hohen Frequenzen werden gerne genommen, um Physik-Inkremente möglichst klein zu halten (hat u.a. mit Kollisionen zu tun, bei separaten Render- und Physik-Frames evtl. auch mit Minderung von Wartezeiten bei der Synchronisierung).

    Manchmal hilft es schon, die Physik-Frequenz herabzusetzen, allerdings nur so weit, dass die Kollisionen einwandfrei detektiert werden, nichts ruckelt und sich kein breiiges Gefühl einstellt.

    Vermutlich genügt das noch nicht. Dann würde ich, falls du das noch nicht hast, mal gucken, ob sich die AI ggf. durch Timer-Events oder sonstige Events, evtl. zusammen mit Callbacks, steuern lässt, anstatt sie mit jedem feinen Tick durchrattern zu lassen. AI braucht keine hohe Aktualisierungsfrequenz. Sie würde, bis auf wenige Punkte vielleicht, auch tickless funktionieren. Ob Tickless bei FSMs unterstützt wird, weiß ich nicht, sonst mal bei Behavior Trees umsehen oder mal gucken, wie das sonst geht.

    Irgendwelche Ticks liegen normalerweise auch bei einem (eher simulierten) Tickless-Modus darunter, sodass sich, auch wenn der Name das nicht erwarten lässt, eine zeitliche Rasterung daran ergeben sollte. Aber der Ausführungszeitpunkt wäre in dem Fall immerhin ein variables Vielfaches davon, worauf es hier ankäme und was für die Genauigkeit genügen muss (die Rasterung hätte man sonst auch, ist also nichts Neues).
    jabu is offline Last edited by jabu; 24.05.2021 at 06:35.

  10. #10 Reply With Quote
    World of Elex  Dark_Bauer's Avatar
    Join Date
    Jun 2013
    Posts
    10,255
    Quote Originally Posted by Rizzlord View Post
    Hey, danke für die genauen Antworten, das System welches du beschreibst, machst du via World Composure?
    Wäre halt echt gut sich mal mit anderen Dev's auszutauschen, ich hab mitlerweile echt viel in meinem Spiel an Systemen drin, aber das nächste Projekt wird wirklich groß. Naja ich werd einfach weiter machen und mich durch die Tipps graben die ich hier bekommen hab, wäre nur noch gut zu wissen wie du Actor selbst cullst, das hat bei mir irgendwie noch nicht so gut funktioniert.

    vielen lieben Dank nochmal an Alle. Es ist wirklich schwer allein so eine große Sache auf die Beine zu stellen, aber immerhin hab ich Zeit =)
    Ich benutze Levelstreaming.
    Das heißt, ich habe die Welt in Zonen eingeteilt, deren Inhalt erst geladen wird, wenn ich diese auch betrete.
    So kann ich kleine Vegetation (Farne, Gras, Büsche,...) oder Objekte (Steine, Fässer, Bänke...) ausblenden, wenn ich sie sowieso aufgrund der Entfernung nicht sehen würde.
    Große Vegetation (Bäume, größere Büsche,...) und große Objekte (Häuser, Mauern, Felsen,...), die ich aus der Ferne sehen soll, stehen oberhalb dieser Zonen und sind permanent geladen (mit ihren LOD Levels sparen sie Performance und Qualität).
    Die meisten NPCs werden auch in den Zonen geladen.
    Hier habe ich nur ein Riesen Problem, welches ich bisher nicht lösen konnte:
    Verfolgt mich ein NPC aus einer Zone heraus, wird er gelöscht. Gehe in die Zone rein, ist dieser NPC wieder an seinem Startpunkt und führt seine Aktion aus, die er ausführen soll (Tagesablauf).
    So geht es mit allen NPCs, da sie alle gelöscht werden, wenn ich die Zone verlasse.

    Bisher kein Problem beim Spielen.
    Die NPCs, denen ich etwa über die Welt folgen soll, oder die Story/Questbedingt sich nicht nur in ihrer Zone aufhalten sollen, sind auch keiner Zone zugeordnet und sind permanent geladen.

    Aber alle anderen NPCs halt nicht.
    Da muss ich mir noch ein anderes System überlegen. Vielleicht wirklich das Culling aber da muss ich mich erst einlesen.

    Arbeite selber seit erst einem Jahr am Spiel ohne irgendwelche Vorkenntnisse außer dem RPG-Maker

    Hier zeig ich dir mal meinen Fortschritt:
    Quote Originally Posted by Dark_Bauer View Post
    Heute vor genau einem Jahr habe ich mit dem Projekt begonnen.
    Und mittlerweile sieht es wirklich nach etwas aus.
    leider kann ich euch noch immer nicht mehr als nur Videos und Bilder zeigen aber es wird runder und runder.

    [Video]
    [in dem thread, aus dem das Zitat kommt, gibts noch viel mehr Infos zu meinem Spiel]


    Edit:
    Ich habe aber die Erfahrung gemacht, dass Actors/NPCs/AI gar nicht so sehr auf die Performance gehen.
    Das war bei mir viel eher die Vegetation, weswegen ich letztendlich das Level-Streaming eingebaut habe.
    Wenn du die Unreal Engine benutzt und Blueprints, dann rate ich dir, nicht EventTick (das passt zu jabus Beschreibung „mit jedem AI-Frame alles berechnen“ passen) zu verwenden. DAS nämlich drückt auf Dauer die Performance. Als ich das noch in jedem Actor nutze, hat es auch geruckelt wie der gyrger aber mir ist eine Alternative eingefallen, die viel besser funktioniert und seitdem läuft es wieder flüssig.


    Edit 2:
    Ich verwende übrigens Behavior Trees, wie sie die UE4 bietet, nur für mein Dialog- und Questsystem. Gar nicht für die AI
    https://worldofelex.de/site/newsarchiv/61-artikel-de/826-elex-ii-review
    Dark_Bauer is offline Last edited by Dark_Bauer; 24.05.2021 at 09:05.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •