Page MenuHome

Fixes T91632 by stopping the sample correlation between dimensions which was causing rendering artifacts on simple scenes.
ClosedPublic

Authored by William Leeson (leesonw) on Sep 23 2021, 11:23 AM.

Details

Summary

Fix T91632: Stops the sample correlation between dimensions which was causing rendering artefacts on simple scenes.

This is done by increasing the amount of jitter the Cranley Patterson Rotation is allowed to add. Also, it uses the y dimension of the of the sample table for 1D sampling which causes further decorrelation between dimensions. As an additional measure the x and y dimensions are swapped randomly to provide further decorrelation.

Diff Detail

Repository
rB Blender

Event Timeline

William Leeson (leesonw) requested review of this revision.Sep 23 2021, 11:23 AM
William Leeson (leesonw) created this revision.
William Leeson (leesonw) retitled this revision from Fixes:T91632 Stops the correlation between dimensions which was causing rendering artifacts on simple scenes. This is done by increasing the amount of jitter the Cranley Patterson Rotation is allowed to add. Also uses the y dimension of the... to Fixes T91632 by stopping the sample correlation between dimensions which was causing rendering artifacts on simple scenes..Sep 23 2021, 11:26 AM
William Leeson (leesonw) edited the summary of this revision. (Show Details)

If you are posting Diffs here regularly [which I think you are/will], it might be good to look into ARC
https://wiki.blender.org/wiki/Tools/CodeReview#Use_Arcanist

Also please check https://wiki.blender.org/wiki/Style_Guide/Commit_Messages

Added more variation by swopping x and y on odd dimensions.

I see I got the fix format wrong so I'll rectify that. I used arc to submit this diff. Am I doing any thing else wrong? Please let me know as I am pretty new to arc so it's highly possible :-/

William Leeson (leesonw) edited the summary of this revision. (Show Details)
Brecht Van Lommel (brecht) requested changes to this revision.Sep 23 2021, 3:25 PM

Doing the Cranley-Patterson on the full pattern instead of the grid seems ok.

When this is committed all reference renders will need to be updated along with it. That means committing those the svn repository first, and then right that finishes after pushing the git code, so that the buildbot build tests with the right reference renders.

intern/cycles/kernel/kernel_jitter.h
152–157

It's unclear to me what this swapping accomplishes. Does it result in some visible difference in renders?

PathTraceDimension has all the 2D sample patterns on even dimensions, as far as I can tell this would have no effect then.

This revision now requires changes to proceed.Sep 23 2021, 3:25 PM

Removed swapping x and y on odd/even dimensions.

William Leeson (leesonw) marked an inline comment as done.Sep 24 2021, 9:29 AM
William Leeson (leesonw) added inline comments.
intern/cycles/kernel/kernel_jitter.h
152–157

I have removed this for now as it is not necessary to fix this.

William Leeson (leesonw) marked an inline comment as done.EditedSep 24 2021, 9:34 AM

