One piece of Cycles-X feedback.
Maybe make the viewport update more often during the first few samples?
For example, when viewport rendering is enabled and you’re moving around or changing parameters, it updates often (aims for 60 fps?), which is good. However, once you stop moving, viewport updates are reduced to maybe once per second or two. I understand this is to increase performance. However I believe more frequent viewport updates for the initial few seconds is more important than sampling performance. And this is because when you stop moving around or changing parameters, you’re left with a 1 or 2 sample image. This 1 or 2 sample image is good for making large changes to parameters, but due to the low sample count producing a lot of noise, you have to wait for more samples to make decisions on small changes, and the wait of 1 to 2 seconds for the next viewport update to show up is annoying.
So maybe viewport update speed could be increased or maybe the update speed for the viewport can change? Update 1/8th a second for the first second, update 1/4th a second for the next second, and proceed until you reach the 1 or 2 seconds between updates.
Note: The issue I’m talking about is most noticeable of you set your viewport sample count to “0” (infinite) with viewport denoising (OptiX or OIDN) and with scenes that are semi-complex (I used a SSS shader to create the “semi-complex” scene). If the scene is two simple (hundreds of samples per second), the issue does not exist. If the scene is too complex (1 sample per second), the “issue” can be mistaken for the rendering performance of the scene.
Also, here’s a video demonstrating the issue.
Note: Some of the visual artifacts/changes seen in this video is caused by compression (I wanted to keep the video as small as possible to let it load quickly). But the issue can still be seen.
Edit: I see this might be planned. In /intern/cycles/integrator/render_scheduler.cpp
at line 813
there is a TODO that would work around this (assuming I understand it correctly):
/* Avoid excessive denoising in viewport after reaching a certain amount of samples. */
/* TODO(sergey): Consider making time interval and sample configurable. */
delayed = (num_samples_finished >= 20 && (time_dt() - state_.last_display_update_time) < 1.0);
Adjusting the num_samples_finished >= 20
value to something higher helps reduce the issue for me with my test scenes. Just some information for people who compile Blender their self that may want to “fix” this issue.
There are also some values in that same file at line 634
that can be adjusted to configure viewport update speed. Adjusting some of these can also help with the issue.
if (num_rendered_samples < 4) {
return 0.1;
}
if (num_rendered_samples < 8) {
return 0.25;
}
if (num_rendered_samples < 16) {
return 0.5;
}
if (num_rendered_samples < 32) {
return 1.0;
}
return 2.0;
}
Here are the values I changed too. Not suitable for every scene or all hardware configurations, and I might continue to tweak it, but it works better for me in specific scenes.
delayed = (num_samples_finished >= 256 && (time_dt() - state_.last_display_update_time) < 1.0);
if (num_rendered_samples < 64) {
return 0.1;
}
if (num_rendered_samples < 128) {
return 0.25;
}
if (num_rendered_samples < 256) {
return 0.5;
}
if (num_rendered_samples < 512) {
return 1.0;
}
return 2.0;
}
Edit 2: I looked at the code some more. Some of things I said I want in Cycles-X is already in Cycles-X. But the default values don’t work well for specific scenes with my hardware.