Mein Spiel ruckelt :(

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Mein Spiel ruckelt :(

Beitrag von Jonathan »

Ja, ok, so schlimm ist es nicht.
Aber ich hab die letzten Jahre primär auf meinem Desktop entwickelt, und der hat halt ganz ok'e Hardware. Jetzt wollte ich von Unterwegs mit dem Laptop was daran machen (GTX 860M, i5-4210H) und es startet zwar, läuft aber recht zäh. Ältere kommerzielle Spiele mit 'vergleichbarer' Grafik laufen deutlich besser als mein eigenes, aber ok ich habe auch eher neue Features eingebaut als alte zu optimiere deshalb war das irgendwie zu erwarten. Trotzdem unschön.

Mein erster Test war es, beim Laden alle Texturen zu verkleinern. Das kann man schnell einbauen und schnell messen, aber offensichtlich war das nicht der größte Bottleneck, es wurde kaum schneller. Was sollte ich also als nächstes probieren?
Soweit ich weiß, ist ja das erste Problem, dass GPU und CPU parallel arbeiten, Draw-Calls blockieren also nicht, erst am Ende des Frames muss alles synchron sein, d.h. mit "Szene hundertmal rendern und Zeiten mitteln" kann ich recht präzise Zeiten für einen ganzen Frame berechnen, aber was jetzt innerhalb eines Frames wie lange dauert ist erstmal etwas schwieriger zu bestimmen. Das macht klassische Profiler, die die Zeiten von Funktionsaufrufen messen, schwieriger anzuwenden. Nun zu meinen Überlegungen, was ich prinzipiell angehen sollte:

- Hoher Speicherverbrauch / Bandbreitenlimitiert: Alle Texturen verkleinern und vergleichen.
- Alle Meshes durch niedrigere LOD Stufen ersetzen und gucken ob der Triangelcount das Problem ist
- Shader durch simplerer Versionen (ggf. Phong Shading + Colormap) ersetzen um zu gucken ob komplexe Materialien das Problem sind
- Zu viele kleine Draw-Calls, zu viele State-Changes. Engine komplett umschreiben und gucken ob es das schneller macht.
- Irgendwas cleveres mit nSight machen um Insights zu bekommen?

Mein Problem ist so ein bisschen, dass ich mir nicht sicher bin, wie sehr ich will, dass alles noch auf meinem Jahrealten Laptop läuft. Einerseits wäre das schon sehr nett und irgendwie eine gute Art, Mindestanforderungen zu definieren. Andererseits will ich aber jetzt auch echt irgendwie nicht ein halbes Jahr lang nur das Rendern optimieren, bis es dann irgendwie gut genug ist.
Für Mesh-LODs hab ich grad keinen Code, alle Objekte auf simplere Materialien umstellen wäre aber innerhalb eines Tages machbar. Ich befürchte aber, dass ich eher zu schlechte Draw-Calls mit zu vielen State-Changes habe, bloß würde das halt wirklich viel Umstellung bedeuten und man müsste einige Tage werkeln bis man überhaupt weiß, ob es was gebracht hat. Meh. Deshalb meine Frage: Habt ihr irgendwelche cleveren Ideen, was ich unbedingt als erstes ausprobieren sollte?
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
bruebaker
Establishment
Beiträge: 428
Registriert: 08.12.2015, 10:42
Benutzertext: Sven Rahn
Echter Name: Sven Rahn

Re: Mein Spiel ruckelt :(

Beitrag von bruebaker »

Hey,
Weist du denn das es am rendering liegt? Hatte bei meinem spiel auch massiv probleme mit der Performance. Lag aber eher an der spiel logik. Zum Beispiel habe ich viele sachen pro frame berechnet/ durchgeführt die sich pro frame gar nicht verändern. Solche sachen zu optimieren hatt bei mir schon viel gebracht und ich konnte es relativ leicht ändern.
Matthias Gubisch
Establishment
Beiträge: 470
Registriert: 01.03.2009, 19:09

Re: Mein Spiel ruckelt :(

Beitrag von Matthias Gubisch »

Also ich würd mir tatsächlich als erstes mal Nsight schnappen und schauen was limitiert.
GPU, CPU oder doch Bandbreite (wenn ja wo genau) und danach kann man schauen was man als erstes optimiert.
Ich hab den Link grad nicht zur Hand aber von NVIDIA gibt es einen ganz guten Artikel welche Nsight Metriken auf welches Problem hindeuten.
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: Mein Spiel ruckelt :(

Beitrag von marcgfx »

Bei Cyberlympics/Devader hatte ich auch Ruckler, lag daran dass die Framerate nicht konstant war und mein Framerate-unabhängiger Code Fehler hatte.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Mein Spiel ruckelt :(

Beitrag von Schrompf »

PIX, glaube ich, hatte nen Quick-Benchmark, wo es mal Dinge durchprobiert hat:
a) Fenstergröße auf Mini - Fillrate / Shading
b) Projektionsmatrix ein +1 auf Z machen lassen - Triangle Setup / Rasterization
c) VertexShader durch ein "output( 0, 0, 0, 0)" ersetzen - Vertex Shading

Aber das sind eigentlich nur sinnlose kleine Helferlein. Wenn Du NSight zum Laufen kriegst, kriegst Du das alles im ersten analysierten Frame aufm Silbertablett. Da habe ich damals z.B. gelernt, dass Instancing einen heftigen Overhead im Input Assembly verursacht hat. Ich habe Quads instanced, zugegeben, extremer geht's kaum, aber die Input Assembly hatte daraufhin 3/4tel der gesamten Rechenzeit verbraucht, und die haben sich in ne magische Glitzerwolke aufgelöst, als ich das Instancing einfach in nen Buffer ausgerendert hab. Hunderte MB an Vertexdaten linear rausballern war dreimal schneller.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Mein Spiel ruckelt :(

Beitrag von Schrompf »

Addendum: bei Mobile GPUs würde ich immer auf den Fragment Shader und darin das Shadow Mapping tippen. Ist aber nur Bauchgefühl, NSight wird es Dir genauer sagen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Mein Spiel ruckelt :(

Beitrag von Jonathan »

Ja ok, ich werde mal versuchen ob ich nSight auf meinem alten Laptop installiert bekomme. Mal schauen was ich damit so rausfinden werde.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten