The Witness

The Witness

View Stats:
World Cup Dec 31, 2018 @ 1:00pm
Dev, 60fps then switches to 30fps, but back to 60fps after pressing menu button on then off
Dev, the game runs very smoothly at 60fps except sometimes it drops to 30fps and doesn't move back to 60fps UNLESS I press the menu button on then off AND THEN it instantly goes back to 60fps. The game should not switch down to 30fps permanently if our systems can generally handle 60fps. Having to regularly press the menu button on then off is very immersion breaking. Is there a fix for this?

Windows 10, 1080ti, 4k
< >
Showing 1-12 of 12 comments
Wylie28 Dec 31, 2018 @ 9:07pm 
turn off vsync.
The Invisibl Jan 3, 2019 @ 4:50pm 
Originally posted by Worldcup Academy:
Dev, the game runs very smoothly at 60fps except sometimes it drops to 30fps and doesn't move back to 60fps UNLESS I press the menu button on then off AND THEN it instantly goes back to 60fps. The game should not switch down to 30fps permanently if our systems can generally handle 60fps. Having to regularly press the menu button on then off is very immersion breaking. Is there a fix for this?

Windows 10, 1080ti, 4k

I've not heard of this one before, and I can't reproduce it trivially - can you post your log file (here's how to find it) so we can check the exact same driver & windows version etc. Also let us know what kind of monitor you have (especially whether it's got G-Sync).

It's not the same as what you're seeing, but I've seen some slightly strange (and very rare) frame-rate behavior on high-end Nvidia cards in the past, described briefly over in this thread. It's been a long time since anyone's reported something like that, so I thought Nvidia had taken care of it in their drivers, maybe not though...

Have you changed any of the custom driver settings in the Nvidia Control Panel, or the vsync method in The Witness's Local.variables file? If not, I'm not sure what else to suggest.
World Cup Jan 4, 2019 @ 8:59am 
It really looks like there's something in the game code that every 30 seconds or so is forcing fps down from 60fps to 30fps and is forcing it to stay down at 30fps. And yet pressing the menu button ON then OFF releases it from this 30fps lock and it goes straight back to 60fps until 30 seconds later and the process repeats.

I've never come across a game that behaves this way and I believe it has something to do with the Witness coding. I'm doubtful it's an Nvidia driver issue as no other game behaves this way, but I would appreciate it if you could pass this on to Nvidia in case they can put out a patch that somehow optimizes specifically for this game.

Not doing any customization with Nvidia control panel or Witness variables, although I wish there was a Witness variable to turn off whatever is pushing fps permanently down to 30fps like that.

Turning off vsync is no good as it just looks worse (not smooth). Not a Gsync monitor, just standard LG 4K.

At 30fps the game is way too choppy and unplayable, so pressing the menu button ON then OFF to get it back up to 60fps is the only way to play this game for now.

Just as an aside, I believe Witness is one of the greatest video games ever made. Definitely the best puzzle game ever made in my opinion. Somebody over there must be a Mensa master : ) Hope a Witness 2 is in the works.

UPDATE: per the old thread you referenced, tried putting 'vsync_method 1' in and it did remove whatever was pushing fps permanently down to 30fps, so that's good and it stays at 60fps all the time, however, I am noticing more frequent but very brief stutter as a result.
Last edited by World Cup; Jan 4, 2019 @ 10:17am
The Invisibl Jan 4, 2019 @ 10:31am 
Two things to try:

1. Change over to the "future" beta (which is unlikely to make any difference but can output some extra debugging information to the log):
  • In Library in the Steam client, right click on The Witness and go to:
  • Properties -> BETAS
  • Select "future" from the drop down, there's no password required
  • You should see Steam download a (small) update and in Library the game will now appear as "The Witness [future]"

