Sie sind nicht angemeldet.

1

Samstag, 25. November 2017, 15:39

Optimierung einer großen FM

Tutorial: Optimierung einer großen FM
zwecks besserer Performance
Immer wieder sind (vor allem) unter NewDark erhebliche Probleme mit der Performance zu verzeichnen. Das liegt im wesentlichen daran, dass unter NewDark vieles möglich ist, das ziemlich viele Ressourcen verbraucht.
Nun ein kleiner Führer, wie man seine FM von Anfang an optimieren kann. Und auch eine kleine Anleitung für Spieler, wie sie möglichst viel herausholen können.

Für Spieler und Dromeder.
Bearbeite die cam_ext.cfg mit einem Editor. Folgende Einträge bearbeiten
-Deaktiviere multisampling "multisampletype 8".
-Deaktiviere "d3d_disp_enable_hdr"
-Deaktiviere Bloom "postprocessing"
-Deaktiviere "d3d_disp_sw_cc"
-Deaktiviere "d3d_disp_enable_distortionfx"
-Aktiviere "d3d_disp_no_rgb10_buf"
-Aktiviere set "use_d3d_display".

Deaktivieren heißt: setze ein „;“ vor die jeweilige Zeile, aktivieren meint: lösche „;“. Speichern nicht vergessen.

FM Bau von Anfang an optimiert
Wenn man an einer großen Map arbeitet, wird man irgendwann zu dem Punkt kommen, an dem man sich Gedanken machen muß, wie wohl die Spieler damit zurechtkommen. FM-Bauer bekommen manchmal nicht mehr so richtig mit, dass die Performance nach und nach nachlässt, weil sie sich daran gewöhnen. Ab und zu muß man das überprüfen. In DromEd gibt es ein Tool (show_stats), das übrigens auch in der Konsole so funktionert. „show_stats“ zeigt unter anderem die Frames per Second (FPS) an. Faustregel: Wenn die FPS jemals an einer Stelle unter 25 fällt, haben die Spieler Grund zum Meckern, weil das Spiel nicht mehr flüssig genug läuft.

Einige Punkte, die man gleich am Anfang der FM-Bauerei beachten sollte
-Die Airbrushes sollten nicht zu groß sein 100x100, maximal 200x200 sein. Besser mehrere kleine nebeneinander.Ich komme später darauf zurück.
-Von Anfang an Texturen im dds-Format mit Mipmaps verwenden. Sowohl für Terrain-Brushes, als auch für Objekttexturen. Die Texturen nicht zu groß wählen. Mehr als 512 ist nicht nötig, es sei denn es sind Terrain-Texturen für große Flächen. Mipmaps werden den Speicherverbrauch minimieren und für bessere Performance sorgen.
-Von Anfang an überlegen, ob man nicht LODs (Level of Detail) auf Objekten verwenden kann.
Das wird die Performance extrem verbessern. Man kann LODs in der Objekt-Hierarchie schreiben. Sie bleiben auch auf Objekten, wenn man sie kopiert.
-Durch einen Zufall bin ich auf einen weiteren Trick gestossen, der mit den Eigenschaften von Blockable Brushes zusammenhängt. Türen haben diese Blockable-Eigenschaft, man sieht es an den schwarzen Flächen, die dafür sorgen sollen, dass AIs im Spiel nicht durch Türen sehen können. Der Spieler kann es auch nicht. Denn das führt dazu, dass die Objekt-Polys dahinter nicht mehr sichbar sind. Natürlich kann man nicht überall Türen machen, wo man sie nicht haben will.
Aber man kann da tricksen. Und zwar mit Hilfe des tnhscripts „TrigProximity“. Es geht so: erst tnhscripts laden. Man erstellt an einer Stelle in der Map, die man nicht einsehen kann, aber deren Hintergrund man blocken will, eine riesige Tür, z. B. 300x2x60, je nachdem, wie es passtl. Dimensions anpassen. Die Tür wird auf „Translating“ gestellt, Speed etwa 100, so dass sie sofort etwa 200 DU im Boden versinkt und wird mindestens 1-2 DU über dem Terrain platziert (sonst gibt’s unschöne Effekte). Die Tür wird von einem Up/down Switch per ControlDevice angefunkt, den man direkt davor platziert. Script auf dem Schalter: TrigProximity. Design Note: proximity =300. Der Radius kann angepasst werden. Nun Optimize. Diese Maßnahme wird locker mehrere hunderte WR-Cells verbraten, aber es wird sich lohnen.