I did a BLENDER_TEST_UPDATE=1 ctest -R cycles cpu and all the following files will change in the SVN repo (quite a few)
M render/bake/cycles_renders/bake_bevel.png
M render/bake/cycles_renders/bake_split_faces.png
M render/bsdf/cycles_renders/anisotropic_ashikhmin.png
M render/bsdf/cycles_renders/anisotropic_ashikhmin_rough.png
M render/bsdf/cycles_renders/anisotropic_beckmann.png
M render/bsdf/cycles_renders/anisotropic_beckmann_rough.png
M render/bsdf/cycles_renders/anisotropic_ggx.png
M render/bsdf/cycles_renders/anisotropic_ggx_rough.png
M render/bsdf/cycles_renders/diffuse.png
M render/bsdf/cycles_renders/glass_beckmann.png
M render/bsdf/cycles_renders/glass_beckmann_rough.png
M render/bsdf/cycles_renders/glass_ggx.png
M render/bsdf/cycles_renders/glass_ggx_rough.png
M render/bsdf/cycles_renders/glass_sharp.png
M render/bsdf/cycles_renders/glossy_ashikhmin.png
M render/bsdf/cycles_renders/glossy_ashikhmin_rough.png
M render/bsdf/cycles_renders/glossy_beckmann.png
M render/bsdf/cycles_renders/glossy_beckmann_rough.png
M render/bsdf/cycles_renders/glossy_ggx.png
M render/bsdf/cycles_renders/glossy_ggx_rough.png
M render/bsdf/cycles_renders/glossy_multiscatter_ggx.png
M render/bsdf/cycles_renders/glossy_multiscatter_ggx_rough.png
M render/bsdf/cycles_renders/glossy_roughness_texture.png
M render/bsdf/cycles_renders/glossy_sharp.png
M render/bsdf/cycles_renders/principled_coat.png
M render/bsdf/cycles_renders/principled_default.png
M render/bsdf/cycles_renders/principled_emission_alpha.png
M render/bsdf/cycles_renders/principled_metallic.png
M render/bsdf/cycles_renders/principled_metallic_aniso.png
M render/bsdf/cycles_renders/principled_subsurface.png
M render/bsdf/cycles_renders/principled_transmission.png
M render/bsdf/cycles_renders/principled_transmission_ggx.png
M render/bsdf/cycles_renders/refraction_beckmann.png
M render/bsdf/cycles_renders/refraction_beckmann_rough.png
M render/bsdf/cycles_renders/refraction_ggx.png
M render/bsdf/cycles_renders/refraction_ggx_rough.png
M render/bsdf/cycles_renders/refraction_sharp.png
M render/bsdf/cycles_renders/toon_diffuse.png
M render/bsdf/cycles_renders/toon_glossy.png
M render/bsdf/cycles_renders/translucent.png
M render/bsdf/cycles_renders/transparent.png
M render/bsdf/cycles_renders/velvet.png
M render/denoise/cycles_renders/denoise_dof_mblur.png
M render/denoise/cycles_renders/denoise_hair.png
M render/denoise/cycles_renders/denoise_oidn_adaptive_sample_count.png
M render/denoise/cycles_renders/denoise_oidn_catcher_matte.png
M render/denoise/cycles_renders/denoise_oidn_catcher_matte_adaptive.png
M render/denoise/cycles_renders/denoise_oidn_catcher_matte_with_shadow_adaptive.png
M render/denoise/cycles_renders/denoise_oidn_catcher_pass.png
M render/denoise/cycles_renders/denoise_oidn_catcher_pass_adaptive.png
M render/denoise/cycles_renders/denoise_passes.png
M render/denoise/cycles_renders/denoise_specular.png
M render/denoise/cycles_renders/denoise_sss.png
M render/denoise/cycles_renders/denoise_volume.png
M render/displacement/cycles_renders/both_displacement.png
M render/displacement/cycles_renders/bump_with_displacement.png
M render/displacement/cycles_renders/compare_bump.png
M render/displacement/cycles_renders/dicing_camera.png
M render/displacement/cycles_renders/offscreen_dicing.png
M render/displacement/cycles_renders/panorama_dicing.png
M render/displacement/cycles_renders/true_displacement.png
M render/displacement/cycles_renders/true_displacement_image.png
M render/displacement/cycles_renders/true_displacement_scaled.png
M render/displacement/cycles_renders/true_displacement_scaled_shared.png
M render/displacement/cycles_renders/vector_displacement_object.png
M render/displacement/cycles_renders/vector_displacement_tangent.png
M render/hair/cycles_renders/hair_basemesh_intercept.png
M render/hair/cycles_renders/hair_close_up.png
M render/hair/cycles_renders/hair_geom_reflection.png
M render/hair/cycles_renders/hair_geom_transmission.png
M render/hair/cycles_renders/hair_instancer_uv.png
M render/hair/cycles_renders/hair_length_info.png
M render/hair/cycles_renders/hair_particle_random.png
M render/hair/cycles_renders/hair_reflection.png
M render/hair/cycles_renders/hair_ribbon_close_up.png
M render/hair/cycles_renders/hair_transmission.png
M render/hair/cycles_renders/principled_hair_absorptioncoefficient.png
M render/hair/cycles_renders/principled_hair_directcoloring.png
M render/hair/cycles_renders/principled_hair_melaninconcentration.png
M render/hair/cycles_renders/transparent_shadow_hair.png
M render/hair/cycles_renders/transparent_shadow_hair_blur.png
M render/image_colorspace/cycles_renders/image_alpha_blend.png
M render/image_colorspace/cycles_renders/image_alpha_blend_osl.png
M render/image_colorspace/cycles_renders/image_alpha_channel_packed.png
M render/image_colorspace/cycles_renders/image_alpha_channel_packed_osl.png
M render/image_colorspace/cycles_renders/image_alpha_ignore.png
M render/image_colorspace/cycles_renders/image_alpha_ignore_osl.png
M render/image_colorspace/cycles_renders/image_log.png
M render/image_colorspace/cycles_renders/image_log_osl.png
M render/image_colorspace/cycles_renders/image_non_color.png
M render/image_colorspace/cycles_renders/image_non_color_osl.png
M render/image_mapping/cycles_renders/image_mapping_clip_closest.png
M render/image_mapping/cycles_renders/image_mapping_clip_closest_1px.png
M render/image_mapping/cycles_renders/image_mapping_clip_closest_1px_osl.png
M render/image_mapping/cycles_renders/image_mapping_clip_closest_osl.png
M render/image_mapping/cycles_renders/image_mapping_clip_cubic.png
M render/image_mapping/cycles_renders/image_mapping_clip_cubic_osl.png
M render/image_mapping/cycles_renders/image_mapping_clip_linear.png
M render/image_mapping/cycles_renders/image_mapping_clip_linear_osl.png
M render/image_mapping/cycles_renders/image_mapping_extend_closest.png
M render/image_mapping/cycles_renders/image_mapping_extend_closest_1px.png
M render/image_mapping/cycles_renders/image_mapping_extend_closest_1px_osl.png
M render/image_mapping/cycles_renders/image_mapping_extend_closest_osl.png
M render/image_mapping/cycles_renders/image_mapping_extend_cubic.png
M render/image_mapping/cycles_renders/image_mapping_extend_cubic_1px.png
M render/image_mapping/cycles_renders/image_mapping_extend_cubic_1px_osl.png
M render/image_mapping/cycles_renders/image_mapping_extend_cubic_osl.png
M render/image_mapping/cycles_renders/image_mapping_extend_linear.png
M render/image_mapping/cycles_renders/image_mapping_extend_linear_1px.png
M render/image_mapping/cycles_renders/image_mapping_extend_linear_1px_osl.png
M render/image_mapping/cycles_renders/image_mapping_extend_linear_osl.png
M render/image_mapping/cycles_renders/image_mapping_repeat_closest.png
M render/image_mapping/cycles_renders/image_mapping_repeat_closest_1px.png
M render/image_mapping/cycles_renders/image_mapping_repeat_closest_1px_osl.png
M render/image_mapping/cycles_renders/image_mapping_repeat_closest_osl.png
M render/image_mapping/cycles_renders/image_mapping_repeat_cubic.png
M render/image_mapping/cycles_renders/image_mapping_repeat_cubic_1px.png
M render/image_mapping/cycles_renders/image_mapping_repeat_cubic_1px_osl.png
M render/image_mapping/cycles_renders/image_mapping_repeat_cubic_osl.png
M render/image_mapping/cycles_renders/image_mapping_repeat_linear.png
M render/image_mapping/cycles_renders/image_mapping_repeat_linear_1px.png
M render/image_mapping/cycles_renders/image_mapping_repeat_linear_1px_osl.png
M render/image_mapping/cycles_renders/image_mapping_repeat_linear_osl.png
M render/image_mapping/cycles_renders/image_mapping_udim.png
M render/integrator/cycles_renders/ao_approximate.png
M render/integrator/cycles_renders/clamp_both.png
M render/integrator/cycles_renders/clamp_direct.png
M render/integrator/cycles_renders/clamp_indirect.png
M render/integrator/cycles_renders/resumable_render.png
M render/integrator/cycles_renders/shadow_all_max_bounces.png
M render/integrator/cycles_renders/transparent_shadow.png
M render/light/cycles_renders/area_light.png
M render/light/cycles_renders/distant_light.png
M render/light/cycles_renders/light_spread.png
M render/light/cycles_renders/mesh_light.png
M render/light/cycles_renders/mesh_light_backface.png
M render/light/cycles_renders/multiple_area_lights.png
M render/light/cycles_renders/point_light.png
M render/light/cycles_renders/portal.png
M render/light/cycles_renders/sphere_light.png
M render/light/cycles_renders/spot_light.png
M render/mesh/cycles_renders/autosmooth_simple.png
M render/mesh/cycles_renders/autosmooth_subdmesh_catmull.png
M render/mesh/cycles_renders/autosmooth_subdmesh_linear.png
M render/mesh/cycles_renders/bvh8_close_proximity_visibility.png
M render/mesh/cycles_renders/culling.png
M render/mesh/cycles_renders/curve_modifier.png
M render/mesh/cycles_renders/edit_mode.png
M render/mesh/cycles_renders/pointiness.png
M render/mesh/cycles_renders/pointiness_autosplit.png
M render/mesh/cycles_renders/pointiness_split_faces.png
M render/mesh/cycles_renders/tangent_missing_uv.png
M render/mesh/cycles_renders/tangent_no_uv.png
M render/mesh/cycles_renders/tangent_render_uv.png
M render/mesh/cycles_renders/tangent_specific_uv_other.png
M render/mesh/cycles_renders/tangent_specific_uv_render.png
M render/mesh/cycles_renders/tangent_triangles.png
M render/mesh/cycles_renders/texture_space_mesh_modifier.png
M render/mesh/cycles_renders/visibility_instances.png
M render/mesh/cycles_renders/visibility_particles.png
M render/motion_blur/cycles_renders/camera_zoom_blur_perspective.png
M render/motion_blur/cycles_renders/curve_motion_blur.png
M render/motion_blur/cycles_renders/mblur_deform_autosmooth.png
M render/motion_blur/cycles_renders/mblur_deform_simple.png
M render/motion_blur/cycles_renders/multi_step_motion_blur.png
M render/motion_blur/cycles_renders/shutter_curve_default.png
M render/motion_blur/cycles_renders/shutter_curve_triangle.png
M render/motion_blur/cycles_renders/shutter_moving_camera_center.png
M render/motion_blur/cycles_renders/shutter_moving_camera_end.png
M render/motion_blur/cycles_renders/shutter_moving_camera_start.png
M render/motion_blur/cycles_renders/shutter_moving_object_center.png
M render/motion_blur/cycles_renders/shutter_moving_object_end.png
M render/motion_blur/cycles_renders/shutter_moving_object_start.png
M render/openvdb/cycles_renders/openvdb_smoke.png
M render/osl/cycles_renders/osl_volume_shader.png
M render/render_layer/cycles_renders/aov_position.png
M render/render_layer/cycles_renders/freestyle.png
M render/render_layer/cycles_renders/freestyle_stroke_material.png
M render/render_layer/cycles_renders/render_passes_ao.png
M render/render_layer/cycles_renders/render_passes_aov_color.png
M render/render_layer/cycles_renders/render_passes_aov_value.png
M render/render_layer/cycles_renders/render_passes_cryptomatte_asset.png
M render/render_layer/cycles_renders/render_passes_cryptomatte_material.png
M render/render_layer/cycles_renders/render_passes_cryptomatte_object.png
M render/render_layer/cycles_renders/render_passes_diffuse_color.png
M render/render_layer/cycles_renders/render_passes_diffuse_direct.png
M render/render_layer/cycles_renders/render_passes_diffuse_indirect.png
M render/render_layer/cycles_renders/render_passes_mist.png
M render/render_layer/cycles_renders/render_passes_normal.png
M render/render_layer/cycles_renders/render_passes_shadow.png
M render/render_layer/cycles_renders/render_passes_specular_color.png
M render/render_layer/cycles_renders/render_passes_specular_direct.png
M render/render_layer/cycles_renders/render_passes_specular_indirect.png
M render/render_layer/cycles_renders/rlayer_flags_01.png
M render/render_layer/cycles_renders/rlayer_flags_02.png
M render/render_layer/cycles_renders/rlayer_flags_03.png
M render/render_layer/cycles_renders/rlayer_flags_04.png
M render/render_layer/cycles_renders/shadow_catcher_ao_pass.png
M render/reports/cycles_renders/T39804.png
M render/reports/cycles_renders/T39823.png
M render/reports/cycles_renders/T40964.png
M render/reports/cycles_renders/T43156.png
M render/reports/cycles_renders/T44895.png
M render/reports/cycles_renders/T45227.png
M render/reports/cycles_renders/T45609.png
M render/reports/cycles_renders/T48346.png
M render/reports/cycles_renders/T48645.png
M render/reports/cycles_renders/T48790.png
M render/reports/cycles_renders/T48860.png
M render/reports/cycles_renders/T48860_mblur.png
M render/reports/cycles_renders/T49936.png
M render/reports/cycles_renders/T49936_indirect.png
M render/reports/cycles_renders/T50164.png
M render/reports/cycles_renders/T50452.png
M render/reports/cycles_renders/T50533.png
M render/reports/cycles_renders/T50718.png
M render/reports/cycles_renders/T50990_1.png
M render/reports/cycles_renders/T50990_2.png
M render/reports/cycles_renders/T53600.png
M render/reports/cycles_renders/T53854.png
M render/shader/cycles_renders/ambient_occlusion.png
M render/shader/cycles_renders/ambient_occlusion_only_local.png
M render/shader/cycles_renders/attribute_uniform.png
M render/shader/cycles_renders/bevel.png
M render/shader/cycles_renders/bevel_mblur.png
M render/shader/cycles_renders/blackbody.png
M render/shader/cycles_renders/constant_fold.png
M render/shader/cycles_renders/emission.png
M render/shader/cycles_renders/holdout.png
M render/shader/cycles_renders/node_group_color.png
M render/shader/cycles_renders/node_group_float.png
M render/shader/cycles_renders/node_group_vector.png
M render/shader/cycles_renders/rgb_curves_input_0.5.png
M render/shader/cycles_renders/rgb_curves_input_1.2.png
M render/shader/cycles_renders/rgb_curves_input_2.0_extrapolate.png
M render/shader/cycles_renders/rgb_curves_input_neg_0.5.png
M render/shader/cycles_renders/rgb_curves_input_neg_1.2.png
M render/shader/cycles_renders/rgb_curves_input_neg_2.0_extrapolate.png
M render/shader/cycles_renders/tex_voronoi.png
M render/shadow_catcher/cycles_renders/shadow_catcher_cornell_box_instanced.png
M render/shadow_catcher/cycles_renders/shadow_catcher_cornell_box_real.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_fully_transparent.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_simple.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_simple_semi_transparent_surface.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_simple_transparent_film.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_simple_transparent_mix_surface.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_simple_transparent_mix_surface_film.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_transparent_lamp_only_0.2.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_transparent_lamp_only_0.8.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_transparent_lamp_only_1.0.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_volume.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_volume_dense.png
M render/shadow_catcher/cycles_renders/shadow_catcher_pt_volume_sparse.png
M render/shadow_catcher/cycles_renders/transparent_glass.png
M render/sss/cycles_renders/sss_concave_clamp.png
M render/sss/cycles_renders/sss_diffuse_mix_clamp.png
M render/sss/cycles_renders/sss_hair.png
M render/sss/cycles_renders/sss_reflection_clamp.png
M render/sss/cycles_renders/subsurface_base_color_mix.png
M render/sss/cycles_renders/subsurface_behind_glass.png
M render/sss/cycles_renders/subsurface_behind_glass_branched.png
M render/sss/cycles_renders/subsurface_burley.png
M render/sss/cycles_renders/subsurface_cubic.png
M render/sss/cycles_renders/subsurface_gaussian.png
M render/sss/cycles_renders/subsurface_mix.png
M render/sss/cycles_renders/subsurface_random_walk.png
M render/sss/cycles_renders/subsurface_random_walk_thin.png
M render/sss/cycles_renders/subsurface_small_radius.png
M render/volume/cycles_renders/camera_in_volume_camera_and_volume.png
M render/volume/cycles_renders/camera_in_volume_camera_only.png
M render/volume/cycles_renders/camera_in_volume_nested.png
M render/volume/cycles_renders/camera_in_volume_simple.png
M render/volume/cycles_renders/fire.png
M render/volume/cycles_renders/point_density_particle_object.png
M render/volume/cycles_renders/point_density_particle_world.png
M render/volume/cycles_renders/point_density_vertices_object.png
M render/volume/cycles_renders/point_density_vertices_world.png
M render/volume/cycles_renders/principled_absorption.png
M render/volume/cycles_renders/principled_blackbody.png
M render/volume/cycles_renders/principled_bsdf_interior.png
M render/volume/cycles_renders/principled_smoke.png
M render/volume/cycles_renders/smoke.png
M render/volume/cycles_renders/smoke_color.png
M render/volume/cycles_renders/smoke_fire.png
M render/volume/cycles_renders/volume_absobtion.png
M render/volume/cycles_renders/volume_output_absorption.png
M render/volume/cycles_renders/volume_output_mix_volume.png
M render/volume/cycles_renders/volume_output_scatter.png
M render/volume/cycles_renders/volume_output_surface.png
M render/volume/cycles_renders/volume_overlap.png
M render/volume/cycles_renders/volume_scatter.png
M render/volume/cycles_renders/volume_scatter_albedo.png
M render/volume/cycles_renders/volume_step_offset.png
M render/volume/cycles_renders/volume_transparent_shadow.png
M render/volume/cycles_renders/world_volume.png
This is from the following tests failing

         38 - cycles_bake_cpu (Failed)
	 39 - cycles_bsdf_cpu (Failed)
	 40 - cycles_denoise_cpu (Failed)
	 41 - cycles_displacement_cpu (Failed)
	 42 - cycles_hair_cpu (Failed)
	 43 - cycles_image_colorspace_cpu (Failed)
	 45 - cycles_image_mapping_cpu (Failed)
	 47 - cycles_integrator_cpu (Failed)
	 48 - cycles_light_cpu (Failed)
	 49 - cycles_mesh_cpu (Failed)
	 50 - cycles_motion_blur_cpu (Failed)
	 51 - cycles_openvdb_cpu (Failed)
	 52 - cycles_render_layer_cpu (Failed)
	 53 - cycles_reports_cpu (Failed)
	 54 - cycles_shader_cpu (Failed)
	 55 - cycles_shadow_catcher_cpu (Failed)
	 56 - cycles_sss_cpu (Failed)
	 57 - cycles_volume_cpu (Failed)
	 58 - cycles_osl_cpu (Failed)

