From 0783c625d0cf4df6e3b5bf3ea110d3251168abe0 Mon Sep 17 00:00:00 2001 From: Swann Date: Thu, 2 Apr 2020 17:39:14 +0200 Subject: [PATCH 1/4] feat: initial render settings replication support --- multi_user/bl_types/bl_scene.py | 34 +++++++++++++++++++++++++--- multi_user/bl_types/dump_anything.py | 27 +++++++++++++--------- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/multi_user/bl_types/bl_scene.py b/multi_user/bl_types/bl_scene.py index 39cbeb4..8530492 100644 --- a/multi_user/bl_types/bl_scene.py +++ b/multi_user/bl_types/bl_scene.py @@ -68,6 +68,16 @@ class BlScene(BlDatablock): if 'grease_pencil' in data.keys(): target.grease_pencil = bpy.data.grease_pencils[data['grease_pencil']] + if 'eevee' in data.keys(): + loader.load(target.eevee, data['eevee']) + + if 'cycles' in data.keys(): + loader.load(target.eevee, data['cycles']) + + if 'view_settings' in data.keys(): + loader.load(target.view_settings, data['view_settings']) + target.view_settings.curve_mapping.update() + def _dump_implementation(self, data, pointer=None): assert(pointer) data = {} @@ -79,15 +89,33 @@ class BlScene(BlDatablock): 'world', 'id', 'camera', - 'grease_pencil' + 'grease_pencil', ] data = scene_dumper.dump(pointer) scene_dumper.depth = 3 + scene_dumper.include_filter = ['children','objects','name'] data['collection'] = scene_dumper.dump(pointer.collection) - - + + scene_dumper.depth = 1 + scene_dumper.include_filter = None + + data['eevee'] = scene_dumper.dump(pointer.eevee) + data['cycles'] = scene_dumper.dump(pointer.cycles) + data['view_settings'] = scene_dumper.dump(pointer.view_settings) + data['view_settings']['curve_mapping'] = scene_dumper.dump(pointer.view_settings.curve_mapping) + + if pointer.view_settings.use_curve_mapping: + scene_dumper.depth = 5 + scene_dumper.include_filter = [ + 'curves', + 'points', + 'location' + ] + data['view_settings']['curve_mapping']['curves'] = scene_dumper.dump(pointer.view_settings.curve_mapping.curves) + + return data def _resolve_deps_implementation(self): diff --git a/multi_user/bl_types/dump_anything.py b/multi_user/bl_types/dump_anything.py index d47e84e..c428cdd 100644 --- a/multi_user/bl_types/dump_anything.py +++ b/multi_user/bl_types/dump_anything.py @@ -544,22 +544,27 @@ class Loader: def _load_curve_mapping(self, element, dump): mapping = element.read() - # cleanup existing curve - for curve in mapping.curves: - for idx in range(len(curve.points)): - if idx == 0: + curves = mapping.curves + + for curve_index, curve in dump['curves'].items(): + dst_curve = curves[curve_index] + + # cleanup existing curve + for idx in range(len(dst_curve.points), 0, -1): + try: + dst_curve.points.remove(dst_curve.points[0]) + except Exception: break - curve.points.remove(curve.points[1]) - for curve_index, curve in dump['curves'].items(): + default_point_count = len(dst_curve.points) + for point_idx, point in curve['points'].items(): pos = point['location'] - - if len(mapping.curves[curve_index].points) == 1: - mapping.curves[curve_index].points[int( - point_idx)].location = pos + + if point_idx < default_point_count: + dst_curve.points[int(point_idx)].location = pos else: - mapping.curves[curve_index].points.new(pos[0], pos[1]) + dst_curve.points.new(pos[0], pos[1]) def _load_pointer(self, pointer, dump): rna_property_type = pointer.bl_rna_property.fixed_type From 9c897745fd0666e7457cbe2ff42a550caf5567b6 Mon Sep 17 00:00:00 2001 From: Swann Date: Thu, 2 Apr 2020 18:42:41 +0200 Subject: [PATCH 2/4] feat: optionnal setting on host --- multi_user/bl_types/bl_scene.py | 31 ++++++++++++++++++------------- multi_user/preferences.py | 13 ++++++++++++- multi_user/ui.py | 3 +++ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/multi_user/bl_types/bl_scene.py b/multi_user/bl_types/bl_scene.py index 8530492..62ef7b9 100644 --- a/multi_user/bl_types/bl_scene.py +++ b/multi_user/bl_types/bl_scene.py @@ -22,6 +22,8 @@ import mathutils from .dump_anything import Loader, Dumper from .bl_datablock import BlDatablock +from ..utils import get_preferences + class BlScene(BlDatablock): bl_id = "scenes" bl_class = bpy.types.Scene @@ -101,19 +103,22 @@ class BlScene(BlDatablock): scene_dumper.depth = 1 scene_dumper.include_filter = None - data['eevee'] = scene_dumper.dump(pointer.eevee) - data['cycles'] = scene_dumper.dump(pointer.cycles) - data['view_settings'] = scene_dumper.dump(pointer.view_settings) - data['view_settings']['curve_mapping'] = scene_dumper.dump(pointer.view_settings.curve_mapping) - - if pointer.view_settings.use_curve_mapping: - scene_dumper.depth = 5 - scene_dumper.include_filter = [ - 'curves', - 'points', - 'location' - ] - data['view_settings']['curve_mapping']['curves'] = scene_dumper.dump(pointer.view_settings.curve_mapping.curves) + pref = get_preferences() + + if pref.sync_flags.sync_render_settings: + data['eevee'] = scene_dumper.dump(pointer.eevee) + data['cycles'] = scene_dumper.dump(pointer.cycles) + data['view_settings'] = scene_dumper.dump(pointer.view_settings) + data['view_settings']['curve_mapping'] = scene_dumper.dump(pointer.view_settings.curve_mapping) + + if pointer.view_settings.use_curve_mapping: + scene_dumper.depth = 5 + scene_dumper.include_filter = [ + 'curves', + 'points', + 'location' + ] + data['view_settings']['curve_mapping']['curves'] = scene_dumper.dump(pointer.view_settings.curve_mapping.curves) return data diff --git a/multi_user/preferences.py b/multi_user/preferences.py index 24317c9..f86bdcb 100644 --- a/multi_user/preferences.py +++ b/multi_user/preferences.py @@ -36,7 +36,7 @@ def random_string_digits(stringLength=6): """Generate a random string of letters and digits """ lettersAndDigits = string.ascii_letters + string.digits return ''.join(random.choices(lettersAndDigits, k=stringLength)) - + class ReplicatedDatablock(bpy.types.PropertyGroup): type_name: bpy.props.StringProperty() @@ -48,6 +48,13 @@ class ReplicatedDatablock(bpy.types.PropertyGroup): icon: bpy.props.StringProperty() +class ReplicationFlags(bpy.types.PropertyGroup): + sync_render_settings: bpy.props.BoolProperty( + name="Synchronize render settings", + description="Synchronize render settings (eevee and cycles only)", + default=True) + + class SessionPrefs(bpy.types.AddonPreferences): bl_idname = __package__ @@ -68,6 +75,9 @@ class SessionPrefs(bpy.types.AddonPreferences): description='Distant host port', default=5555 ) + sync_flags: bpy.props.PointerProperty( + type=ReplicationFlags + ) supported_datablocks: bpy.props.CollectionProperty( type=ReplicatedDatablock, ) @@ -340,6 +350,7 @@ class SessionProps(bpy.types.PropertyGroup): classes = ( SessionUser, SessionProps, + ReplicationFlags, ReplicatedDatablock, SessionPrefs, ) diff --git a/multi_user/ui.py b/multi_user/ui.py index 26f5c8d..d23f244 100644 --- a/multi_user/ui.py +++ b/multi_user/ui.py @@ -241,6 +241,9 @@ class SESSION_PT_settings_replication(bpy.types.Panel): # Right managment if runtime_settings.session_mode == 'HOST': + row = layout.row() + row.prop(settings.sync_flags,"sync_render_settings") + row = layout.row(align=True) row.label(text="Right strategy:") row.prop(settings,"right_strategy",text="") From b3b2296b068454d728a3850890c0bbf039748903 Mon Sep 17 00:00:00 2001 From: Swann Date: Thu, 2 Apr 2020 19:21:55 +0200 Subject: [PATCH 3/4] fix: black and white level errors --- multi_user/bl_types/bl_scene.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/multi_user/bl_types/bl_scene.py b/multi_user/bl_types/bl_scene.py index 62ef7b9..d4fb3b7 100644 --- a/multi_user/bl_types/bl_scene.py +++ b/multi_user/bl_types/bl_scene.py @@ -78,6 +78,10 @@ class BlScene(BlDatablock): if 'view_settings' in data.keys(): loader.load(target.view_settings, data['view_settings']) + if target.view_settings.use_curve_mapping: + #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.update() def _dump_implementation(self, data, pointer=None): @@ -106,6 +110,9 @@ class BlScene(BlDatablock): pref = get_preferences() if pref.sync_flags.sync_render_settings: + scene_dumper.exclude_filter = [ + 'gi_cache_info', + ] data['eevee'] = scene_dumper.dump(pointer.eevee) data['cycles'] = scene_dumper.dump(pointer.cycles) data['view_settings'] = scene_dumper.dump(pointer.view_settings) From 1b94e017e6b33f47de45a2b06080af6d6e1e517e Mon Sep 17 00:00:00 2001 From: Swann Date: Thu, 2 Apr 2020 19:36:28 +0200 Subject: [PATCH 4/4] feat: ignore wrong parameters --- multi_user/bl_types/bl_scene.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/multi_user/bl_types/bl_scene.py b/multi_user/bl_types/bl_scene.py index d4fb3b7..3db21f9 100644 --- a/multi_user/bl_types/bl_scene.py +++ b/multi_user/bl_types/bl_scene.py @@ -112,6 +112,18 @@ class BlScene(BlDatablock): if pref.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' ] data['eevee'] = scene_dumper.dump(pointer.eevee) data['cycles'] = scene_dumper.dump(pointer.cycles)