Difference between revisions of "Smooth Quake"
m ((re)moved some adjustments and changed some information text) |
|||
Line 53: | Line 53: | ||
2. Install [https://www.techpowerup.com/download/visual-c-redistributable-runtime-package-all-in-one/ Visual C].<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> | 3. Install all WUpdates including drivers.<br> | ||
− | |||
Settings | Settings | ||
Line 65: | Line 64: | ||
* Control Panel > Mouse > '''Pointer Options''' > Disable 'Enhance pointer precision' and leave pointer speed at 6th notch. | * Control Panel > Mouse > '''Pointer Options''' > Disable 'Enhance pointer precision' and leave pointer speed at 6th notch. | ||
− | |||
− | |||
<br> | <br> | ||
Services<br> | Services<br> | ||
Line 93: | Line 90: | ||
* NVCP > ezQuake profile > Texture filtering > Negative LOD bias > '''clamp''' | * NVCP > ezQuake profile > Texture filtering > Negative LOD bias > '''clamp''' | ||
<big></big> | <big></big> | ||
− | * NVCP > ezQuake profile > Threaded Optimization > '''on''' (2 cores | + | * NVCP > ezQuake profile > Threaded Optimization > '''on''' (2 cores. Recommended. If image stutters then disable) / '''off''' (1 core) |
<big></big> | <big></big> | ||
* NVCP > ezQuake profile > Vulkan/OpenGL present method > '''prefer native''' | * NVCP > ezQuake profile > Vulkan/OpenGL present method > '''prefer native''' | ||
Line 126: | Line 123: | ||
''gl_clipparticles 0''<br> | ''gl_clipparticles 0''<br> | ||
''r_particles_count 16384'' (is just a limit, won't affect performance if particles don't reach it)<br> | ''r_particles_count 16384'' (is just a limit, won't affect performance if particles don't reach it)<br> | ||
− | ''r_dynamic'' (1 = cpu ; 2 = gpu)<br> | + | ''r_dynamic'' (1 = cpu ; 2 = gpu. Recommended)<br> |
''gl_anisotropy 16''<br> | ''gl_anisotropy 16''<br> | ||
''gl_lerpimages 0''<br> | ''gl_lerpimages 0''<br> | ||
Line 132: | Line 129: | ||
''gl_brush_polygonoffset 0''<br> | ''gl_brush_polygonoffset 0''<br> | ||
''r_farclip 8192''<br> | ''r_farclip 8192''<br> | ||
− | ''sys_yieldcpu'' (system dependent)<br> | + | ''sys_yieldcpu'' (system dependent but usually 0 is recommended, will give the least latency)<br> |
''vid_renderer 1''<br> | ''vid_renderer 1''<br> | ||
''vid_software_palette 0''<br> | ''vid_software_palette 0''<br> | ||
Line 188: | Line 185: | ||
* 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. | ||
− | * [https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer Process Explorer] | + | * [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> |
− | |||
<br> | <br> | ||
Line 208: | Line 204: | ||
* vid_software_palette 1 (Is necessary to keep the correct gamma and details of textures on the stream but it will reduce performance.<br>If you need to disable it to get stable fps for play+stream , add a color correction filter in OBS with gamma 0.5) | * vid_software_palette 1 (Is necessary to keep the correct gamma and details of textures on the stream but it will reduce performance.<br>If you need to disable it to get stable fps for play+stream , add a color correction filter in OBS with gamma 0.5) | ||
− | * gl_gamma 0.7 (If the stream is still too dark with software_palette 1, add OBS gamma 0. | + | * gl_gamma 0.7 (If the stream is still too dark with software_palette 1, add OBS gamma 0.2) |
===YouTube=== | ===YouTube=== | ||
Line 214: | Line 210: | ||
You can avoid this by creating a new streaming key and manually select 1440p and activate 60 fps.<br> | You can avoid this by creating a new streaming key and manually select 1440p and activate 60 fps.<br> | ||
Stream at 1080p and pick 1440p to watch it without degraded quality.<br> | Stream at 1080p and pick 1440p to watch it without degraded quality.<br> | ||
− | Set a bitrate of 10000 in OBS for good quality. | + | Set a bitrate of 10000 in OBS for good quality. If you have enough bandwidth, set 30000 for perfect quality. |
[[File:YT-settings-1440p.png|thumb|center|YT-settings-1440p-trick]] | [[File:YT-settings-1440p.png|thumb|center|YT-settings-1440p-trick]] | ||
<big></big> | <big></big> | ||
Line 226: | Line 222: | ||
* [https://riverar.github.io/insiderhubcontent/memory_compression.html Memory Compression]: Although it's recommended there might be situations where de/compress causes latency. Your mileage may vary.<br>Start > Windows PowerShell (as admin):<br>> Get-MMAgent<br>> Disable-MMAgent -mc<br>> Enable-MMAgent -mc<br> | * [https://riverar.github.io/insiderhubcontent/memory_compression.html Memory Compression]: Although it's recommended there might be situations where de/compress causes latency. Your mileage may vary.<br>Start > Windows PowerShell (as admin):<br>> Get-MMAgent<br>> Disable-MMAgent -mc<br>> Enable-MMAgent -mc<br> | ||
<big></big> | <big></big> | ||
− | * Telemetry: This doesn't cause performance issues but if you want to completely disable it, this method is safe and reversible.<br>- Winkey+R > services.msc > Connected user experiences and telemetry > Disable (default auto)<br>- Task Scheduler Library > Microsoft > Windows > Customer Experience Improvement Program > Disable all tasks<br>- HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows > New Key > DataCollection > New DWORD (32-bit) > AllowTelemetry = 0<br>(Grays out the selectable options in Settings > Privacy > Diagnostics & feedback > Diagnostic data) | + | * [https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts-msi-tool.378044/ Message Signaled Interrupt]: 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 to high. Leave the rest as undefined. |
+ | <big></big> | ||
+ | * Telemetry: This doesn't cause performance issues but if you want to completely disable it, this method is safe and reversible.<br>- Winkey+R > services.msc > Connected user experiences and telemetry > Disable (default auto)<br>- Task Scheduler Library > Microsoft > Windows > Autochk / Customer Experience Improvement Program > Disable all tasks<br>- HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows > New Key > DataCollection > New DWORD (32-bit) > AllowTelemetry = 0<br>(Grays out the selectable options in Settings > Privacy > Diagnostics & feedback > Diagnostic data) | ||
<br> | <br> | ||
Revision as of 08:00, 10 February 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 GSync/compatible provide a tearless image. It will keep your fps and monitor Hz synced without additional input lag.
- Motion Blur Reduction (MBR) strobes the backlight synchronized with Hz for CRT-like motion clarity (cathode-ray tube).
Brands use different names for MBR. 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 de 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.
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.
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 (more info) but a few brands have it disabled for all DPI ranges.
Smoothing is basically input lag.
You should only use native DPI values to avoid interpolation. 1000Hz and DPI of 800 minimum is recommended.
A good sensor 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
- Extreme Memory Profile (XMP): Enable
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
- Start > Settings > Update & Security > Delivery Optimization > Disable
- Start > Settings > Privacy > Background apps > Disable all but Windows Security and NVCP.
- Start > Settings > Apps > Startup > Disable what you don't need.
- Start > Settings > Accessibility > Keyboard > Disable shortcuts of Sticky Keys.
- Control Panel > Mouse > Pointer Options > Disable 'Enhance pointer precision' and leave pointer speed at 6th notch.
Services
(disable what you don't use)
- TCP/IP NetBIOS Helper (also in: protocol tcp/ipv4 > advanced settings > wins)
- Touch Keyboard and Handwriting Panel Service
- Windows Search (Indexer is only required if you search your directories and files)
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 > ezQuake profile > OpenGL GDI compatibility > prefer compatibility
- NVCP > ezQuake profile > Power management mode > prefer maximum performance (sets gpu at max frequency).
- NVCP > ezQuake profile > Texture filtering > Negative LOD bias > clamp
- NVCP > ezQuake profile > Threaded Optimization > on (2 cores. Recommended. If image stutters then disable) / off (1 core)
- NVCP > ezQuake profile > Vulkan/OpenGL present method > prefer native
- NvidiaProfileInspector > Other > Maximum Frames Allowed = 1 (Pre-rendered frames for OGL. Low Latency Mode is for DX)
AMD/ATI
(to be added)
ezQuake
Launch
You can change Windows power plan to High Performance while playing and restore its value back to Balanced when finished.
Open command line and type powercfg -l to see their GUID. They should match the ones below.
Windows manages interrupts depending on cpu load but usually they go to cpu0. Excluding it for ezQuake will stabilize frametime.
If your cpu has Hyper-Threading you need to exclude cpu0 and cpu1. 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).
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:\QW\ezquake>"
powercfg -s 381b4222-f694-41f0-9685-ff5bb260df2e (#balanced power profile)
Note: The following might not be up-to-date!! (reason: allocated memory variance)
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. The Basics of Page Faults.
Settings
Suggestions:
cl_maxfps 1001 (minimum recommended)
cl_newlerp 0.1 (smooths projectiles movement)
gl_clipparticles 0
r_particles_count 16384 (is just a limit, won't affect performance if particles don't reach it)
r_dynamic (1 = cpu ; 2 = gpu. Recommended)
gl_anisotropy 16
gl_lerpimages 0
gl_texturemode gl_linear_mipmap_linear (do not use gl_nearest or gl_linear without mipmap, they can take a big hit on fps)
gl_brush_polygonoffset 0
r_farclip 8192
sys_yieldcpu (system dependent but usually 0 is recommended, will give the least latency)
vid_renderer 1
vid_software_palette 0
s_khz 48
s_linearresample 0
s_desiredsamples 512
gl_hwblend 1
vid_hwgamma_fps 77
Tools to check performance:
- timedemo2 <demo> <fps> (add 77 as fps after the demo name ; bind a key with "disconnect" to stop it anytime ; don't use 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
- 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
- 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.
- Network Throttling (NT): If ezQ is running on the same cores where ethernet is sending interrupts, sys_yieldcpu 0 will cause deviation.
You can disable NT placing ffffffff as hexadecimal value in the path below.
Winkey+R > regedit > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile > NetworkThrottlingIndex = [10-70] range in decimal and default is 10 ; ffffffff to disable.
You can keep both settings if you exclude cpu0 (see ezQ launch section) and Receive Side Scaling (RSS) queue is set to 1.
If you want RSS queue >1 then exclude corresponding cpus or set sys_yieldcpu 1 or disable NT.
- 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.
As an example, here are the settings tested with Xperf for the ethernet driver (ndis.sys). Values are shown in microseconds (usecs).
NT off causes more latency. IM rate is minimum.
A good combination for these values is NT 70 + IM off or minimum.
Network: packet loss
First, disable UDP checksum offload to see if it's a driver/ethernet bug. If 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 (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.
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.
Streaming
If you have an Ampere card like the 40-series, use AV1. For 10-series or more, use NVENC/HEVC.
With a 4th generation cpu you should have no issues.
OBS settings
- Output > Video Encoder: AV1/HEVC/H264 ; Rate Control: CBR ; Bitrate: YT/Twitch limit ; Keyframe interval: 1s ; Preset: P7 ; Tuning: High Quality ; Multipass Mode: Two Passes (Full Resolution) ; Profile: Main ; Look-ahead: off ; Psycho Visual Tuning: on ; GPU: 0 ; Max B-frames: 0
- Video > 60 fps
- Advanced > Video > Color Format: NV12 ; Color Space: sRGB ; Color Range: Full
- Sources > Game Capture > Properties: Limit capture framerate
ezQuake settings
- vid_software_palette 1 (Is necessary to keep the correct gamma and details of textures on the stream but it will reduce performance.
If you need to disable it to get stable fps for play+stream , add a color correction filter in OBS with gamma 0.5)
- gl_gamma 0.7 (If the stream is still too dark with software_palette 1, add OBS gamma 0.2)
YouTube
YT transcodes your videos if they are not 1440p.
You can avoid this by creating a new streaming key and manually select 1440p and activate 60 fps.
Stream at 1080p and pick 1440p to watch it without degraded quality.
Set a bitrate of 10000 in OBS for good quality. If you have enough bandwidth, set 30000 for perfect quality.
Twitch
(to be added)
Advanced Windows Settings
Do not change anything unless you know what you are doing!
- Memory Compression: Although it's recommended there might be situations where de/compress causes latency. Your mileage may vary.
Start > Windows PowerShell (as admin):
> Get-MMAgent
> Disable-MMAgent -mc
> Enable-MMAgent -mc
- Message Signaled Interrupt: 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 to high. Leave the rest as undefined.
- Telemetry: This doesn't cause performance issues but if you want to completely disable it, this method is safe and reversible.
- Winkey+R > services.msc > Connected user experiences and telemetry > Disable (default auto)
- Task Scheduler Library > Microsoft > Windows > Autochk / Customer Experience Improvement Program > Disable all tasks
- HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows > New Key > DataCollection > New DWORD (32-bit) > AllowTelemetry = 0
(Grays out the selectable options in Settings > Privacy > Diagnostics & feedback > Diagnostic data)
Other OS
Linux
Mac
(to be added)
Finding help
Discord
ezQuake documentation
quakeworld.nu
Link to a previous version of this page now obsolete: Older Smooth Quake