Merge branch '36-sync-render-settings' into 'develop'
Resolve "Sync Render Settings" See merge request slumber/multi-user!33
This commit is contained in:
@@ -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
|
||||
@@ -68,6 +70,20 @@ 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'])
|
||||
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):
|
||||
assert(pointer)
|
||||
data = {}
|
||||
@@ -79,15 +95,51 @@ 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
|
||||
|
||||
pref = get_preferences()
|
||||
|
||||
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)
|
||||
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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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="")
|
||||
|
||||
Reference in New Issue
Block a user