Difference between revisions of "Smooth Quake"

From QWiki
 
(122 intermediate revisions by 2 users not shown)
Line 3: Line 3:
  
 
== Hardware ==
 
== Hardware ==
 +
===Sync technologies===
 +
* Vertical syncronization (vsync) should be disabled while playing. It causes input lag.
 +
 +
* FreeSync and G-Sync/compatible provide a tearless image. It will keep your fps and monitor Hz synced without additional input lag.
 +
 +
* Black Frame Insertion (BFI) strobes the backlight synchronized with Hz for CRT-like motion clarity (cathode-ray tube).<br> Brands use different names for BFI. This adds a bit of input lag and creates a double image effect called crosstalk.<br>However, as of 2023, Nvidia launched ULMB2 which looks very promising without these downsides.<br><br>[https://www.youtube.com/watch?v=evjZGLdqUu8 Nvidia ULMB2 announcement]<br>[https://youtu.be/3Cykx2GQq4k Optimum Tech ULMB2 comparison]
 +
 
===Monitor===
 
===Monitor===
 
Ideally, an IPS panel with at least 240Hz minimum is recommended. But any 144hz or more screen will work great!<br>
 
Ideally, an IPS panel with at least 240Hz minimum is recommended. But any 144hz or more screen will work great!<br>
'''Why IPS?''' TN has bad colors and viewing angles, VA has slow response time and OLED has higher input lag.<br>
+
'''Why IPS?''' TN has bad colors and viewing angles, VA has slow response time and OLED has burn-in risk and is expensive.<br>
The pixels response time must stay inside de refresh cycle (1000/Hz) to avoid blur and take full advantage of the monitor's Hz.<br>
+
The pixels response time must stay inside the refresh cycle (1000/Hz) to avoid blur and take full advantage of the monitor's Hz.<br>
'''Example''': the refresh cycle of a 240hz monitor is 1000/240='''4.16m'''s, if the pixel response time is above that, its going to generate blur.<br>
+
'''Example''': the refresh cycle of a 240hz monitor is 1000/240='''4.16ms''', if the pixel response time is above that, its going to generate blur.<br>
 
You can read about the pixel response time for your monitor [https://www.rtings.com/monitor/tests/motion/motion-blur-and-response-time here]. Sort the column by rise/fall time.<br>
 
You can read about the pixel response time for your monitor [https://www.rtings.com/monitor/tests/motion/motion-blur-and-response-time here]. Sort the column by rise/fall time.<br>
<br>
 
 
Some monitors have a fast enough response time but at the cost of ghosting. Take this into account.<br>
 
Some monitors have a fast enough response time but at the cost of ghosting. Take this into account.<br>
 
[https://www.testufo.com/ghosting#background=004040&separation=160&pps=1080&graphics=bbufo.png&pursuit=1 UFO Test] shows how your monitor responds so you can select a proper overdrive setting.<br>
 
[https://www.testufo.com/ghosting#background=004040&separation=160&pps=1080&graphics=bbufo.png&pursuit=1 UFO Test] shows how your monitor responds so you can select a proper overdrive setting.<br>
<br>
+
''Example products'': Asus VG279QM [https://www.aperturegrille.com/reviews/ASUSVG279QM/ Aperture Grille's review].
''Example products'': Asus VG279QM [https://www.aperturegrille.com/reviews/ASUSVG279QM/ Aperture Grille's review].<br><br>
 
On CRT displays you can lower resolution to get higher refresh rates. Your video card drivers probably have a custom refresh rate feature. If not, you can use an external program like Powerstrip or Refresh Lock.
 
  
 
===Mouse===
 
===Mouse===
 
Any modern mouse should be ok.<br>
 
Any modern mouse should be ok.<br>
Most mouse companies add smoothing after a certain DPI level ([https://community.xim.tech/index.php?topic=84035.msg795898#msg795898 more info]) but a few brands have smoothing disabled for all DPI ranges.<br>
+
Most mouse companies add smoothing after a certain DPI level (usually 1800) but a few brands have it disabled for all DPI ranges.<br>
Smoothing is bad!<br>
+
Smoothing is basically input lag. It's added in the firmware, not the sensor.<br>
 
You should only use '''native DPI values''' to avoid interpolation. 1000Hz and DPI of 800 minimum is recommended.<br>  
 
You should only use '''native DPI values''' to avoid interpolation. 1000Hz and DPI of 800 minimum is recommended.<br>  
A good sensor should not have problems such as smoothing, angle snapping, jitter and DPI deviation.<br>
+
A good mouse should not have problems such as smoothing, angle snapping, jitter and DPI deviation.<br>
 
''Example products'': Pixart 3389 sensor (1600 DPI no smoothing added).<br>
 
''Example products'': Pixart 3389 sensor (1600 DPI no smoothing added).<br>
[https://www.youtube.com/watch?v=6AoRfv9W110 Battle(non)sense DPI analysis].<br>
+
 
[https://www.youtube.com/watch?v=imYBTj2RXFs Optimum Tech DPI analysis]<br>
+
[https://www.youtube.com/watch?v=6AoRfv9W110 Battle(non)sense DPI analysis]<br>
<br>
+
[https://www.youtube.com/watch?v=imYBTj2RXFs Optimum Tech DPI analysis]
Note: with 1000Hz+ mouse and keyboard you should use [https://forums.blurbusters.com/viewtopic.php?f=10&t=7618 separate dedicated usb chips] or a PCIe USB card.<br>
 
  
 
===Keyboard===
 
===Keyboard===
 
1000Hz minimum is ideal simply because it has lower input lag than regular 125hz keyboards. [https://www.youtube.com/watch?v=UmS_t3YYy8s Explanation].<br>
 
1000Hz minimum is ideal simply because it has lower input lag than regular 125hz keyboards. [https://www.youtube.com/watch?v=UmS_t3YYy8s Explanation].<br>
 +
Note: with 1000Hz+ mouse and keyboard you should use [https://forums.blurbusters.com/viewtopic.php?f=10&t=7618 separate dedicated usb chips] or a PCIe USB card.<br>
 
''Example products'': EVGA Z20 and Corsair K70 Rapidfire/Champion models are fast but expensive.<br>
 
''Example products'': EVGA Z20 and Corsair K70 Rapidfire/Champion models are fast but expensive.<br>
 
+
<br>
== Configuration ==
+
== Software ==
 +
Do not change anything unless you know what you are doing!<br>
 
===BIOS===
 
===BIOS===
Do not change anything unless you know what you are doing!<br>
 
 
Suggestions:
 
Suggestions:
* Spread Spectrum ; Memory Scrambler: '''Disable'''
+
* Spread Spectrum: Disable
* Extreme Memory Profile (XMP): '''Enable'''
+
 
 +
* CPU Core Ratio: Sync All Cores
 +
 
 +
* PCI-E Native Power Management: Disable
  
 +
* ASPM Support: Disable
  
 
===Windows===
 
===Windows===
 
Suggestions:
 
Suggestions:
* Start > Settings > Privacy > '''Background apps''' > Disable all but "Windows Security"
 
* Control Panel > Mouse > '''Pointer Options''' > Untick 'Enhance pointer precision' and leave pointer speed at 6th notch.
 
* Control Panel > Power Options > High performance > Change plan settings > Change advanced settings > PCI Express > '''ASPM: disable'''
 
<big></big>
 
* [https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts-msi-tool.378044/ MSI Interrupt Mode Utility]: Change supported devices to MSI. A negative value means it's working. Do not enable devices if the supported modes field doesn't include MSI. Interrupt priority should be undefined for all. Windows sets SATA to high and some ethernet drivers too.
 
  
 +
Installation<br>
 +
1. Download original Windows iso with MediaCreationTool from MS and install.<br>
 +
2. Install [https://www.techpowerup.com/download/visual-c-redistributable-runtime-package-all-in-one/ Visual C].<br>
 +
3. Install all WUpdates including drivers.<br>
 +
 +
Settings
 +
* Control Panel > Mouse > Pointer Options > '''Enhance pointer precision''' > Disable
 +
 +
* Start > Settings > Accessibility > Keyboard > '''Sticky Keys''' > Disable the shortcuts.
 +
 +
* Start > Settings > Apps > '''Startup''' > Disable what you don't need.
 +
 +
* Start > Settings > Update & Security (''W10'') > '''Delivery Optimization''' > Disable
 +
 +
* Start > Settings > Windows Update (''W11'') > Advanced options > '''Delivery Optimization''' > Disable
 +
 +
* Start > Settings > System > Display > Graphics > Change Default Graphics Settings (''W11'') > '''GPU Scheduling''' > Enable
 +
 +
* Start (''W10'') > Settings > Privacy > '''Background apps''' > Disable
 +
 +
* GPedit.msc (''W11'') > Computer Configuration >Administrative Templates > Windows Components > App Privacy > '''Let Windows apps run in the background''' > "Enabled" and "Force Deny"
 +
 +
*GPedit.msc (''W11'') > Computer Configuration > Administrative Templates > Windows Components > '''Widgets''' > Disable
 +
 +
*MS Edge > ellipses (…) > Settings > System and performance > '''Continue running BG ext and apps when MS Edge is closed''' > Disabled
 +
 +
*Google Chrome > ellipses (...) > Settings > System > '''Continue running background apps when Google Chrome is closed''' > Disabled
 +
<br>
 +
Services<br>
 +
* TCP/IP NetBIOS Helper (also in: protocol tcp/ipv4 > advanced settings > wins) > Disabled
 +
 +
* Windows Search (Indexer is only required if you search your directories and files) > Disabled
 +
<br>
 +
Integrity<br>
 +
(by this order in cmdline as admin)
 +
 +
1. DISM /Online /Cleanup-Image /CheckHealth<br>
 +
2. DISM /Online /Cleanup-Image /ScanHealth<br>
 +
3. DISM /Online /Cleanup-Image /RestoreHealth<br>
 +
4. sfc /scannow<br>
 +
5. findstr /c:"[SR]" %windir%\Logs\CBS\CBS.log >"%userprofile%\Desktop\sfcdetails.txt"
  
 
===NVIDIA===
 
===NVIDIA===
 
Suggestions:
 
Suggestions:
* [https://github.com/Orbmu2k/nvidiaProfileInspector/releases NvidiaProfileInspector]: change the following value in section "Other" > '''Maximum Frames Allowed''' = 1
+
* NVCP > Global Settings > OpenGL GPU > '''Nvidia''' (to avoid issues with integrated cards being used)
 +
<big></big>
 +
* NVCP > ezQuake profile > OpenGL GDI compatibility > '''prefer compatibility'''
 +
<big></big>
 +
* NVCP > ezQuake profile > Power management mode > '''prefer maximum performance'''
 +
<big></big>
 +
* NVCP > ezQuake profile > Texture filtering > Negative LOD bias > '''clamp'''
 +
<big></big>
 +
* NVCP > ezQuake profile > Threaded Optimization > '''Auto''' (disable this setting if ezQ gets sluggish/stutters)
 +
<big></big>
 +
* NVCP > ezQuake profile > Vulkan/OpenGL present method > '''prefer native'''
 +
<big></big>
 +
* [https://github.com/Orbmu2k/nvidiaProfileInspector/releases NvidiaProfileInspector] > Other > '''Maximum Frames Allowed''' = '''1''' (Pre-rendered frames for OGL. Low Latency Mode is only for DX)
 +
<big></big>
  
 
===AMD/ATI===
 
===AMD/ATI===
''(to be added...)''
+
''(to be added)''<br>
 +
<br>
  
 
== ezQuake ==
 
== ezQuake ==
===ezQuake launch===
+
You should have a frametime of 1.3ms with 1001 fps and ping deviation less than 0.6ms.<br>
You can change '''Windows power plan''' to High Performance while playing and restore its value back to Balanced when finished.<br>
+
During certain transitions some minor tearing appears in the middle of the screen but barely noticeable.<br>
 +
You can use multiples of 77 (server updates) that get close to your monitor Hz for a smoother image.<br>
 +
These are the closest fps with the off values for common Hz.<br>
 +
 
 +
144Hz: 1001 (-7) ; 1155 (+3)<br>
 +
165Hz: 1155 (0)  ; 2310 (0)<br>
 +
240Hz: 1925 (+5) ; 2156 (-4) ; 4081 (+1)<br>
 +
280Hz: 2233 (-7) ; 3080 (0)<br>
 +
360Hz: 1078 (-2) ; 2156 (-4)<br>
 +
480Hz: 1925 (+5)<br>
 +
500Hz: 1001 (+1) ; 2002 (+2)<br>
 +
540Hz: 1078 (-2) ; 1617 (-3) ; 2156 (-4)
 +
 
 +
'''Network Throttling''' ('''NT'''): This is part of the Multimedia Class Scheduler Service (MMCSS). Either disable NT or use sys_yieldcpu 1.<br>
 +
If ezQ is running on the same cores where network data is processed, sys_yieldcpu 0 will cause deviation (check with hud_net_show 1).<br>
 +
Winkey+R > regedit > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile > NetworkThrottlingIndex = ffffffff in hexadecimal to disable ; [10-70] range in decimal and default is 10.
 +
 
 +
===Launch===
 +
GPU (ATI and NVIDIA) sends interrupts to '''core0'''. When Windows sends ezQuake cpu load there and it gets high usage, there will be fps drops.<br>
 +
Excluding core0 from ezQuake will keep fps stable in this situation. Windows distributes cpu load but ezQuake only makes use of two cores.<br>
 +
[https://bitsum.com/tools/cpu-affinity-calculator/ CPU affinity calculator] shows you what hexadecimal value you need to set in cmdline after ''/affinity'' (replace the word ''<HexVal>'' with the value you got from the calculator without all the starting 0x0 zeros). If your cpu has Hyper-Threading you need to exclude cpu0 and cpu1.<br>
 +
Ex.: A CPU with 4 cores and Hyper-Threading (8 threads) the hexadecimal is FC. With 4 cores and no HT the hexadecimal is E.<br>
 +
You can change '''Windows power plan''' to High Performance while playing and restore it back to Balanced when finished.<br>
 
Open command line and type ''powercfg -l'' to see their GUID. They should match the ones below.<br>
 
Open command line and type ''powercfg -l'' to see their GUID. They should match the ones below.<br>
Devices interrupts go to '''cpu0''' by default. Excluding it for ezQuake will improve fps and stabilize frametime. [https://bitsum.com/tools/cpu-affinity-calculator/ Cpu affinity calculator] shows you what hexadecimal value you need to set in the cmdline after the ''/affinity'' (replace the word ''<HexVal>'' with the value you got from the calculator).
+
 
Open notepad and place these 3 lines (without the comment), change game path, and save as '''.bat''' extension.
+
To switch power plans open notepad and place these 3 lines (without the comment), change game path, and save as '''.bat''' extension:<br>
<br>
+
 
 
<small>''powercfg -s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c (#high performance power profile)<br>
 
<small>''powercfg -s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c (#high performance power profile)<br>
start "" /wait /affinity <HexVal> "<your Quake path and executable ex.: D:\QW\ezquake>" -mem 1024<br>
+
start "" /wait /affinity <HexVal> "<your Quake path and executable, ex.: D:\Quake\ezquake.exe>"<br>
powercfg -s 381b4222-f694-41f0-9685-ff5bb260df2e (#balanced power profile)''<br></small>
+
powercfg -s 381b4222-f694-41f0-9685-ff5bb260df2e (#balanced power profile)''</small><br>
<br>
+
 
Adding '''''-mem 1024''''' or ''-mem 512'' to your command line is recommended because ezQuake usually uses windows pagefile (virtual memory stored in your storage media), creating a hard page fault event, which can affect frametime, depending on the computer's background activity. Setting a higher mem value such as the ones recommended will prevent ezQuake making that many pagefile calls.
+
If you always use power plan High Performance just right click ezquake.exe > send to > desktop (create shortcut) with this cmdline:<br>
 +
 
 +
<small>''%ComSpec% /C start "" /affinity <HexVal> "ezquake.exe"''</small><br>
 +
 
 +
===Settings===
 +
Suggestions:
 +
 
 +
''cl_maxfps 1001''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(recommended or more ; use at least 770)<br>
 +
''cl_newlerp 0.1''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(smooths projectiles movement)<br>
 +
''gl_powerupshells 1''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(flashing layer over own weapon and players carrying powerups)<br>
 +
''gl_clipparticles 1''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(limits particles close to you, keeps fps stable)<br>
 +
''r_particles_count 16384''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(is just a limit, won't affect performance if particles don't reach it)<br>
 +
''r_dynamic
 +
2''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1 = cpu ; 2 = gpu: recommended)<br>
 +
''gl_caustics
 +
1''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(consumes around 300fps even outside liquids)<br>
 +
''gl_anisotropy 16''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(use 1 if fps unstable or with maxfps 2002+ ; Note: fps demanding if enabled)<br>
 +
''gl_lerpimages 0''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(deprecated, do not enable)<br>
 +
''gl_texturemode gl_linear_mipmap_linear''&nbsp;&nbsp;&nbsp;(always use mipmap or fps will drop alot)<br>
 +
''gl_outline 0''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1 = models ; 2 = world ; 3 = models + world ; Note: fps demanding if enabled)<br>
 +
''r_farclip 8192''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keeps entities visible at very large distances)<br>
 +
''sys_yieldcpu 0''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keeps the thread active resulting in lower latency)<br>
 +
''gl_multisamples 0''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Note: fps demanding if enabled)<br>
 +
''vid_framebuffer 0''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(enable if you want gl_outline for world ; Note: fps demanding if enabled)<br>
 +
''vid_gammacorrection 0''<br>
 +
''vid_grab_keyboard 0''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(causes several issues if enabled)<br>
 +
''vid_hwgammacontrol 2''<br>
 +
''vid_renderer 1''<br>
 +
''vid_software_palette 0''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(enabled causes white pixels if contrast is below 1.1 ; Note: fps demanding if enabled)<br>
 +
''vid_usedesktopres 1''<br>
 +
''s_khz 48''<br>
 +
''s_linearresample 0''<br>
 +
''s_desiredsamples 128''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(increase by power of 2 if sound gets distorted)<br>
 +
''gl_hwblend 1''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(uses hardware for polyblend)<br>
 +
''gl_polyblend 0''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Note: fps demanding if enabled)<br>
 +
''vid_hwgamma_fps 1''<br>
 +
 
  
===ezQuake settings===
 
Suggestions:<br>
 
''cl_maxfps 1001''        (is the minimum recommended and there is no need for more)<br>
 
''cl_newlerp 0.1''        (smooths projectiles movement)<br>
 
''gl_simpleitems 1''      (combined with gl_externalTextures_world 0, there is fps gain)<br>
 
''r_particles_count 1024'' (is enough unless you use tons of effects)<br>
 
''r_farclip 8192''        (is enough for long distances)<br>
 
<br>
 
 
'''Tools to check performance:'''<br>
 
'''Tools to check performance:'''<br>
* ''timedemo''<br>
+
* ''timedemo2 <demo> <fps>''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(add 77 as fps after the demo name ; don't use the old timedemo cmd)
* ''hud_frametime'' (combine with hud_frametime_max_reset_interval 2 and hud_performance_average 0)<br>
+
* ''hud_frametime''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(combine with hud_frametime_max_reset_interval 2 and hud_performance_average 0)<br>
* ''hud_fps'' (combine with hud_fps_drop -1 and hud_fps_style 2)<br>
+
* ''hud_fps''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(combine with hud_fps_drop -1 and hud_fps_style 2)<br>
 
* ''hud_net''<br>
 
* ''hud_net''<br>
* ''hud_ping''<br>
+
* ''hud_ping''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(combine with hud_ping_show_dev 1 and hud_ping_show_pl 1)<br>
 
* ''hud_speed''<br>
 
* ''hud_speed''<br>
  
===Vsync fine-tuning===
+
===Mouse Input===
While vertical synchronization '''introduces image lag''' and forces one to use lower FPS rates than possible with unlimited FPS, on some configurations when fine-tuned it gives much smoother gameplay than when turned off.
 
You can try to enable Freesync/G-sync as well.
 
 
 
To toggle vsync on, type ''vid_vsync 1'' and ''cl_maxfps 0'' in the console. Now you need to determine what is your video lag and FPS. Type ''show vidlag'' and ''show fps''; You should use new hud (scr_newhud 1) to have these counters visible. The goal is to have stable FPS equal to your display frequency (144 / 165 / 240 / 360 ...) while having the video lag as low as possible.
 
 
 
Start with setting ''cl_vsync_lag_fix 1''. Your video lag might decrease now, but also FPS may decrease. This is where ''cl_vsync_lag_tweak'' comes into play. You have to find the lowest value of the _tweak variable that gives you stable FPS equal to the display frequency. Such a value will decrease the video lag as much as possible without breaking FPS stability. For example tweak set to 0 will decrease video lag to almost 0 ms, but most probably will shut down your FPS rate. And tweak 20 typically won't reduce video lag at all, even if your FPS is super-stable. So find some good value in between.
 
 
 
===Mouse===
 
 
Use ''in_raw 1'' (default) for Raw mouse input. This should provide the cleanest mouse input data, as opposed to what SDL input provides with ''in_raw 0'', which might suffer from Windows's built-in  acceleration curves and other limitations.
 
Use ''in_raw 1'' (default) for Raw mouse input. This should provide the cleanest mouse input data, as opposed to what SDL input provides with ''in_raw 0'', which might suffer from Windows's built-in  acceleration curves and other limitations.
 +
<br><br>
  
 
== Issues ==
 
== Issues ==
 
===Network: lag spikes===
 
===Network: lag spikes===
* '''Proxy''': with default [[nQuake]] settings, the server browser automatically finds proxies. It can connect to a server using more than one.<br>Follow these steps to know if one of them or the one it's using is the culprit.<br>console > ''hud_net_show 1''. If "dev" (deviation) is 1ms+, type ''cl_proxyaddr'' and write IPs down.<br>Server Browser > select a server > press 'enter'<br>
+
* '''Interrupt Moderation (IM)''': If you have a setting to define the rate, the higher the value the more delayed packets are.<br>Some drivers have a buggy implementation. If you notice issues or want to be safe, disable in ethernet properties.<br>
In the help shortcut keys box, "Route" indicates how many proxies were found. Press 'n'. This will connect directly bypassing proxies.<br>If deviation improves then some proxy causes issues.<br>With the IPs you wrote, set ''cl_proxyaddr'' with just one until you find wich one is bad. ''Sb_ignoreproxy'' can exclude it from future updates.
+
<big></big>
 +
* '''Proxy''': with default [[nQuake]] settings, the server browser automatically finds proxies. It can connect to a server using more than one.<br>Follow these steps to know if one of them is the culprit.<br><br>1. Console > ''hud_net_show 1'' (If "dev" is 1ms+, type ''cl_proxyaddr'' and write IPs down)<br>2. Server Browser > select a server > press 'enter'<br><br>In the help shortcut keys box, route indicates how many proxies were found. Press 'n'. This will connect directly bypassing proxies.<br>If deviation improves then some proxy causes issues.<br>With the IPs you wrote, set ''cl_proxyaddr'' with just one until you find wich one is bad. ''Sb_ignoreproxy'' can exclude it from future updates.
 
[[File:Server shorcut keys.jpg|frame|center|Keyboard shortcuts in ezQuake server browser]]
 
[[File:Server shorcut keys.jpg|frame|center|Keyboard shortcuts in ezQuake server browser]]
 
* '''Network Throttling''': enabled reduces latency in ethernet driver but if you don't exclude cpu0 from ezQuake this will cause alot of deviation.<br>
 
If you have high deviation to any server, disable this to see if connection improves:<br>
 
''Winkey+R > regedit > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile > NetworkThrottlingIndex = ffffffff (Hex value to disable).''
 
<br>If there is no improvement, enable it again ([10-70] range in decimal. default 10).
 
* '''Interrupt Moderation''': if you feel lag even with low ping, disable in ethernet properties.<br>
 
 
  
 
===Network: packet loss===
 
===Network: packet loss===
If you are experiencing packetloss, you can try to connect to a proxy. But if the problem is your own connection, this won't do anything. In this situation it makes sense to duplicate (''dupe'') the network packets sent ''from and to'' the QuakeWorld server, so less packets are loss.<br>
+
First, disable UDP Checksum Offload in ethernet advanced properties to see if it's a driver/ethernet bug. If it's not, turn it back on.<br>
'''Dupe''' commands expect a numeric argument ([1-3] range). The numeric argument represents the number of duplicate packets.<br>
+
If you are experiencing packetloss, you can try to connect to a proxy. But if the problem is your own connection, this won't do anything.<br>
 +
In this situation it makes sense to duplicate/multiply (''dupe'') the network packets sent ''from and to'' the QuakeWorld server, so less packets are lost.<br>
 +
"Dupe" commands expect a numeric argument ([1-3] range). The numeric argument represents the number of duplicate packets.<br>
 
The default is of course '''0''', representing 0 duplicated packets.
 
The default is of course '''0''', representing 0 duplicated packets.
 
* Console > '''setinfo dupe 1''' (This tells the server to send to your client 1 duplicated packet). Set it in ''cl_onload'' alias for permanent use.<br>
 
* Console > '''setinfo dupe 1''' (This tells the server to send to your client 1 duplicated packet). Set it in ''cl_onload'' alias for permanent use.<br>
Line 120: Line 217:
  
 
===Performance: unstable FPS===
 
===Performance: unstable FPS===
If you feel like the game runs smooth for a while but you recognize small disturbing semi-periodic interrupts, those can be caused by background applications. Start by opening Task Manager (ctrl+alt+del) and checking whethe some other processes are consuming the CPU time. <br />
+
If you feel like the game runs smooth for a while but you recognize small disturbing semi-periodic interrupts, those can be caused by background apps. Open Task Manager (ctrl+alt+del) and check whether some other processes are consuming cpu.<br>
You can also reduce the number of processes that run on the startup process of your OS.
 
  
If that doesn't help you, use following tools:
+
* Start > Admin Tools > Event Viewer > Windows Logs: when you get an fps drop, check the time and see if there is a log that matches it.
  
* [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer] - Contains CPU Usage graph where you can track for CPU spikes and display what process is causing them. If it's the "System" process, check for wrongly uninstalled/conflicting firewalls or buggy drivers.
+
* Start > Admin Tools > Task Scheduler > Library: check for tasks from apps you installed that match the Event Viewer logs.
* [http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] - Simple tool to show you which Windows applications are accessing your hard-drive
 
* In Windows 7, you can use Resource Monitor: enter "''resmon''" in start menu search box.
 
  
Here's some other things you can do:
 
 
* Uninstall or disable any RGB software (monitor; mouse; keyboard). It causes issues with the system.
 
* Uninstall or disable any RGB software (monitor; mouse; keyboard). It causes issues with the system.
* Threaded Optimization: enable if you can't keep steady fps with your ezQuake config. Was recommended to disable as a just in case.
+
 
* NVCP > ezQuake profile > Power management mode > '''prefer maximum performance''' (sets gpu at max frequency).<br>If the GPU jumps frequency often it will cause stutters (leads to a small fps drop). You can check this using [https://www.msi.com/Landing/afterburner/graphics-cards MSI Afterburner].<br>If the GPU jumps to boost frequency and down to max frequency often you can lock the gpu at boost frequency.<br>Type gtx or rtx depending on wich GPU you have in the search below (CTRL+F).<br>
+
* [https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer Process  Explorer] can set low priority for I/O and memory of processes with the background priority, reducing the impact on the system.<br>
''Winkey+R > regedit > HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class > CTRL+F > gtx (or) rtx > New DWORD > '''DisableDynamicPstate''' = 1
+
<br>
''
+
 
 
== Advanced Windows Settings ==
 
== Advanced Windows Settings ==
===Interrupt affinity===
+
Do not change anything unless you know what you are doing!
[https://www.techpowerup.com/download/microsoft-interrupt-affinity-tool/ Interrupt affinity]<br>
+
 
You can set devices interrupts to a specific cpu. Mouse readings could improve if you isolate it. Usually the least used cpus are the last ones. With Hyper-Threading you need to assign physical cpus rather than logical ones. USB devices can't bet set individually.<br>In device manager select your mouse then view devices by connection and the branch goes up to XHCI. Select XHCI in the affinity tool.
+
* [https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts-msi-tool.378044/ Message Signaled Interrupts]: Change supported devices to MSI. A negative value means it's working. Do not enable devices if the supported modes field doesn't include MSI. Windows sets interrupt priority of SATA and ethernet to high. Leave the rest as undefined.
  
 
==Other OS==
 
==Other OS==
 
===Linux===
 
===Linux===
 
 
See [[Smooth Quake in Linux]]
 
See [[Smooth Quake in Linux]]
  
 
=== Mac ===
 
=== Mac ===
ezQuake is in general the recomended client, but you can also try fuh if everything fails :P
+
(to be added)<br>
Binary version of Fuhquake > http://dreamolers.binaryriot.org/fuhquake/
+
<br>
 
 
 
==Finding help==
 
==Finding help==
 
[[Discord]]<br>
 
[[Discord]]<br>
[http://www.quakeworld.nu/forum/viewforum.php?id=10 Advanced Configuration] forum in QuakeWorld.nu is a good place to start. Use search.
+
[[Streaming]]<br>
 +
[https://ezquake.com/docs.html ezQuake documentation]<br>
 +
[https://www.quakeworld.nu/ Quakeworld.nu]
  
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]
  
Link to a previous version of this page, obsolete: [[Older Smooth Quake]]
+
Link to a previous version of this page now obsolete: [[Older Smooth Quake]]

Latest revision as of 00:11, 14 November 2024

This page contains solutions and tips for various tearing, lagging, jerky and sucky Quake configurations.
Some of the tunings are for advanced users only. Do not change anything unless you know what you are doing.

Hardware

Sync technologies

  • Vertical syncronization (vsync) should be disabled while playing. It causes input lag.
  • FreeSync and G-Sync/compatible provide a tearless image. It will keep your fps and monitor Hz synced without additional input lag.
  • Black Frame Insertion (BFI) strobes the backlight synchronized with Hz for CRT-like motion clarity (cathode-ray tube).
    Brands use different names for BFI. This adds a bit of input lag and creates a double image effect called crosstalk.
    However, as of 2023, Nvidia launched ULMB2 which looks very promising without these downsides.

    Nvidia ULMB2 announcement
    Optimum Tech ULMB2 comparison

Monitor

Ideally, an IPS panel with at least 240Hz minimum is recommended. But any 144hz or more screen will work great!
Why IPS? TN has bad colors and viewing angles, VA has slow response time and OLED has burn-in risk and is expensive.
The pixels response time must stay inside the refresh cycle (1000/Hz) to avoid blur and take full advantage of the monitor's Hz.
Example: the refresh cycle of a 240hz monitor is 1000/240=4.16ms, if the pixel response time is above that, its going to generate blur.
You can read about the pixel response time for your monitor here. Sort the column by rise/fall time.
Some monitors have a fast enough response time but at the cost of ghosting. Take this into account.
UFO Test shows how your monitor responds so you can select a proper overdrive setting.
Example products: Asus VG279QM Aperture Grille's review.

Mouse

Any modern mouse should be ok.
Most mouse companies add smoothing after a certain DPI level (usually 1800) but a few brands have it disabled for all DPI ranges.
Smoothing is basically input lag. It's added in the firmware, not the sensor.
You should only use native DPI values to avoid interpolation. 1000Hz and DPI of 800 minimum is recommended.
A good mouse should not have problems such as smoothing, angle snapping, jitter and DPI deviation.
Example products: Pixart 3389 sensor (1600 DPI no smoothing added).

Battle(non)sense DPI analysis
Optimum Tech DPI analysis

Keyboard

1000Hz minimum is ideal simply because it has lower input lag than regular 125hz keyboards. Explanation.
Note: with 1000Hz+ mouse and keyboard you should use separate dedicated usb chips or a PCIe USB card.
Example products: EVGA Z20 and Corsair K70 Rapidfire/Champion models are fast but expensive.

Software

Do not change anything unless you know what you are doing!

BIOS

Suggestions:

  • Spread Spectrum: Disable
  • CPU Core Ratio: Sync All Cores
  • PCI-E Native Power Management: Disable
  • ASPM Support: Disable

Windows

Suggestions:

Installation
1. Download original Windows iso with MediaCreationTool from MS and install.
2. Install Visual C.
3. Install all WUpdates including drivers.

Settings

  • Control Panel > Mouse > Pointer Options > Enhance pointer precision > Disable
  • Start > Settings > Accessibility > Keyboard > Sticky Keys > Disable the shortcuts.
  • Start > Settings > Apps > Startup > Disable what you don't need.
  • Start > Settings > Update & Security (W10) > Delivery Optimization > Disable
  • Start > Settings > Windows Update (W11) > Advanced options > Delivery Optimization > Disable
  • Start > Settings > System > Display > Graphics > Change Default Graphics Settings (W11) > GPU Scheduling > Enable
  • Start (W10) > Settings > Privacy > Background apps > Disable
  • GPedit.msc (W11) > Computer Configuration >Administrative Templates > Windows Components > App Privacy > Let Windows apps run in the background > "Enabled" and "Force Deny"
  • GPedit.msc (W11) > Computer Configuration > Administrative Templates > Windows Components > Widgets > Disable
  • MS Edge > ellipses (…) > Settings > System and performance > Continue running BG ext and apps when MS Edge is closed > Disabled
  • Google Chrome > ellipses (...) > Settings > System > Continue running background apps when Google Chrome is closed > Disabled


Services

  • TCP/IP NetBIOS Helper (also in: protocol tcp/ipv4 > advanced settings > wins) > Disabled
  • Windows Search (Indexer is only required if you search your directories and files) > Disabled


Integrity
(by this order in cmdline as admin)

1. DISM /Online /Cleanup-Image /CheckHealth
2. DISM /Online /Cleanup-Image /ScanHealth
3. DISM /Online /Cleanup-Image /RestoreHealth
4. sfc /scannow
5. findstr /c:"[SR]" %windir%\Logs\CBS\CBS.log >"%userprofile%\Desktop\sfcdetails.txt"

NVIDIA

Suggestions:

  • NVCP > Global Settings > OpenGL GPU > Nvidia (to avoid issues with integrated cards being used)

  • NVCP > ezQuake profile > OpenGL GDI compatibility > prefer compatibility

  • NVCP > ezQuake profile > Power management mode > prefer maximum performance

  • NVCP > ezQuake profile > Texture filtering > Negative LOD bias > clamp

  • NVCP > ezQuake profile > Threaded Optimization > Auto (disable this setting if ezQ gets sluggish/stutters)

  • NVCP > ezQuake profile > Vulkan/OpenGL present method > prefer native

  • NvidiaProfileInspector > Other > Maximum Frames Allowed = 1 (Pre-rendered frames for OGL. Low Latency Mode is only for DX)

AMD/ATI

(to be added)

ezQuake

You should have a frametime of 1.3ms with 1001 fps and ping deviation less than 0.6ms.
During certain transitions some minor tearing appears in the middle of the screen but barely noticeable.
You can use multiples of 77 (server updates) that get close to your monitor Hz for a smoother image.
These are the closest fps with the off values for common Hz.

144Hz: 1001 (-7) ; 1155 (+3)
165Hz: 1155 (0) ; 2310 (0)
240Hz: 1925 (+5) ; 2156 (-4) ; 4081 (+1)
280Hz: 2233 (-7) ; 3080 (0)
360Hz: 1078 (-2) ; 2156 (-4)
480Hz: 1925 (+5)
500Hz: 1001 (+1) ; 2002 (+2)
540Hz: 1078 (-2) ; 1617 (-3) ; 2156 (-4)

Network Throttling (NT): This is part of the Multimedia Class Scheduler Service (MMCSS). Either disable NT or use sys_yieldcpu 1.
If ezQ is running on the same cores where network data is processed, sys_yieldcpu 0 will cause deviation (check with hud_net_show 1).
Winkey+R > regedit > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile > NetworkThrottlingIndex = ffffffff in hexadecimal to disable ; [10-70] range in decimal and default is 10.

Launch

GPU (ATI and NVIDIA) sends interrupts to core0. When Windows sends ezQuake cpu load there and it gets high usage, there will be fps drops.
Excluding core0 from ezQuake will keep fps stable in this situation. Windows distributes cpu load but ezQuake only makes use of two cores.
CPU affinity calculator shows you what hexadecimal value you need to set in cmdline after /affinity (replace the word <HexVal> with the value you got from the calculator without all the starting 0x0 zeros). If your cpu has Hyper-Threading you need to exclude cpu0 and cpu1.
Ex.: A CPU with 4 cores and Hyper-Threading (8 threads) the hexadecimal is FC. With 4 cores and no HT the hexadecimal is E.
You can change Windows power plan to High Performance while playing and restore it back to Balanced when finished.
Open command line and type powercfg -l to see their GUID. They should match the ones below.

To switch power plans open notepad and place these 3 lines (without the comment), change game path, and save as .bat extension:

powercfg -s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c (#high performance power profile)
start "" /wait /affinity <HexVal> "<your Quake path and executable, ex.: D:\Quake\ezquake.exe>"
powercfg -s 381b4222-f694-41f0-9685-ff5bb260df2e (#balanced power profile)

If you always use power plan High Performance just right click ezquake.exe > send to > desktop (create shortcut) with this cmdline:

%ComSpec% /C start "" /affinity <HexVal> "ezquake.exe"

Settings

Suggestions:

cl_maxfps 1001                                            (recommended or more ; use at least 770)
cl_newlerp 0.1                                              (smooths projectiles movement)
gl_powerupshells 1                                      (flashing layer over own weapon and players carrying powerups)
gl_clipparticles 1                                          (limits particles close to you, keeps fps stable)
r_particles_count 16384                              (is just a limit, won't affect performance if particles don't reach it)
r_dynamic 2                                                  (1 = cpu ; 2 = gpu: recommended)
gl_caustics 1                                                  (consumes around 300fps even outside liquids)
gl_anisotropy 16                                           (use 1 if fps unstable or with maxfps 2002+ ; Note: fps demanding if enabled)
gl_lerpimages 0                                             (deprecated, do not enable)
gl_texturemode gl_linear_mipmap_linear   (always use mipmap or fps will drop alot)
gl_outline 0                                                    (1 = models ; 2 = world ; 3 = models + world ; Note: fps demanding if enabled)
r_farclip 8192                                                (keeps entities visible at very large distances)
sys_yieldcpu 0                                                (keeps the thread active resulting in lower latency)
gl_multisamples 0                                         (Note: fps demanding if enabled)
vid_framebuffer 0                                          (enable if you want gl_outline for world ; Note: fps demanding if enabled)
vid_gammacorrection 0
vid_grab_keyboard 0                                     (causes several issues if enabled)
vid_hwgammacontrol 2
vid_renderer 1
vid_software_palette 0                                  (enabled causes white pixels if contrast is below 1.1 ; Note: fps demanding if enabled)
vid_usedesktopres 1
s_khz 48
s_linearresample 0
s_desiredsamples 128                                  (increase by power of 2 if sound gets distorted)
gl_hwblend 1                                                 (uses hardware for polyblend)
gl_polyblend 0                                               (Note: fps demanding if enabled)
vid_hwgamma_fps 1


Tools to check performance:

  • timedemo2 <demo> <fps>                     (add 77 as fps after the demo name ; don't use the old timedemo cmd)
  • hud_frametime                                        (combine with hud_frametime_max_reset_interval 2 and hud_performance_average 0)
  • hud_fps                                                     (combine with hud_fps_drop -1 and hud_fps_style 2)
  • hud_net
  • hud_ping                                                   (combine with hud_ping_show_dev 1 and hud_ping_show_pl 1)
  • hud_speed

Mouse Input

Use in_raw 1 (default) for Raw mouse input. This should provide the cleanest mouse input data, as opposed to what SDL input provides with in_raw 0, which might suffer from Windows's built-in acceleration curves and other limitations.

Issues

Network: lag spikes

  • Interrupt Moderation (IM): If you have a setting to define the rate, the higher the value the more delayed packets are.
    Some drivers have a buggy implementation. If you notice issues or want to be safe, disable in ethernet properties.

  • Proxy: with default nQuake settings, the server browser automatically finds proxies. It can connect to a server using more than one.
    Follow these steps to know if one of them is the culprit.

    1. Console > hud_net_show 1 (If "dev" is 1ms+, type cl_proxyaddr and write IPs down)
    2. Server Browser > select a server > press 'enter'

    In the help shortcut keys box, route indicates how many proxies were found. Press 'n'. This will connect directly bypassing proxies.
    If deviation improves then some proxy causes issues.
    With the IPs you wrote, set cl_proxyaddr with just one until you find wich one is bad. Sb_ignoreproxy can exclude it from future updates.
Keyboard shortcuts in ezQuake server browser

Network: packet loss

First, disable UDP Checksum Offload in ethernet advanced properties to see if it's a driver/ethernet bug. If it's not, turn it back on.
If you are experiencing packetloss, you can try to connect to a proxy. But if the problem is your own connection, this won't do anything.
In this situation it makes sense to duplicate/multiply (dupe) the network packets sent from and to the QuakeWorld server, so less packets are lost.
"Dupe" commands expect a numeric argument ([1-3] range). The numeric argument represents the number of duplicate packets.
The default is of course 0, representing 0 duplicated packets.

  • Console > setinfo dupe 1 (This tells the server to send to your client 1 duplicated packet). Set it in cl_onload alias for permanent use.
  • Console > cl_c2sdupe 1 (This tells your client to send to the server 1 duplicated packet). This is a client setting, so it is saved in your cfg file.


Note: Ensure you have at least /rate 50000. To duplicate packets will increase your bandwidth needs. In case your rate is not enough for the number of packets being received/sent, rate cut will happen.

The yellow lines on the netgraph represent rate cut. You can also see the absolute value, 18%

Performance: unstable FPS

If you feel like the game runs smooth for a while but you recognize small disturbing semi-periodic interrupts, those can be caused by background apps. Open Task Manager (ctrl+alt+del) and check whether some other processes are consuming cpu.

  • Start > Admin Tools > Event Viewer > Windows Logs: when you get an fps drop, check the time and see if there is a log that matches it.
  • Start > Admin Tools > Task Scheduler > Library: check for tasks from apps you installed that match the Event Viewer logs.
  • Uninstall or disable any RGB software (monitor; mouse; keyboard). It causes issues with the system.
  • Process Explorer can set low priority for I/O and memory of processes with the background priority, reducing the impact on the system.


Advanced Windows Settings

Do not change anything unless you know what you are doing!

  • Message Signaled Interrupts: Change supported devices to MSI. A negative value means it's working. Do not enable devices if the supported modes field doesn't include MSI. Windows sets interrupt priority of SATA and ethernet to high. Leave the rest as undefined.

Other OS

Linux

See Smooth Quake in Linux

Mac

(to be added)

Finding help

Discord
Streaming
ezQuake documentation
Quakeworld.nu

Link to a previous version of this page now obsolete: Older Smooth Quake