Archiv verlassen und diese Seite im Standarddesign anzeigen : An alle wirklichen Grafik-Spezialisten!!!
EKTENIE
2002-04-03, 12:40:31
Moin!
Ich jage schon seit Ewigkeiten der Antwort auf einer meiner Fragen hinterher. Dazu eine kleine Einführung:
Mir ist schon bei gradezu jedem 3D-Spiel eine bestimmte Macke aufgefallen die das 3D-Feeling meiner Meinung extrem einschränkt. Z.B. bei IL2 Sturmovik: fleigt man knapp über dem Boden, merkt man ein zuckeln des Bodens trotz hohe FPS (in meinem Fall 40-60FPS)und aktivierten V-Sync. Oder noch ein Beispiel: Bei NASCAR 2002 zuckeln die Autos die an einem vorbeiheizen auch wieder troz hohen FPS und V-Sync. Und noch ein Besispiel: MechWarrior 4: Dreht man seinen Tousor suckelt die Umgebung. Wieder hohe FPS und V-Sync!
Ich könnte noch vieles mehr aufzählen aber ich denke ihr habt es gerafft. Es ist bei jedem Spiel, wo sich etwas sehr schnell bewegt. Es sieht fast so aus, als ob der Bildschirm nicht nach kommt, die vielen FPS in der richtigen Geschwindigkeit darzustellen. So, als ob die Hz-Freqenz des Bildschirms langsamer als die wirklichen FPS sind.
Dummerwise fällt mir das immer stärker auf, je mehr ich mich rein denke, und an NASCAR 2002 hab ich schon garkeine Freude mehr, eben wegen diesem Zuckeln.
Die D3D und OGL-Leute müssen doch ne Lösung dafür haben! NUR WO???? Bitte helft mir!!!
Vielen Dank für Antwort!
MAP EKTENIE
Da gibt's nur 2 Möglichkeiten. Entweder noch mehr FPS oder motion blur. Aber ich wette jetzt sagt gleich wieder jemand, dass 24fps absolut ausreichend sind...
EKTENIE
2002-04-03, 13:24:36
Was ist Motion Blur? Und 60 FPS sollten doch reichen oder???
Selbst mit 150FPS is das Problem noch!
MAP EKTENIE
Motion Blur ist Bewegungsunschärfe. Was hast du bei deinem Monitor für eine Bildwiederholrate?
EKTENIE
2002-04-03, 13:51:26
Witzhafte 75hz
Schonmal an die Festplatte gedacht? Vielleicht muss der auch andauernd Daten nachschieben und kommt deshalb nicht klar...?
EKTENIE
2002-04-03, 14:03:05
Neeee! Daran liegts auf Garantie nicht! Hab ne 0% fragmentierte WD 7200rpm 2MB Cache! (3000MB noch frei)
Ich wette, das Problem hast Du auch, Dir fällt es nur nicht auf! Sei froh und versuch nicht das Prob zu finden, sonst macht es dich krank! Hatte es ja auch nicht bemerkt, aber sobald man sich darauf konzentriert, fängts an zu nerven und man konzentriert sich REFLEXMÄßIG darauf! arrrrg
MAP EKTENIE
Ich denke, das hier beschriebene Problem entsteht durch mangelhafte Animation der 3D Modelle.
Es gibt einfach zu wenige Zwischenstufen beim Bewegen eines Modells von seine Anfangslage in die Endposition.
Da kann man nichts daran machen, das hat auch nichts mit OGL oder D3D zu tun. Sondern nur mit der jeweiligen Game-Engine.
Kann mich aber auch irren.:)
75Hz sind auch ganz schön wenig. Wenn du dabei 40-60FPS hast wird immer wieder ein Frame 2 mal hintereinander auf dem Monitor dargestellt, auch mit vsync. Dadurch wird der Zeitabstand zwischen den Frames unregelmäßig und immer dann, wenn ein Frame 2 mal dargestellt wird bleibt es immerhin 1/37,5 Sekunde zu sehen.
Wenn du knapp über 75FPS hättest würde das nicht mehr passieren. Dann hättest du mit vsync regelmäßig 75 mal pro Sekunde in gleichmäßigen Zeitabständen ein neues Bild.
EKTENIE
2002-04-03, 14:10:28
klingt interessant! Was ist eigendlich, wenn man die menge zuvor gerenderten Bilder bei V-Sync selbst bestimmt? Ist doch möglich. ZZ hab ichs auf 3 Bilder
MAP EKTENIE
Originally posted by Tomp
Wenn du knapp über 75FPS hättest würde das nicht mehr passieren. Dann hättest du mit vsync regelmäßig 75 mal pro Sekunde in gleichmäßigen Zeitabständen ein neues Bild.
Das ist ein Trugschluss!!
Auch hier sind's ziemlich genau 37,5fps die angezeigt werden.
Wenn die Refreshrate bei 75Hz liegt, die Graka aber zB. 80fps rendern koennte, dann kannst du nicht einfach so rechnen, als wuerde die Graka einfach mal 5 Bilder fallenlassen und 75fps zeigen.
Originally posted by EKTENIE
klingt interessant! Was ist eigendlich, wenn man die menge zuvor gerenderten Bilder bei V-Sync selbst bestimmt? Ist doch möglich. ZZ hab ichs auf 3 Bilder
MAP EKTENIE
Das wird nicht helfen.
Das "Prerenderlimit" gibt nur an, wieviel frames noch gerendert werden bevor die Graka/der Renderprozess auf externe Einfluesse (Tastendruck, Mausbewegung/-klick) reagieren.
Hochsetzen des Prerendelimit fuehrt zu den beruechtigten Verzoegerungen, auch "mouse lags" genannt. Erst nach Ablauf des Prerenderlimit (standard: 3) folgt der gerenderte Screen der Mausbewegung.
Originally posted by ow
Das ist ein Trugschluss!!
Auch hier sind's ziemlich genau 37,5fps die angezeigt werden.
Wenn die Refreshrate bei 75Hz liegt, die Graka aber zB. 80fps rendern koennte, dann kannst du nicht einfach so rechnen, als wuerde die Graka einfach mal 5 Bilder fallenlassen und 75fps zeigen.
Aber was ist, wenn vsync eingeschaltet ist?
Originally posted by ow
Das ist ein Trugschluss!!
Auch hier sind's ziemlich genau 37,5fps die angezeigt werden.
Wenn die Refreshrate bei 75Hz liegt, die Graka aber zB. 80fps rendern koennte, dann kannst du nicht einfach so rechnen, als wuerde die Graka einfach mal 5 Bilder fallenlassen und 75fps zeigen.
???
Wenn die Refreshrate bei 75Hz liegt und die Graka 80fps rendern könnte, werden 75fps gerendert ("konstante" Frames vorausgesetzt).
EKTENIE
2002-04-03, 15:19:04
Da tut sich noch ein Problem auf, speziel bei NASCAR 2002: Ich hab meine Desctopauflösung der Auflösung in Nascar angepasst (in deisem Fall 800x600x32 für möglichst höchste FPS (60 bis 80 unkonstant)) Dabei läuft mein Bildschirm mit 100hz zumindest in Windows, in NASCAR 2002 jedoch hab ich grad mal 60hz!!! An was liegt das? Gibs n Tool, was 100hz in jeder Anwendung erzwingt?
MAP EKTENIE
EKTENIE
2002-04-03, 15:33:06
Ich hab eben nochwas getestet:
Ich habe die FPS in NASCAR 2002 auf maximal 60 beschränkt (entspricht den Hz meines Monitors im Spiel) und siehe da, das Zuckeln ist weg! Bei konstanden 60FPS zu 60hz verschwindet das zuckeln! Doch hat man zu wenig oder zu viel, kommt es wieder! Aber leider hab ich keinen plan, wie man minnimale FPS einstellt!
MAP EKTENIE
Originally posted by Xmas
???
Wenn die Refreshrate bei 75Hz liegt und die Graka 80fps rendern könnte, werden 75fps gerendert ("konstante" Frames vorausgesetzt).
Deine Voraussetzung ist praktisch NIEMALS erfuellbar.
Und auch dann wuerde es nur bei double Buffering gelten, wenn der Chip wirklich die Zeit bis zum Vertikalrefresh mit Warten ueberbrueckt.
Besser so?
Originally posted by ow
Deine Voraussetzung ist praktisch NIEMALS erfuellbar.
Und auch dann wuerde es nur bei double Buffering gelten, wenn der Chip wirklich die Zeit bis zum Vertikalrefresh mit Warten ueberbrueckt.
Besser so?
Die Voraussetzung ist schon erfüllbar, zumal ich ja noch etwas "Luft" (80 fps, 75Hz) gelassen hab. Selbst wenn die Frames keine konstante Zeit zum Rendern brauchen, bekommst du keine 37,5 fps, sondern mehr.
Und auch bei Triple Buffering verbringt der Chip die Zeit bis zum Vertikalrefresh mit warten. Aber eben erst dann wenn beide Frontbuffer fertig sind.
ok, sind halt etwas mehr als 37,5 fps.
Dann musst du fuer jedes Frame den exakten zeitlichen Abstand zum vorhergehenden auswerten, Kehrwert bilden und fuer jedes Frame dann einen 'fps'-Wert angeben.
Bei 75Hz ist es ziemlich wurscht, ob der Chip nur 60fps oder 80fps packt. Im Mittel werden bei Vsync On etwa 37,5fps gerendert.
Sehr schoen kann man das Verhalten in den Winbench Speed-Tests beobachten (double/triple mit jeweils Vsync on/off).
Originally posted by ow
Bei 75Hz ist es ziemlich wurscht, ob der Chip nur 60fps oder 80fps packt. Im Mittel werden bei Vsync On etwa 37,5fps gerendert.
Da liegst du ziemlich daneben, was man auch leicht mathematisch nachweisen kann. Wenn der Chip im Mittel 80 fps schaffen würde, dann ist höchstwahrscheinlich die Mehrzahl der Frames in unter 1/75 s fertig gerendert, was dazu führt, dass diese Frames (genauer: die Vorgängerframes) nur einmal angezeigt werden.
Gehen wir nur mal davon aus, dass die Frames abwechselnd mehr bzw. weniger als 1/75 s benötigen, so kommt man auf eine gemittelte Framerate von 50 fps, weil ein Frame immer zweimal, das nächste jedoch nur einmal angezeigt wird.
Originally posted by ow
ok, sind halt etwas mehr als 37,5 fps.
Dann musst du fuer jedes Frame den exakten zeitlichen Abstand zum vorhergehenden auswerten, Kehrwert bilden und fuer jedes Frame dann einen 'fps'-Wert angeben.
Bei 75Hz ist es ziemlich wurscht, ob der Chip nur 60fps oder 80fps packt. Im Mittel werden bei Vsync On etwa 37,5fps gerendert.
Sehr schoen kann man das Verhalten in den Winbench Speed-Tests beobachten (double/triple mit jeweils Vsync on/off).
Ich versteh immer noch nicht wie du das meinst. Angenommen die Grafikkarte kann jedes Frame in weniger als 1/75 Sekunde rendern, warum sollte es dann nicht mit Vsync möglich sein, dass die Grafikkarte jedesmal ein neues Bild liefert?
thommenk
2002-04-03, 16:32:10
Originally posted by EKTENIE
Ich hab eben nochwas getestet:
Ich habe die FPS in NASCAR 2002 auf maximal 60 beschränkt (entspricht den Hz meines Monitors im Spiel) und siehe da, das Zuckeln ist weg! Bei konstanden 60FPS zu 60hz verschwindet das zuckeln! Doch hat man zu wenig oder zu viel, kommt es wieder! Aber leider hab ich keinen plan, wie man minnimale FPS einstellt!
MAP EKTENIE
Logisch. Das Gleiche hab ich mit SS:SE gemerkt, nur dass dass ich dort nicht "aktiv" die Framerate begrenzen musste, sondern irgendein relativ intelligenter Algorithmus die Framerate auf einen ganzzahligen Bruchteil der Bildwiederhofrequenz setzt. Bei 100 Hz werden also entweder 50 oder bei weniger rechenintensiven Szenen 100 fps gezeigt.
Überleg mal folgendes: Wenn deine Graka 61 Bilder pro Sekunde rendert, dann muss sich der Monitor, der beispielsweise mit 60 Hz läuft, aus den 61 Bildern 60 rauspicken. Folglich "fehlt" ein Bild, also kommt es kurz zu einem Ruckler. Bei diesem Beispiel passiert das jede Sekunde.
Kaspar
Originally posted by thommenk
Überleg mal folgendes: Wenn deine Graka 61 Bilder pro Sekunde rendert, dann muss sich der Monitor, der beispielsweise mit 60 Hz läuft, aus den 61 Bildern 60 rauspicken. Folglich "fehlt" ein Bild, also kommt es kurz zu einem Ruckler. Bei diesem Beispiel passiert das jede Sekunde.
Das stimmt so nicht. Wenn VSync an ist rendert die Grafikkarte auch maximal 60 fps, es gibt also kein Frame zum "rauspicken". Und wenn VSync nicht an ist, wird der Bildwechsel einfach dann vollzogen wenn das Bild fertiggerendert ist, womit es zu Tearing kommt.
thommenk
2002-04-03, 16:55:34
Originally posted by Xmas
Das stimmt so nicht. Wenn VSync an ist rendert die Grafikkarte auch maximal 60 fps, es gibt also kein Frame zum "rauspicken". Und wenn VSync nicht an ist, wird der Bildwechsel einfach dann vollzogen wenn das Bild fertiggerendert ist, womit es zu Tearing kommt.
Ich hab gedacht, VSync verhindere bloss, dass innerhalb eines Anzeigezyklus des Bildschirms (Elektrodenstral von oben links bis unten rechts) das angezeigte Bild ändert, also oben links Frame 1 gezeichnet wird und mittendrin Frame 2 weitergezeichnet wird, weil die Graka dann halt Frame 2 fertig gerechnet hat.
Kaspr
Originally posted by thommenk
Ich hab gedacht, VSync verhindere bloss, dass innerhalb eines Anzeigezyklus des Bildschirms (Elektrodenstral von oben links bis unten rechts) das angezeigte Bild ändert, also oben links Frame 1 gezeichnet wird und mittendrin Frame 2 weitergezeichnet wird, weil die Graka dann halt Frame 2 fertig gerechnet hat.
Kaspr
Genau das tut es ja auch. Indem es die Grafikkarte bis zum nächsten VRetrace warten lässt wenn ein Frame fertiggerechnet ist.
thommenk
2002-04-03, 17:26:09
Ach so. ich dachte, dass die GPU einfach "blind" Daten liefert, und erst der RAMDAC dann die Frames quasi auf die Bildwiederholrate quantisiert.
Hast recht XMas.
War da vorhin wohl etwas verwirrt. Man sollte sich am Arbeitsplatz nicht zu sehr ablenken lassen:D
Ursprünglich wollte ich wohl auf den Trugschluss von thommenk (überspringen von Frames) hinaus.
Aber um mal bei den mitteleren fps zu bleiben:
Wenn ich Durchschnitt 80fps habe, wie sind dann die "differentiellen" fps als Kehrwert der Zeitdifferenz zwischen 2 gerenderten Frames verteilt?
Du schreibst, dass die meisten Frames in weniger als 1/75s gerendert werden, was korrekt ist.
Nehmen wir jetzt mal 80fps als Mittel von min.40 und max.120 fps.
Die Verteilung dürfte irgendwo zwischen Gleichverteilung und Normalverteilung liegen mit Tendenz zur Normalverteilung.
Dann gibt´s aber immer noch genug Frames, die 2x vom RAMDAC ausgegebn werden, da der Chip das Bild nicht innerhalb 1/75s gerendert hat. Macht dann für jedes dieser Frames einen differentiellen fps Wert von 37,5.
In der Praxis wird´s dann so aussehen, dass etwas über die Hälfte der gesamten Zeit 75fps gerendert werden und im verbleibenden Rest 37,5fps (sofern kein Frame dreimal durch den DAC muss).
Ist aber alles scheiss theoretisch. :D:D
Originally posted by thommenk
Ach so. ich dachte, dass die GPU einfach "blind" Daten liefert, und erst der RAMDAC dann die Frames quasi auf die Bildwiederholrate quantisiert.
???
Nein, der RAMDAC tut nur eines:
Den Speicherinhalt des Frontbuffers in ein analoges Signal für den Monitor wandeln.
Um das komplette Frame zu wandeln braucht er bei 100Hz dazu 1/100s.
Wenn während dieser Zeit ein Bufferswap Frontbuffer<->Backbuffer erfolgt, dann entspricht der Rest des gezeigten Bildes schon dem nächsten gerenderten Frame.
Dies führt zu den bekannten "Tearing"-Artefakten (am besten zu sehen bei schnellen Schwenks, weil sich da die aufeinanderfolgenden Frames sehr stark unterscheiden).
Um das Tearing zu verhindern dient der VSync. Er stellt sicher, dass ein Bufferswap nur dann erfolgt, wenn der Elektronenstrahl der Monitorröhre gerade von recht unten nach links oben zurückläuft.
Doomtrain
2002-04-03, 19:37:02
Originally posted by Xmas
???
Wenn die Refreshrate bei 75Hz liegt und die Graka 80fps rendern könnte, werden 75fps gerendert ("konstante" Frames vorausgesetzt).
Konstante Frames gibbet nicht!
Originally posted by Doomtrain
Konstante Frames gibbet nicht!
Hundertprozentig konstant sicher nicht, deswegen die "". Aber solange es kaum Bewegung gibt und die CPU nicht mit sonstigen Aufgaben belastet wird, ist es gut möglich dass sich die Zeit, die zum Rendern eines Frames benötigt wird, in sehr engen Grenzen bewegt.
Doomtrain
2002-04-03, 19:50:08
Originally posted by Xmas
Hundertprozentig konstant sicher nicht, deswegen die "". Aber solange es kaum Bewegung gibt und die CPU nicht mit sonstigen Aufgaben belastet wird, ist es gut möglich dass sich die Zeit, die zum Rendern eines Frames benötigt wird, in sehr engen Grenzen bewegt.
Logisch, aber in der Praxis Unsinn. In welchem Spiel steht man denn nur herum?
Originally posted by thommenk
Ich hab gedacht, VSync verhindere bloss, dass innerhalb eines Anzeigezyklus des Bildschirms (Elektrodenstral von oben links bis unten rechts) das angezeigte Bild ändert, also oben links Frame 1 gezeichnet wird und mittendrin Frame 2 weitergezeichnet wird, weil die Graka dann halt Frame 2 fertig gerechnet hat.
Kaspr
Das was du beschrieben hast, passiert wenn single buffering an ist. Mit double buffering gibt es 2 Bilder im Framebuffer, eins das schon fertig ist, und eins, das gerade gerendert wird. Wenn ein Bild fertiggerendert ist, ersetzt es das alte fertiggerenderte Bild. An den Monitor wird dabei immer nur das fertiggerendert Bild geschickt.
Nein, Tomp
Er hat einen Bufferswap ohen VSync beschrieben und das kann nur bei double/triple buffering auftreten.
Single Buffering ist auf konventionellen Renderen unbrauchbar, nur beim Kyro geht´s.
Lemmi
2002-05-28, 22:34:46
Hallo,
leider kann ich nix wirklich zur lösung beitragen. Muss aber EKTIENNE 100%ig zustimmen. Besser hätte ich es nicht ausdrücken können.
EKTIENNE - Dein System ?
pervert
2002-05-29, 06:31:38
Originally posted by ow
Hochsetzen des Prerendelimit fuehrt zu den beruechtigten Verzoegerungen, auch "mouse lags" genannt. Erst nach Ablauf des Prerenderlimit (standard: 3) folgt der gerenderte Screen der Mausbewegung.
Interessanter Thread hier.
Cool, jetzt weiss ich endlich wie ich das verdammte Mouselag loswerde. Mit D3D-Games am FPS-Limit ist das nämlich echt heftig.
Was genau bewirkt das Prerenderlimit eigentlich, bzw warum ist es so eingestellt wie es ist (OGL=2/D3D=3), bzw welche Vorteile/Nachteile schafft ein höherer Wert, bzw die eingetragenen Werte gegenüber der niedrigsten Einstellung. Oder sollte/kann man die Limits in OGL/D3D am besten einfach auf 1 (oder 0?) stellen, damit man ja kein Mouselag hat, ohne Nachteile befürchten zu müssen? Spielt hier evtl. auch VSync eine Rolle?
Unregistered
2002-05-29, 11:56:33
Spielentwickler sollten ihn jedem Spiel so einen Framebegrenzer wie in GP3 und GP4 einbauen. (Habe auch gehört das es sowas bei GTA3 gibt) Sowas wäre cool bei einem Egoshooter wenn man nur die Systemauslastung angezeigt bekäme wie bei GP3(press O )und man hätte z.b. konstante 40 oder 50 fps. Das wäre der Hammer.
pervert
2002-05-29, 21:22:52
Mir ist gerade aufgefallen, dass man mit dem Rivatuner unter OGL keinen Wert unter "2" eintragen kann, für das Prerendelimit. Illegaler Wert wird angezeigt. Geht das vielleicht per Regedit und funktionieren niedrigere Werte dann auch?
Mischler
2002-05-31, 18:53:13
Originally posted by Unregistered
Spielentwickler sollten ihn jedem Spiel so einen Framebegrenzer wie in GP3 und GP4 einbauen. (Habe auch gehört das es sowas bei GTA3 gibt) Sowas wäre cool bei einem Egoshooter wenn man nur die Systemauslastung angezeigt bekäme wie bei GP3(press O )und man hätte z.b. konstante 40 oder 50 fps. Das wäre der Hammer.
Das wäre das allerschlimmste was passieren kann. Vor allem GP3 ist nur Scheiße wegen dem Framelimit. Schlechte Grafik und dann nur 25,6fps. So wenige Frames heißen extremes Ruckeln bei schnellen Bewegungen. Aber zum Glück ist es ein Formel 1 Spiel wo sich fast nie etwas schnell bewegt.
Was soll denn der Vorteil davon sein wenn man die Frames niedrig hält? Ich finde es viel besser wenn immer so viele Frames gerendert werden wie die Hardware schafft. Ich hoffe nur dass GP4 nicht wieder diesen Limiter-Dreck hat. Sonst wird es wohl genauso schnell wieder deinstalliert wie GP3.
Christian
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.