Geht man nun weit entfernt in den Game-Mode, wird der Blockable-Brush dieser „Tür“ dafür sorgen, dass die Anzahl der Backface-Checks (sichtbare Objekt-Polys) ganz erheblich sinkt. Die FPS wird dafür umso mehr verbessert werden, bis zu 20 in manchen Maps, was eine halbe Welt bedeutet. Kommt man der Stelle mit der Tür/dem Schalter näher, geht die Tür nach unten. Geht man wieder weg, geht die Tür automatisch nach oben. Nur sollte der Spieler von all dem nichts mitbekommen. Dafür muß man sorgen, indem man Größe, Ort und Radius richtig wählt.

-Ein weiterer Punkt: Spare an WR Cells. Jede WR-Cell braucht Ressourcen. Man kann das wunderbar, indem man mit den Time-Werten spielt. Deshalb sind kleinere Airbrushes auch viel besser, weil sie sich zum „sparen“ eignen.
Nehmen wir an, eine Map hat 25000 WR-Cells. Nur mit den Time-Werten kann sicherlich 2000-3000 einsparen.

Was man auf keinen Fall tun sollte
-Ganz verboten sind (große) Texturen des Formats png und tga. Insbesondere auf SFX-Effekten und Coronas. Das sind wahre Performance-Killer. Auch schlecht sind Objekte mit eingeschaltetem Tweq-Models. Zum einen kann man keine LODs auf solche Objekte legen, zum anderen brauchen sie von Haus aus viele Ressourcen. Z. B. Fackeln haben sowas. Fackeln kann man auch mit nur einem Objekt machen oder zumindest so verstecken, dass sie nicht weithin sichtbar sind.
-Viele sichtbare Dodecahedrons auf einem Haufen sollte man vermeiden. Die haben zuweilen den kuriosen Effekt, dass die FPS hoch bleibt, das Spiel dennoch ruckelt.

Wenn das Kind schon in den Brunnen gefallen ist, kann man immer noch etwas verbessern
-LODs verwenden (meist viel Arbeit)
-dds/Mipmaps, möglichst klein (eher wenig Arbeit, wenn man einen Batch-Konverter verwendet)
-Türen/TrigProximity-Tricks wie oben beschrieben (ganz wenig Arbeit). Nachteil: verbraucht hunderte WR-Cells und verhunzt womöglich das Licht an der Stelle.
-WR-Cells und Objekt-Polys sparen (viel Arbeit)

Addendum
-dds mit mipmaps kann man mit einer Vielzahl von Programmen erzeugen, z. B. Paint.net, Photoshop oderGimp mit dds-Plugin, usw. Es gibt sogar Batch-Konverter von Nvidia und AMD und einige andere. Damit geht’s sehr schnell.
-LODs in DromEd: Add—Shape--Model LOD

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »fibanocci« (25. November 2017, 16:13)


Wohnort: Coburg

Beruf: Maurer

  • Nachricht senden

2

Sonntag, 26. November 2017, 18:24

Danke für die Mühe das hier alles aufzuschreiben, einige Wege kannte ich noch garnicht z.b das mit der Tür, es ist immer wieder gut etwas neues dazuzulernen. Das sollte man sich aufjedenfall immer vor Auge halten sonst passiert so ein Mist wie bei mir mit Herz der Edelsteine. :rolleyes:
Großen Dank Fibanocci für das Tutorial. :)

3

Montag, 27. November 2017, 10:38

Das ist eine sehr gute Idee mit diesem Leitfaden. Dieser ist auch sehr gut erklärt und man kann dem auch gut folgen - zumindest ich. Auch von mir vielen Dank. :thumbsup:

4

Samstag, 2. Dezember 2017, 14:18

