From f0b33d84711e22f432a61c5ea1df890216692f01 Mon Sep 17 00:00:00 2001 From: Swann Date: Wed, 14 Oct 2020 19:11:32 +0200 Subject: [PATCH] fix: race condition in scene sync --- multi_user/__init__.py | 2 +- multi_user/bl_types/bl_scene.py | 275 ++++++++++++++++++++++++++++---- 2 files changed, 247 insertions(+), 30 deletions(-) diff --git a/multi_user/__init__.py b/multi_user/__init__.py index 3414b87..915314d 100644 --- a/multi_user/__init__.py +++ b/multi_user/__init__.py @@ -44,7 +44,7 @@ from . import environment DEPENDENCIES = { - ("replication", '0.1.1'), + ("replication", '0.1.2'), } diff --git a/multi_user/bl_types/bl_scene.py b/multi_user/bl_types/bl_scene.py index 6bc732d..5597493 100644 --- a/multi_user/bl_types/bl_scene.py +++ b/multi_user/bl_types/bl_scene.py @@ -26,6 +26,240 @@ from replication.constants import (DIFF_JSON, MODIFIED) from deepdiff import DeepDiff import logging +RENDER_SETTINGS = [ + 'dither_intensity', + 'engine', + 'film_transparent', + 'filter_size', + 'fps', + 'fps_base', + 'frame_map_new', + 'frame_map_old', + 'hair_subdiv', + 'hair_type', + 'line_thickness', + 'line_thickness_mode', + 'metadata_input', + 'motion_blur_shutter', + 'pixel_aspect_x', + 'pixel_aspect_y', + 'preview_pixel_size', + 'preview_start_resolution', + 'resolution_percentage', + 'resolution_x', + 'resolution_y', + 'sequencer_gl_preview', + 'use_bake_clear', + 'use_bake_lores_mesh', + 'use_bake_multires', + 'use_bake_selected_to_active', + 'use_bake_user_scale', + 'use_border', + 'use_compositing', + 'use_crop_to_border', + 'use_file_extension', + 'use_freestyle', + 'use_full_sample', + 'use_high_quality_normals', + 'use_lock_interface', + 'use_motion_blur', + 'use_multiview', + 'use_sequencer', + 'use_sequencer_override_scene_strip', + 'use_single_layer', + 'views_format', +] + +EVEE_SETTINGS = [ + 'gi_diffuse_bounces', + 'gi_cubemap_resolution', + 'gi_visibility_resolution', + 'gi_irradiance_smoothing', + 'gi_glossy_clamp', + 'gi_filter_quality', + 'gi_show_irradiance', + 'gi_show_cubemaps', + 'gi_irradiance_display_size', + 'gi_cubemap_display_size', + 'gi_auto_bake', + 'taa_samples', + 'taa_render_samples', + 'use_taa_reprojection', + 'sss_samples', + 'sss_jitter_threshold', + 'use_ssr', + 'use_ssr_refraction', + 'use_ssr_halfres', + 'ssr_quality', + 'ssr_max_roughness', + 'ssr_thickness', + 'ssr_border_fade', + 'ssr_firefly_fac', + 'volumetric_start', + 'volumetric_end', + 'volumetric_tile_size', + 'volumetric_samples', + 'volumetric_sample_distribution', + 'use_volumetric_lights', + 'volumetric_light_clamp', + 'use_volumetric_shadows', + 'volumetric_shadow_samples', + 'use_gtao', + 'use_gtao_bent_normals', + 'use_gtao_bounce', + 'gtao_factor', + 'gtao_quality', + 'gtao_distance', + 'bokeh_max_size', + 'bokeh_threshold', + 'use_bloom', + 'bloom_threshold', + 'bloom_color', + 'bloom_knee', + 'bloom_radius', + 'bloom_clamp', + 'bloom_intensity', + 'use_motion_blur', + 'motion_blur_shutter', + 'motion_blur_depth_scale', + 'motion_blur_max', + 'motion_blur_steps', + 'shadow_cube_size', + 'shadow_cascade_size', + 'use_shadow_high_bitdepth', + 'gi_diffuse_bounces', + 'gi_cubemap_resolution', + 'gi_visibility_resolution', + 'gi_irradiance_smoothing', + 'gi_glossy_clamp', + 'gi_filter_quality', + 'gi_show_irradiance', + 'gi_show_cubemaps', + 'gi_irradiance_display_size', + 'gi_cubemap_display_size', + 'gi_auto_bake', + 'taa_samples', + 'taa_render_samples', + 'use_taa_reprojection', + 'sss_samples', + 'sss_jitter_threshold', + 'use_ssr', + 'use_ssr_refraction', + 'use_ssr_halfres', + 'ssr_quality', + 'ssr_max_roughness', + 'ssr_thickness', + 'ssr_border_fade', + 'ssr_firefly_fac', + 'volumetric_start', + 'volumetric_end', + 'volumetric_tile_size', + 'volumetric_samples', + 'volumetric_sample_distribution', + 'use_volumetric_lights', + 'volumetric_light_clamp', + 'use_volumetric_shadows', + 'volumetric_shadow_samples', + 'use_gtao', + 'use_gtao_bent_normals', + 'use_gtao_bounce', + 'gtao_factor', + 'gtao_quality', + 'gtao_distance', + 'bokeh_max_size', + 'bokeh_threshold', + 'use_bloom', + 'bloom_threshold', + 'bloom_color', + 'bloom_knee', + 'bloom_radius', + 'bloom_clamp', + 'bloom_intensity', + 'use_motion_blur', + 'motion_blur_shutter', + 'motion_blur_depth_scale', + 'motion_blur_max', + 'motion_blur_steps', + 'shadow_cube_size', + 'shadow_cascade_size', + 'use_shadow_high_bitdepth', +] + +CYCLES_SETTINGS = [ + 'shading_system', + 'progressive', + 'use_denoising', + 'denoiser', + 'use_square_samples', + 'samples', + 'aa_samples', + 'diffuse_samples', + 'glossy_samples', + 'transmission_samples', + 'ao_samples', + 'mesh_light_samples', + 'subsurface_samples', + 'volume_samples', + 'sampling_pattern', + 'use_layer_samples', + 'sample_all_lights_direct', + 'sample_all_lights_indirect', + 'light_sampling_threshold', + 'use_adaptive_sampling', + 'adaptive_threshold', + 'adaptive_min_samples', + 'min_light_bounces', + 'min_transparent_bounces', + 'caustics_reflective', + 'caustics_refractive', + 'blur_glossy', + 'max_bounces', + 'diffuse_bounces', + 'glossy_bounces', + 'transmission_bounces', + 'volume_bounces', + 'transparent_max_bounces', + 'volume_step_rate', + 'volume_max_steps', + 'dicing_rate', + 'max_subdivisions', + 'dicing_camera', + 'offscreen_dicing_scale', + 'film_exposure', + 'film_transparent_glass', + 'film_transparent_roughness', + 'filter_type', + 'pixel_filter_type', + 'filter_width', + 'seed', + 'use_animated_seed', + 'sample_clamp_direct', + 'sample_clamp_indirect', + 'tile_order', + 'use_progressive_refine', + 'bake_type', + 'use_camera_cull', + 'camera_cull_margin', + 'use_distance_cull', + 'distance_cull_margin', + 'motion_blur_position', + 'rolling_shutter_type', + 'rolling_shutter_duration', + 'texture_limit', + 'texture_limit_render', + 'ao_bounces', + 'ao_bounces_render', +] + +VIEW_SETTINGS = [ + 'look', + 'view_transform', + 'exposure', + 'gamma', + 'use_curve_mapping', + 'white_level', + 'black_level' +] class BlScene(BlDatablock): bl_id = "scenes" @@ -68,17 +302,20 @@ class BlScene(BlDatablock): loader.load(target.eevee, data['eevee']) if 'cycles' in data.keys(): - loader.load(target.eevee, data['cycles']) + loader.load(target.cycles, data['cycles']) if 'render' in data.keys(): loader.load(target.render, data['render']) if 'view_settings' in data.keys(): loader.load(target.view_settings, data['view_settings']) - if target.view_settings.use_curve_mapping: + if target.view_settings.use_curve_mapping and \ + 'curve_mapping' in data['view_settings']: # TODO: change this ugly fix - target.view_settings.curve_mapping.white_level = data['view_settings']['curve_mapping']['white_level'] - target.view_settings.curve_mapping.black_level = data['view_settings']['curve_mapping']['black_level'] + target.view_settings.curve_mapping.white_level = data[ + 'view_settings']['curve_mapping']['white_level'] + target.view_settings.curve_mapping.black_level = data[ + 'view_settings']['curve_mapping']['black_level'] target.view_settings.curve_mapping.update() def _dump_implementation(self, data, instance=None): @@ -114,38 +351,18 @@ class BlScene(BlDatablock): scene_dumper.include_filter = None if self.preferences.sync_flags.sync_render_settings: - scene_dumper.exclude_filter = [ - 'gi_cache_info', - 'feature_set', - 'debug_use_hair_bvh', - 'aa_samples', - 'blur_glossy', - 'glossy_bounces', - 'device', - 'max_bounces', - 'preview_aa_samples', - 'preview_samples', - 'sample_clamp_indirect', - 'samples', - 'volume_bounces', - 'file_extension', - 'use_denoising', - 'ffmpeg', - 'stereo_views', - 'has_multiple_engines', - 'bake', - 'views', - 'motion_blur_shutter_curve', - 'image_settings' - ] + scene_dumper.include_filter = RENDER_SETTINGS data['render'] = scene_dumper.dump(instance.render) if instance.render.engine == 'BLENDER_EEVEE': + scene_dumper.include_filter = EVEE_SETTINGS data['eevee'] = scene_dumper.dump(instance.eevee) elif instance.render.engine == 'CYCLES': + scene_dumper.include_filter = CYCLES_SETTINGS data['cycles'] = scene_dumper.dump(instance.cycles) + scene_dumper.include_filter = VIEW_SETTINGS data['view_settings'] = scene_dumper.dump(instance.view_settings) if instance.view_settings.use_curve_mapping: @@ -155,7 +372,7 @@ class BlScene(BlDatablock): scene_dumper.include_filter = [ 'curves', 'points', - 'location' + 'location', ] data['view_settings']['curve_mapping']['curves'] = scene_dumper.dump( instance.view_settings.curve_mapping.curves)