2. Switch back to the original vsync method (i.e. remove 'vsync_method 1') run the game and wait for the 30fps thing to occur, and then post the log file from that point (here's how to find it). Otherwise I don't have any good info to start trying to reproduce it.
World Cup Jan 4, 2019 @ 3:49pm 
Ok, did exactly as you said and it did drop to 30fps as usual. Here's the log. Fingers crossed you find something with an easy fix.

The Witness - x64 - D3D11 - Final (Steam)
Version 1.063M
Built 2018/01/05 16:13:41 from 172880
Date: 2019/00/04 Time: 15:43:58
Args:
Init app:
Init core:
Init asset loader:
Using unbundled processed asset list
42.85 ms elapsed
50.98 ms elapsed
Init render:
OS: Windows 10, PlatformId 2, Version 10.0, Build 17134
D3D11: fullscreen_mode: requested 1, got 1
D3D11: Enumerating adapters:
- 0 adapter 'NVIDIA GeForce GTX 1080 Ti' (0x10DE, 0x1B06) with 1 outputs.
- 1 adapter 'Intel(R) HD Graphics 3000' (0x8086, 0x122) with 0 outputs.
- 2 adapter 'Microsoft Basic Render Driver' (0x1414, 0x8C) with 0 outputs.
D3D11: Found 1 adapter outputs.
D3D11: SDK version 7
D3D11: Adapter = 'NVIDIA GeForce GTX 1080 Ti'
D3D11: Output device = '\\.\DISPLAY1'
D3D11: VendorId = 0x10DE (NVIDIA)
D3D11: DeviceId = 0x1B06
D3D11: Dedicated Video Memory = 11394048.00 KB
D3D11: Dedicated System Memory = 0.00 KB
D3D11: Shared System Memory = 4146456.00 KB
NVAPI: Driver 417.35
NVAPI: GPU count = 1
NVAPI: GPU(0) has 3584 cores
NVAPI: GPU(0) is a desktop
NVAPI: GPU(0) is discrete
NVAPI: Profile Name: Base Profile
NVAPI: Number of Applications associated with the Profile: 0
NVAPI: Number of Settings associated with the Profile: 3
NVAPI: Is Predefined: true
WIN32: Screen extents: 3840 x 2160
D3D11: Created D3D11 device with feature level 11.0
D3D11: concurrent_resource_creation = true
D3D11: max_texture_size = 16384
D3D11: max_texture_buffer_size = 16384
NVAPI: 1 AFR groups.
D3D11: Automatic profile for this GPU: high
D3D11: Automatic profile for amount of video memory available: high
OS: 134217727 MB of virtual addressing space detected.
GPU-DB entry not found: recommending automatic profile 'high'.
Applying user settings:
render_profile = 2
fullscreen = true
vsync = true
resolution = custom (3840 x 2160)
multisampling = 8x MSAA
shading_quality = 2
reflection_quality = 2
texture_quality = 2
texture_detail = 2
geometry_detail = 2
WIN: Refresh rate = 60.00 Hz (16.67 ms)
win32_create_window(in_windowed_mode = false)
D3D11: hwnd is 01bb0e94
Validating render extents:
Screen aspect ratio is 1.778
Fullscreen
Render extents = 3840 x 2160
11.01 s elapsed
Minimal initialization:
Set up shaders:
Set up shader flags:
1.15 ms elapsed
cache file operations (shaders):
406.32 ms elapsed
409.55 ms elapsed
412.64 ms elapsed
CPU clock frequency: 3.411 GHz
GPU clock frequency: 1.000 GHz
Init catalogs:
17.53 ms elapsed
Load global assets:
263.96 ms elapsed
Init shared resources:
Allocated 512 KB for translucent vertex buffer.
Allocated 128 KB for translucent index buffer.
Loading footsteps.
18.42 ms elapsed
Init game:
Sound Caps:
NON-EMULATED driver.
dwTotalHwMemBytes: 0
dwFreeHwMemBytes: 0
dwPlayCpuOverheadSwBuffers: 0
DSBCAPS for primary buffer:
GetCurrentPosition2: NO
LocHardware: NO
Static: NO
TruePlayPosition: NO
DSBCAPS for fill buffer:
GetCurrentPosition2: YES
LocHardware: NO
Static: NO
TruePlayPosition: NO
validated foam buffer settings: buffer 1 (w/2.0, h/2.0), decals 1, blur quality 2
Load asset dependencies:
17.93 ms elapsed
Load common assets (package):
1.02 s elapsed
Load shared assets (package):
1.57 s elapsed
Init level:
nav_mesh_load_from_file: loading Nav_Mesh from "data/worlds/save/save_nav_data":
32.44 ms elapsed
Loading processed entities.
43.44 ms elapsed
error : Unknown material 'default'
Creating Fog_Marker #252605
Lightmap asset failed to load: 'save_249756_00'
Process queries
24.25 ms elapsed
Loaded 49491 entities.
- 248 cluster entities.
Load campaign:
Loadable_Files::refresh
update_local_files
1.74 ms elapsed
update_cloud_files
0.00 ms elapsed
1.78 ms elapsed
Process queries
0.06 ms elapsed
8.78 ms elapsed
world bounding box (-389.959, -372.600, -226.402) to (365.146, 352.906, 549.984)
Game_Resource_Manager::on_post_load:
Streaming entities:
248 clusters
7538 unclustered entities
1122 dynamic
14.48 ms elapsed
420.44 ms elapsed
Warm up streaming data:
unload_far_away_entities:
0.02 ms elapsed
error : Shader asset failed to load: 'grass_blocker' (F6DB153A)
Loading mesh save/resources/252412
error : Shader asset failed to load: 'grass_blocker' (C98379EC)
Loading mesh save/resources/252412
Lightmap asset failed to load: 'save_951_00'
Lightmap asset failed to load: 'save_246050_00'
Lightmap asset failed to load: 'save_246052_00'
Lightmap asset failed to load: 'save_249398_00'
Lightmap asset failed to load: 'save_246051_00'
7.01 s elapsed
10.19 s elapsed
22.28 s elapsed
World Cup Jan 4, 2019 @ 4:38pm 
Quick summary of observations:

(1) Without vsync_method 1, it runs butter smooth at 60fps for around 30 seconds, then a brief stutter kicks it down to 30fps where it stays there UNTIL I press the menu button ON then Off and it instantly clears something and allows the game to continue to run at butter smooth 60fps before it happens again and again every 30 seconds or so.

(2) With vsync_method 1 on, it always stays at 60fps BUT there's continuous instantaneous stutter (every couple seconds) that continuously occurs so it's not practical.

Without a better fix I'd have to go with option (1) above (press menu button On then Off to clear the 30fps lock every 30 seconds or so). The game looks beautiful in 4K at 60fps, and noticeably more downgraded at 1080p, so I'd definitely want to stay at 4K (i.e. 3840x2160) and 60fps.
Last edited by World Cup; Jan 4, 2019 @ 4:42pm
The Invisibl Jan 4, 2019 @ 5:06pm 
Well there's nothing unusual in your log, and I can't repro it with the same GPU/Driver/Windows version here :\

Out of interest, does the same thing happen regardless of settings? e.g. if you run it with no MSAA, or at low settings.

I'm assuming you're checking the frame rate with the built in display ( by pressing ']' ). When it gets stuck at 30fps, what does it say for the separate GPU & CPU times on the second line? Also if you're stand still, does that display stay white, or does it flash red/blue?
World Cup Jan 4, 2019 @ 10:38pm 
I believe there's something in the Witness default code that says 'if framerate ever dips below 60fps (e.g. 58fps), then just lock fps down to 30fps and hold'. It's not like its fluctuating around 30fps, it's EXACTLY holding at 30fps.

This artifical 30fps lock can be released by pressing the Witness menu button and then the game can be played again at butter smooth 60fps, until the next brief bump slightly below 60fps.

Instead of allowing the framerate to fluctuate naturally, the default Witness code appears to want the game to be played at EXACTLY 30fps if 60fps cannot be maintained at all times. I think that needs to change and presumably would be a very simple patch fix.

The unusual Witness default code is further evidenced by inserting 'vsync_method 1' which removes the artificial forced reduction to 30fps (but unfortunately whatever 'method 1' is it too is not very stable as it introduces frequent brief stutters).

I did try to drop the settings - i.e. no MSAA, lower res, etc etc and it made no difference. Any slight bump below 60fps and the default Witness code would say uh-oh time to lock things down at exactly 30fps henceforth. I think it's worth putting a patch out to fix that code.
Last edited by World Cup; Jan 4, 2019 @ 10:41pm
Wylie28 Jan 5, 2019 @ 11:18am 
Originally posted by Worldcup Academy:
I believe there's something in the Witness default code that says 'if framerate ever dips below 60fps (e.g. 58fps), then just lock fps down to 30fps and hold'. It's not like its fluctuating around 30fps, it's EXACTLY holding at 30fps.

This artifical 30fps lock can be released by pressing the Witness menu button and then the game can be played again at butter smooth 60fps, until the next brief bump slightly below 60fps.

Instead of allowing the framerate to fluctuate naturally, the default Witness code appears to want the game to be played at EXACTLY 30fps if 60fps cannot be maintained at all times. I think that needs to change and presumably would be a very simple patch fix.

The unusual Witness default code is further evidenced by inserting 'vsync_method 1' which removes the artificial forced reduction to 30fps (but unfortunately whatever 'method 1' is it too is not very stable as it introduces frequent brief stutters).

I did try to drop the settings - i.e. no MSAA, lower res, etc etc and it made no difference. Any slight bump below 60fps and the default Witness code would say uh-oh time to lock things down at exactly 30fps henceforth. I think it's worth putting a patch out to fix that code.

That is normal v-sync behaviour. If you arent going above 60 fps you have vsync on. It might not be through the game. Check your GPU drivers.
World Cup Jan 5, 2019 @ 5:26pm 
Normal v-sync behaviour? Of the hundreds of games I have, NONE of them artifically pushes down and locks framerate at 30fps when the game otherwise starts at and is playable at 60fps (remember, a simple press of the Witness menu button releases the artifical 30fps lock and the game is now playing again at butter smooth 60fps).

If pressing the Witness menu button can release the artificial 30fps lock, there has to be a smarter implementation to allow the game to continue play at 60fps. Period. That should be a very easy fix.

Devs, if pressing the menu button releases the artificial 30fps lock, please put a patch out that implements this more smartly without having to press the menu button.

I think for now, inserting 'vsync_method 1' in the relevant file is the closest fix where it locks framerate permanently at 60fps and no need to ever press the menu button (there's occasional very brief stutter but pretty good overall).



On a separate note, GPU drivers are always up to date, that's not a factor here.

Turning v-sync off is a non-starter even though the fps never dips below 60fps when doing so (it actually hovers around 100fps) due to way too much variation that comes across looking like frequent stutter.
Last edited by World Cup; Jan 5, 2019 @ 6:41pm
Wylie28 Jan 6, 2019 @ 8:54am 
Originally posted by Worldcup Academy:
Normal v-sync behaviour? Of the hundreds of games I have, NONE of them artifically pushes down and locks framerate at 30fps when the game otherwise starts at and is playable at 60fps (remember, a simple press of the Witness menu button releases the artifical 30fps lock and the game is now playing again at butter smooth 60fps).

If pressing the Witness menu button can release the artificial 30fps lock, there has to be a smarter implementation to allow the game to continue play at 60fps. Period. That should be a very easy fix.

Devs, if pressing the menu button releases the artificial 30fps lock, please put a patch out that implements this more smartly without having to press the menu button.

I think for now, inserting 'vsync_method 1' in the relevant file is the closest fix where it locks framerate permanently at 60fps and no need to ever press the menu button (there's occasional very brief stutter but pretty good overall).



On a separate note, GPU drivers are always up to date, that's not a factor here.

Turning v-sync off is a non-starter even though the fps never dips below 60fps when doing so (it actually hovers around 100fps) due to way too much variation that comes across looking like frequent stutter.

If you cant maintain 60 brings the game down to 30. What you start at is irrelevant.
The Invisibl Jan 6, 2019 @ 8:20pm 
Originally posted by Worldcup Academy:
I believe there's something in the Witness default code that says 'if framerate ever dips below 60fps (e.g. 58fps), then just lock fps down to 30fps and hold'.

There isn't anything in the code like that. The d3d Present code is very simple, we either request a sync inteval of 1 (if vsync is on) or 0 (if vsync is off) and that's it.

You said it never dips below 60 when vsync is off. Well then it wouldn't ever dip below 60 with vsync on either, so even if that code existed (it doesn't) it wouldn't trigger.

I still have no idea what's causing this. Again, when it gets stuck in the 30fps state, what do the individual CPU and GPU timings say?
Last edited by The Invisibl; Jan 6, 2019 @ 9:03pm
< >
Showing 1-12 of 12 comments
Per page: 1530 50