In meiner großen Map stehe ich vor einem Rätsel.
Im DromEd game mode habe ich immer ausreichend FPS, durch die Thief2.exe getestet, sind es bis zu 15 FPS weniger. An denselben Stellen im selben Winkel. Die Bedingungen sind gleich.
Die Ressourcen sind diesselben, die Einstellungen (cam_ext.cfg) auch. Die Auflösung ebenso. Verringere ich die Auflösung, bleibt auch alles gleich. Verringere ich die Sichtweite ebenso.
Ich habe keine Ahnung, woran es liegen könnte. Die Map ist nach Kräften optimiert (LODs, Mipmaps, usw.).

5

Sonntag, 3. Dezember 2017, 10:31

Normalerweise kenne ich das von früher noch im umgekehrten Falle. Vielleicht ist ja irgendwas in der Thief2.exe nicht optimiert, wer weiß?

6

Sonntag, 3. Dezember 2017, 17:05

Hat vielleicht eines der beiden Programme das LAA-Flag gesetzt und das andere nicht?

7

Sonntag, 3. Dezember 2017, 17:47

Beide haben LAA gepatcht (ich habs auch ohne probiert). Dasselbe Ergebnis. Die FM braucht eigentlich kein LAA, weniger als 600 MB RAM-Verbrauch. Der fluktuiert allerdings zuweilen stark. Das muß ich nochmal testen.

Wohnort: Na da, wo es Hammeriten gibt! :P

  • Nachricht senden

8

Montag, 4. Dezember 2017, 23:34

Vielen Dank für die Arbeit, diese Liste zusammenzustellen, fibanocci. :)
Newdark ist definitiv mächtig, löst aber leider nicht alle Probleme.


-Ein weiterer Punkt: Spare an WR Cells. Jede WR-Cell braucht Ressourcen. Man kann das wunderbar, indem man mit den Time-Werten spielt. Deshalb sind kleinere Airbrushes auch viel besser, weil sie sich zum „sparen“ eignen.
Nehmen wir an, eine Map hat 25000 WR-Cells. Nur mit den Time-Werten kann sicherlich 2000-3000 einsparen.
Was mir beim Arbeiten mit Dromed 1 in Newdark aufgefallen ist, dass diese WR-Cells so mit Abstand der größte Feind werden, wenn man eine größere FM plant. Ich habe mir beispielsweise mal die neuste FM von Intruder angesehen, "Rückkehr zur Verlorenen Stadt". Die ist am absoluten Limit, was diese WR-Cells angeht. Ist zwar recht groß, hat aber auch viele Dodekaeder und sonstige Brushes ineinander gebaut, um die Höhlen weniger eckig rüberkommen zu lassen. Wäre es eine Stadt Mission in der selben Größe gewesen, hätte man sicherlich schon einige WR-Cells gespart, denke ich mir.

Ich habe auch schon in meinen FMs angefangen, die Air-Brushes in kleinere Bereiche aufzuteilen und mit dem Time Werten ein bisschen rumzuspielen (Air-Brushes haben einen niedrigen Wert als die soliden Brushes darin zum Beispiel) aber ich weiß nicht, ob ich es richtig angehe.
Wenn du noch ein paar Tipps hast, wie sich WR-Cells einsparen lassen, wäre das sehr Hilfreich und könnte die Liste erweitern. Soweit ich weiß, hast du auch für Christines Stadt-Mission ordentliche Optimierungsarbeit bezüglich der WR-Cells geleistet. ^^
Denn so viele bauen heute ohne Achtung vor dem großen Erbauer.

Die Stadt trägt sein Zeichen nicht mehr

und ewig sucht der Makel des Schwindlers sich Zutritt zu verschaffen.

9

Sonntag, 10. Dezember 2017, 21:19

Dankeschön :thumbup:

Tja, mit der Liste hätte ich mir viel Ärger erspart... ;)

Das verführerische an NewDark ist, daß auf einmal soviel möglich ist. Leider macht das dann die gute alte Darkengine dann doch nicht mit. Man merkt es erst, wenn's zu spät ist und dann verwendet man viel, viel Zeit für die Schadensbegrenzung...

Ähnliche Themen