Ruckelfreies TO
----------------------
Ohje, was ein elendig leidiges Thema. Wer kennt es nicht? Man läuft durch die Map und hat genug Frames, dann kommt es zu einem Infight und das geruckel startet. Bevor ich erkläre wie man sein TO am besten ruckelfrei bekommt möchte ich erstmal (recht ausführlich aber sehr informativ) erklären warum die Ruckler so stark stören:
Empfinden
---------
Dem Spieler wird sobald das ruckeln startet schlichtweg unbehaglich, da sein Auge an eine gewisse Frameanzahl gewohnt ist, ferner kann ein plötzliches stocken des Bildes zu volkommener Irritation führen da dass Geschehen für den Spieler im Kopf weiter geht. Das Aiming kann bei so starken Rucklern massiv beeinflusst werden da man teilweise ohne erkennbaren Grund plötzlich ohne es selber zu verantworten in eine völlig andere Richtung guckt, als zuvor.
Maus
-----
Die meisten von uns werden eine USB-Maus besitzen. Die Daten einer USB-Maus werden 125 mal pro Sekunde vom Laser zum System übertragen. (125 Hz) Die genaueste Übersetzung von Mausdaten -> Bild ist logischerweise 1:1, das entspricht einem Wert von 125 fps.
Mousespeed
-----------
Der Mousespeed ist nicht nur von dem bei Options eingegebenem Wert abhängig, sondern auch von der Anzahl der Frames pro Sekunde. Haben wir uns jetzt an unsere Mauseinstellung gewöhnt wissen wir instinktiv wieviel Handbewegung für welche Strecke nötig ist. Kommen wir in eine brenzlige Situation und die Frames sinken auf z.b. 60 fps, hat das nicht nur zufolge dass uns das Geschehen ruckelig vorkommt sondern auch dass der Mousespeed drastisch sinkt. Jetzt fragt ihr euch wo das Problem ist - aber glaubt mir je konstanter die Frames sind, desto genauer wird das Gefühl dass man in der Hand bekommt und damit die Effizienz beim aimen - habe ich bei mir ganz klar feststellen können nachdem ich meinen neuen PC bekam.
Lags
-----
Jetzt wird es etwas komplizierter, Ich hoffe es dennoch möglichst verständlich erklärt zu haben:
Je mehr die Frames schwanken umso mehr laggt es.
Dazu muss erst folgendes erklärt werden:
Jeder von uns benutzt einen bestimmten Netspeed. (Bei den meisten Leuten zwischen 10 und 20 Tausend) Nun, wofür ist der gut? Der Netspeed gibt an, wieviel Daten pro Sekunde an den Server geschickt werden. (und umgekeht) Hier die zwei Formeln mit der in allen spielen mit der UT Engine der Ping berechnet wird:
f1 ping = dos ping + (1000/fps + 0,5*1000/tickrate)*0,5
f6 ping = dos ping + 1000/tickrate + 0,5*1000/fps
Ich möchte keine langen Berechnungen anstellen wie es zu Lags kommt; das wohl trifftigste Argument ist dass sich der Ping bei schwankenden Frames dauernd ändert. (wie ihr seht kommt in beiden Formeln fps vor)
Und je mehr die Frames hin und her schwanken, schwankt deshalb auch der Ping. Und wenn man mal genau drauf achtet gibt es nichts schlimmeres als ein Gegner bei dem dauernd der Ping schwankt. Dann ändert sich nämlich genau so oft der Weg den man vorzielen muss, wie: 1000 / (Ping des Gegners). Beispiel:
Gegner hat einen Ping von 50, 1000/50 = 20. Man müsste also bei einem Gegner der vor einem herumlaggt in dem Fall 20 mal Pro Sekunde die Strecke die man vorzielt ändern um genausogut zu treffen wie Jemanden mit einem Konstanten Ping. Selbst wenn der Gegner einen 150er Ping hat müsste man dies immer noch ca. 7 mal machen und ich glaube kaum dass jemand dazu in der Lage ist. (Wir gehen jetzt zusätzlich von 100% präzisem aiming aus ).
Und was heisst das jetzt?
Ich bin jetzt von dem Fall ausgegangen, dass der Gegner schwankende Frames hat. Genauso funktioniert es natürlich auch umgekehrt, je mehr unsere Frames schwanken desto schlechter kommen auch unsere Schüsse an. Wenn ihr einen Gegner habt der rumlaggt der selber nicht mehr trifft als ihr ihn, hat er warscheinlich ein ruckeliges TO, habt ihr einen Gegner der 'alles' trifft und rumlaggt, liegt der Fehler nicht bei ihm sondern irgendwo in der Connection zwischen Dir und Ihm. (Das kann dann allerdings 1000 Gründe haben)
Faustregel: Je konstanter die FPS von beiden Parteien, desto weniger Lagwarscheinlichkeit.
So, was haben wir jetzt gelernt? Die Frames sind Schuld!
Nungut, aber was machen wir dagegen? Ersteinmal sollten wir die Windows Treiber optimieren. VORSICHT: Neuester Treiber heist nicht gleich bester Treiber! Für NVidia Karten empfehle ich einen älteren Detonator und für ATI Karten den Catalyst Version 6.14.10.6414. (Dateiname: wxp-w2k-catalyst-7-97-031212a-013118c.exe) Jetzt jagt mir nicht den Teufel auf den Hals wenn es mit neueren Treibern genausoschnell läuft, aber gerade die neuen ATI Treiber haben bei mir oftmals dazu geführt dass mein TO nach dem starten dunkel ist und auch bleibt. Wann man die beste Treiberkonfiguration hat kann man aus eigener Erfahrung bestimmen oder indem man Benchmark Ergebnisse vergleicht.
Jetzt kommen wir erst dazu, was an TO zu verstellen :
Globale Einstellungen: (Optionsmenü -> Video) (Merke: Unabhängig von der Grafikschnitstelle(D3d/OpenGL))
Auflösung (Je geringer desto mehr Frames)
------------------------------------------
Dennoch hat sich 1024x768 bei den meisten Spielern eingebürgert. Ich würde die Auflösung erst als letzte Instanz runterstellen weil das erkennen der Gegner beim runterschrauben deutlich schwieriger wird.
Farbtiefe (Ob 16 oder 32 Bit, kaum unterschiede)
-------------------------------------------------
Im Zeitalter des SD-Rams auf Grafikkarten war 16 bit klar schneller, heutzutage haben alle Graffikarten DDR-Ram und das verstellen der Farbtiefe bringt somit kaum etwas. Da 16 bit unter Opengl sowieso verboten ist schreibe ich erst gar nicht weiter.
Texturen (Je 'lower' desto mehr Frames)
----------------------------------------
Ist doch logisch, je Grobkörniger die Texturen desto weniger Material ist von der Grafikkarte zu verarbeiten, also ein kräftiger Framezuwachs!
Min Desired Framerate (FPS-Stabilisator)
-----------------------------------------
Dieser Wert gibt an, bei welcher FPS-Anzahl (unt natürlich drunter) die Engine anfängt, Details runterzuschrauben damit die Frames wieder hoch gehen. Stellt hier bei aktivem Vsync eure Wiederholrate-1 ein, also bei 100Hz: 99. Das heisst sobald die Frames weniger als 100 sind, fängt die Engine an Details wegzunehmen.
Effects/Particles Detail (Je geringer, desto besser für die Frames)
--------------------------------------------------------------------
Ich weiss ehrlichgesagt nicht wie gravierend sich das auswirkt, stellts einfach auf low und habt nen gutes Gewissen
Weiter gehts!
Vorerst braucht ihr einen anderen OpenGl-Treiber. (http://cwdohnal.home.mindspring.com/utglr/ -> utglr25.zip (Version 26 wird leider nicht von Xprotect supported))
Nun kommen wir zur TacticalOps.ini (Einfach mit einem Texteditor öffnen, befindet sich im Ordner System)
Da dass erklären jeder einzelnen nun zu berücksichtigenden Einstellung zu weit ausschweifen würde, habe ich eifnach die besten Einstellungen zur jeweiligen Grafikschnittstelle hier aufgelistet, ihr müsst in der ini nur an die richtige Stelle gehen und die vorhandenen Werte mit denen Überschreiben:
[OpenGLDrv.OpenGLRenderDevice]
DetailTextures=False
UseTrilinear=True
UseS3TC=True
UseTNT=False
LODBias=0.000000
UseMultiTexture=True
UsePalette=True
UseAlphaPalette=False
Translucency=1
VolumetricLighting=False
ShinySurfaces=False
Coronas=False
HighDetailActors=False
MaxAnisotropy=360
AlwaysMipmap=False
UsePrecache=False
SupportsLazyTextures=0
GammaOffset=0.000000
MaxLogTextureSize=0
MinLogTextureSize=0
MaxLogVOverU=0
MaxLogUOverV=0
MaxTMUnits=0
RefreshRate=0
NoFiltering=False
DisableSpecialDT=False
UseFilterSGIS=False
Use4444Textures=False
UseVertexSpecular=False
ShareLists=False
DescFlags=0
Description=
TruFormMinVertices=0
TruFormTessellation=3
UseTruForm=False
NumAASamples=0
UseAA=False
RequestHighResolutionZ=True
MaskedTextureHack=False
SwapInterval=-1
UseVertexProgram=False
UseCVA=False
UseMultiDrawArrays=False
AAFilterHint=0
TexDXT1ToDXT3=False
DynamicTexIdRecycleLevel=100
UseTexPool=True
UseTexIdPool=True
UseSSE=2
BufferClippedActorTris=True
SinglePassDetail=False
ColorizeDetailTextures=False
DetailClipping=False
UseDetailAlpha=True
AutoGenerateMipmaps=False
UseBGRATextures=True
UseZTrick=False
OneXBlending=False
GammaCorrectScreenshots=False
GammaOffsetBlue=0.000000
GammaOffsetGreen=0.000000
GammaOffsetRed=0.000000
FrameRateLimit=0
[D3DDrv.D3DRenderDevice]
Translucency=True
VolumetricLighting=False
ShinySurfaces=False
Coronas=False
HighDetailActors=False
UseMipmapping=True
UseTrilinear=False
UseMultitexture=True
UsePageFlipping=True
UsePalettes=True
UseFullscreen=True
UseGammaCorrection=True
DetailTextures=False
Use3dfx=False
UseTripleBuffering=True
UsePrecache=True
Use32BitTextures=False
Use32BitZBuffer=False
UseVertexFog=False
UseAGPTextures=False
UseVideoMemoryVB=False
UseVSync=False
DescFlags=1
dwDeviceId=20040
dwVendorId=4098
Na klasse, unser TO ist nun so eingestellt dass es möglichst viele Frames rausrotzt, je nachdem wieviel gerade möglich sind. Doch halt! Habe ich nicht eben erklärt dass je konstanter die Frames sind desto weniger es auch laggt? Richtig. Also sorgen wir dafür dass die Frames auf einer Möglichst gleichen Höhe bleiben. Sowohl unter Direct3d als auch unter Opengl erreicht man das indem man einfach die Vertikale Synchronisation einschaltet. Ich würde empfehlen dass über den Grafiktreiber zu machen da es innerhalb der Engine unter Direct3d verbuggt (True/False vertauscht) und unter OpenGl erst gar nicht möglich ist. Bedenkt dass die Frames dann nicht höher steigen als die Wiederholrate des Bildschirms. (Also z.b. 85Hz = 85fps max.) Man sollte natürlich die Wiederholrate so hoch wie Möglich einstellen. Wer einen Monitor hat der unter 1024x768 120Hz schafft, kann sich glücklich schätzen da, angenommen das System ist nach dem Tuning nun fähig 120 fps konstant zu rendern, die Mausbewegung nun kaum präziser sein kann. (120 fps zu 125Hz am USB-Port) Ansonsten nehmt einfach den höchsten Wert.
Unter OpenGL gibt es einen Trick für die Leute die behaupten, mit Vsync 'ziehe die Maus nach'. (wenn man die von mir beschriebene OpenGL.dll benutzt):
Man stellt Vsync im Grafiktreiber aus aber stellt in der TacticalOps.ini unter dem Eintrag [OpenGLDrv.OpenGLRenderDevice] das FrameRateLimit auf 125. Dann hat man wirklich die Mausbewegung 1:1 - das Optimum.
Ausnahme: Bei manchen Systemen kommt es seltsamerweise bei <100 fps zu Geruckel. Falls das bei euch so sein sollte stellt 85Hz mit Vsync ein und ende, da kann man nichts machen.
Abschliessend noch einige Tipps von mir die auch einfluss auf die FPS haben:
Mündungsfeuer an eigener Waffe ausschalten (für Spieler mit angezeigter Waffe)
---------------------------------------------------------------------------
---
HighDetailActors im jeweiligen Abschnitt auf False setzen (Faule suchen in der INI einfach danach und stellen es überall auf False)
Die Wasseranimation ausschalten (Wasseroberfläche erscheint wie eine Platte)
---------------------------------------------------------------------------
--
Unter [WinDrv.WindowsClient] -> NoFractalAnim auf True setzen. Manche Leute behaupten man würde dann eher sehen, wenn Jemand den Kopf aus dem Wasser streckt. Muss jeder handhaben wie er will, fakt ist es bringt FPS.
Die störenden Lichtkegel ausschalten (Coronas)
----------------------------------------------
Dass weiss zwar fast jeder, aber für die anderen: Im jeweiligen Abschnitt Coronas auf False setzen und ihr werden nichtmehr 'geblendet'.
Eigene Waffe ausschalten
------------------------
Kann man im Optionsmenü unter Game -> Weapon Hand auf 'Hidden' setzen, die Engine muss ein 3dModel weniger berechnen was natürlich (etwas) mehr Leistung bringt.
Wenn ihr das alles gemacht hab solltet ihr ein Möglichst gut eingestelltes TO haben, dass was jetzt zwangsläufig immer noch daneben geht (ich weiss, es ist immer noch über 50% aller Schüsse) ist das ConeFire oder die schlechte Connection zwischen den einzelnen Spielern schuld, darauf kann man aber keinen Einfluss nehmen.