However the following tests fail on the master branch

         38 - cycles_bake_cpu (Failed)
	 39 - cycles_bsdf_cpu (Failed)
	 40 - cycles_denoise_cpu (Failed)
	 41 - cycles_displacement_cpu (Failed)
	 42 - cycles_hair_cpu (Failed)
	 43 - cycles_image_colorspace_cpu (Failed)
	 45 - cycles_image_mapping_cpu (Failed)
	 47 - cycles_integrator_cpu (Failed)
	 48 - cycles_light_cpu (Failed)
	 49 - cycles_mesh_cpu (Failed)
	 50 - cycles_motion_blur_cpu (Failed)
	 51 - cycles_openvdb_cpu (Failed)
	 52 - cycles_render_layer_cpu (Failed)
	 53 - cycles_reports_cpu (Failed)
	 54 - cycles_shader_cpu (Failed)
	 55 - cycles_shadow_catcher_cpu (Failed)
	 56 - cycles_sss_cpu (Failed)
	 57 - cycles_volume_cpu (Failed)
	 58 - cycles_osl_cpu (Failed)

resulting in almost the same set of files being added except the 2 bake ones at the top (even though they failed in both cases :-/). So the question is should I remove the files for the already broken tests from the set to be submitted or should they be submitted also?

The test should pass in the master branch, they are passing on the buildbot. Maybe you have not updated the SVN repository recently?

I suggest to svn revert all changes in the SVN repo and update it, then check if it builds with master.

But yes, this will require committing updated versions of practically all reference images.

Implementation looks good now.

This revision is now accepted and ready to land.Sep 24 2021, 6:04 PM