diff --git a/__init__.py b/__init__.py index 6366e74..10c47e4 100755 --- a/__init__.py +++ b/__init__.py @@ -2,7 +2,7 @@ bl_info = { "name": "Render Toolbox", "description": "Setup outputs and perform cheks for rendering", "author": "Samuel Bernou", - "version": (0, 7, 0), + "version": (0, 8, 0), "blender": (4, 0, 0), "location": "View3D", "warning": "", diff --git a/fn.py b/fn.py index 0365433..bea7c13 100755 --- a/fn.py +++ b/fn.py @@ -208,7 +208,7 @@ def create_and_connect_file_output(node, outputs, file_out, out_name, base_path, def connect_to_file_output(node_list, file_out=None, base_path='', excludes=None, remap_names=None, - file_format=None, split_tech_passes=False, template=None): + file_format=None, split_tech_passes=False, tech_file_format=None, template=None): """Connect selected nodes output to file output(s) if a file output is selected, add intputs on it @@ -248,18 +248,19 @@ def connect_to_file_output(node_list, file_out=None, base_path='', excludes=None excludes = excludes or {} remap_names = remap_names or {} + if tech_file_format is None: + ## Fallback to file format (then customize) is not provided + tech_file_format = file_format.copy() if file_format else None + if tech_file_format: + # Set to EXR if provided is not exr type e.g PNG + if tech_file_format.get('file_format') not in ('OPEN_EXR', 'OPEN_EXR_MULTILAYER'): + tech_file_format['file_format'] = 'OPEN_EXR' - tech_file_format = file_format.copy() if file_format else None - - if tech_file_format: - ## TODO: Set to EXR if provioded is not ERX or EXR multilayer ? - # ->> if tech_file_format.get('file_format')) is not in ('OPEN_EXR', 'OPEN_EXR_MULTILAYER'): ... - - ## Force 32 bit - tech_file_format['color_depth'] = '32' - ## Enforce a lossless format if provided is not - if (codec := tech_file_format.get('exr_codec')) and codec not in ['ZIP','PIZ','RLE','ZIPS']: - tech_file_format['exr_codec'] = 'ZIP' + ## Force 32 bit + tech_file_format['color_depth'] = '32' + ## Enforce a lossless format if provided is not + if (codec := tech_file_format.get('exr_codec')) and codec not in ['ZIP','PIZ','RLE','ZIPS']: + tech_file_format['exr_codec'] = 'ZIP' for node in node_list: exclusions = excludes.get(node.name) or [] diff --git a/operators/output_setup.py b/operators/output_setup.py index e5d7613..d929a4e 100755 --- a/operators/output_setup.py +++ b/operators/output_setup.py @@ -226,7 +226,24 @@ class RT_OT_create_output_layers(bpy.types.Operator): ('DWAB', 'DWAB (lossy)', ''), ), ) - + + tech_exr_codec : EnumProperty( + name='Tech Passes Codec', + default='ZIP', + description='Codec settings for Techpasses OpenEXR (passes are set to 32bit)', + items=( + ('PIZ', 'PIZ (lossless)', ''), + ('ZIP', 'ZIP (lossless)', ''), + ('RLE', 'RLE (lossless)', ''), + ('ZIPS', 'ZIPS (lossless)', ''), + # ('PXR24', 'Pxr24 (lossy)', ''), + # ('B44', 'B44 (lossy)', ''), + # ('B44A', 'B44A (lossy)', ''), + # ('DWAA', 'DWAA (lossy)', ''), + # ('DWAB', 'DWAB (lossy)', ''), + ), + ) + color_depth : EnumProperty( name='Color Depth', default='16', @@ -460,13 +477,14 @@ Possible variables: row_multi.prop(self, 'template_multilayer_name') row_multi.active = final_format == 'OPEN_EXR_MULTILAYER' - ## Todo: Add rt.info_note to explain templates box.row().prop(self, 'name_type', expand=False) col = box.column() col.prop(self, 'file_format') col.prop(self, 'exr_codec') col.row().prop(self, 'color_depth', expand=True) col.prop(self, 'split_tech_passes') + if self.split_tech_passes: + col.prop(self, 'tech_exr_codec', text='Tech Passes Codec') search_row = layout.row() op = search_row.operator("rt.colprop_search_and_replace", icon='BORDERMOVE') @@ -573,6 +591,13 @@ Possible variables: 'exr_codec' : self.exr_codec, 'color_depth' : self.color_depth, } + + tech_file_format = { + ## Force the use of OpenEXR for tech passes if normal passes uses PNG or the likes + 'file_format' : file_ext if file_ext in ('OPEN_EXR_MULTILAYER', 'OPEN_EXR') else 'OPEN_EXR', + 'exr_codec' : self.tech_exr_codec, + 'color_depth' : '32', + } scn = context.scene nodes = scn.node_tree.nodes @@ -591,6 +616,7 @@ Possible variables: remap_names=remap_names, file_format=file_format, split_tech_passes=self.split_tech_passes, + tech_file_format=tech_file_format, template=self.final_base_path_template) return {"FINISHED"}