April 20, 2021, 08:56 (GMT) |
Cycles: Allow resetting convergence flag of pixel This way it is possible to resume rendering with lower adaptive sampling threshold. Done as an extra argument to the convergence check function instead of always re-calculating the flag based on the following ideas: - The reset flag is the same for all threads, so it should not harm coherency of GPU threads. - Reset is not always used, and in cases when it is not used it is cheaper to check boolean flag than to calculate the error norm. So far again should be no functional changes, preparing for the new development in the viewport. |
April 20, 2021, 08:56 (GMT) |
Cycles: Pass adaptive sampling threshold to filter kernel Before the threshold was used from the KernelIntegrator, which makes it very tricky to modify on runtime. The only other place in the kernel which was checking for the threshold is passes write code, which should be possible to only check for existence of passes. The change moves forward with the allowance of progressively lowering the noise floor in the viewport render. So far should be no functional changes. |
April 16, 2021, 14:54 (GMT) |
Cycles: Increase adaptive sampling step from 4 to 16 This gives measurable (~10%) speedup in very simple scenes when enabling adaptive sampling (allowing GPU to render much more samples in parallel while image is still noisy) without penalty on a more complex files. |
April 16, 2021, 14:34 (GMT) |
Cycles: Add active pixels "overlay" option The purpose of the change is to make it visible which pixels are being sampled when adaptive sampling is enabled. This is super useful for development in the area to see which pixels are considered noisy. It also will be much useful for the upcoming development of the idea of progressively decreasing noise floor in the viewport. This is also something what could be useful for lighting artists, TDs, and other production folks to investigate shots. So in the long run it will be very nice to make this is an official option. There are two main stoppers from making the option available: - The color of "overlay" is hardcoded. - When navigating in viewport all the pixels are changed, so users are "attacked" by this bright fullscreen overlay. Those are solvable issues, but is not something what is the highest priority at this time. So, keeping all this in mind the decision on the interface goes as following: - This is an option which is only enabled when Developer UI and Cycles Debug options are enabled in the User Preferences. - This is an option in the viewport shading, as it is only affecting the viewport. In the future we will always display this option, regardless of the user preferences. The BlenderSession and BlenderSync now are aware of the Developer UI, which is another good thing I'd say because then the debug panel handling can happen via the BlenderSession. |
April 16, 2021, 14:34 (GMT) |
Cycles: Make samples count pass available for viewport It is very useful for development purposes, but is also something what gives troubleshooting tools for lighting artists. Only available when viewport is in rendered mode. |
April 16, 2021, 14:34 (GMT) |
Cycles: Move BVH debug passes to the end of the enum Makes it so enabling Cycles kernel debug does not change pass IDs, making it so IDs used in the viewport pass enum are always reliable (before enabling kernel debug could break the viewport passes). Maybe these debug passes needs to be removed, since they are not reliable in a sense that not all compute devices will provide them. We also don't really develop BVH anymore, so they kind of becoming obsolete. |
April 16, 2021, 13:57 (GMT) |
Cycles: Remove meaningless const qualifier of return type const qualifier for scalar return type is meaningless from the compiler and semantic point of view: is not like this forces assigned to only happen to a const scalar. Solves CUDA compiler warning in the console. |
April 16, 2021, 13:24 (GMT) |
Cycles: Correct adaptive filter sample alignment There was a difference in the meaning of the sample passed to the AdaptiveSampling::align_samples. Based on the logic of the render scheduler, this is a 0-based sample index which is not yet sampled. Fixes missing filtering in certain conditions. |
April 16, 2021, 13:23 (GMT) |
Fix GPU adaptive sampling being broken, should copy in sync with the queue |
April 16, 2021, 13:11 (GMT) |
Cycles: Remove unused and confusing fields - Remove adaptive sampling from Film. The adaptive sampling is configured via Integrator. Having unused adaptive sampling in Film is rather confusing. - Remove unused start_sample from KernelIntegrator. It is unused, and with the idea of making it possible to resume rendering with adaptive sampling the meaning of a single start sample becomes unclear. |
April 16, 2021, 12:54 (GMT) |
Cycles: implement transparent shadow continuation when max hits is reached Only the CPU/Embree code is fully correct, for GPU it is not currently guaranteed to find the N closest hits (although it is likely). That will be solved next. Pabellon renders identical to master with this change. |
April 15, 2021, 14:19 (GMT) |
Cycles: Fix adaptive sampling on GPU after recent changes The condition was inverted. |
April 15, 2021, 14:19 (GMT) |
Cycles: Remove unused return result of adaptive filtering |
April 15, 2021, 11:07 (GMT) |
Cycles: Fix compilation error after recent Device changes |
April 15, 2021, 10:54 (GMT) |
Cycles: Implement early stopping for adaptive sampling Stop scheduling path tracing jobs one all pixels did converge. Since the convergence check is done for the entire big tile it is not that visible with regular noise level settings and number of samples. However, still feels like this is proper thing to do, especially for the idea of gradually decreasing error threshold for the viewport rendering. For the GPU there is a single int memory allocated for every invocation of convergence check kernel. Not sure if it gives any measurable difference and whether we'd better avoid such tiny allocations. |
April 15, 2021, 10:53 (GMT) |
Cycles: Fix denoising artifacts with adaptive sampling Need to make sure denoiser input is has consistent number of samples for all pixels, otherwise denoiser might see some areas too dark when they converged. The output of denoiser needs to be scaled back, so that when combined pass is scaled with number of samples n display on or pixel buffer request it gives proper result. While this is technically slower than the previous state of the branch, the number of computations is similar to the master branch. We can optimize some areas: for example by multi-threading OIDN passes creation. Additionally, enable handling of all passes for OptiX. Some code was disabled during development and was never enabled back :( |
April 15, 2021, 10:48 (GMT) |
Cycles: use stream in CUDA queue Any device memory copying and zeroing is also done as part of the stream so we can queue such operations without synchronizing. |
April 15, 2021, 10:48 (GMT) |
Cycles: make device queues GPU specific |
April 15, 2021, 08:07 (GMT) |
Cycles: Fix tests compilation error after recent changes |
April 15, 2021, 07:26 (GMT) |
Cycles: Rework denoiser integration The goal is to allow OptiX denoiser when rendering with CPU or CUDA. The Denoiser now can request device to be created if none of the devices configured for rendering is suitable for denoising. This allowed to remove some tricky logic from BlenderSync. Another related change is the move of denoiser parameters from Session to Integrator, allowing to change denoiser settings without doing full session re-creation. Known remaining aspects: - If CUDA is used for rendering try to use same physical device for OptiX denoising. - Optimize data transfer when different Device is used for denoising. - Would also be nice to not restart rendering when it is only start denoising sample is changed. |
|