diff options
Diffstat (limited to 'release/scripts/startup')
10 files changed, 119 insertions, 110 deletions
diff --git a/release/scripts/startup/bl_operators/object_quick_effects.py b/release/scripts/startup/bl_operators/object_quick_effects.py index 9fa6dbf6eef..91a0120f6ac 100644 --- a/release/scripts/startup/bl_operators/object_quick_effects.py +++ b/release/scripts/startup/bl_operators/object_quick_effects.py @@ -388,102 +388,16 @@ class QuickSmoke(Operator): node_out = nodes.new(type='ShaderNodeOutputMaterial') node_out.location = grid_location(6, 1) - # Add shader 1 - node_add_shader_1 = nodes.new(type='ShaderNodeAddShader') - node_add_shader_1.location = grid_location(5, 1) - links.new(node_add_shader_1.outputs["Shader"], + # Add Principled Volume + node_principled = nodes.new(type='ShaderNodeVolumePrincipled') + node_principled.location = grid_location(4, 1) + links.new(node_principled.outputs["Volume"], node_out.inputs["Volume"]) - if self.style in {'SMOKE', 'FIRE', 'BOTH'}: - # Smoke - - # Add shader 2 - node_add_shader_2 = nodes.new(type='ShaderNodeAddShader') - node_add_shader_2.location = grid_location(4, 2) - links.new(node_add_shader_2.outputs["Shader"], - node_add_shader_1.inputs[0]) - - # Volume scatter - node_scatter = nodes.new(type='ShaderNodeVolumeScatter') - node_scatter.location = grid_location(3, 3) - links.new(node_scatter.outputs["Volume"], - node_add_shader_2.inputs[0]) - - # Volume absorption - node_absorption = nodes.new(type='ShaderNodeVolumeAbsorption') - node_absorption.location = grid_location(3, 2) - links.new(node_absorption.outputs["Volume"], - node_add_shader_2.inputs[1]) - - # Density Multiplier - node_densmult = nodes.new(type='ShaderNodeMath') - node_densmult.location = grid_location(2, 2) - node_densmult.operation = 'MULTIPLY' - node_densmult.inputs[1].default_value = 5.0 - links.new(node_densmult.outputs["Value"], - node_scatter.inputs["Density"]) - links.new(node_densmult.outputs["Value"], - node_absorption.inputs["Density"]) - - # Attribute "density" - node_attrib_density = nodes.new(type='ShaderNodeAttribute') - node_attrib_density.attribute_name = "density" - node_attrib_density.location = grid_location(1, 2) - links.new(node_attrib_density.outputs["Fac"], - node_densmult.inputs[0]) - - # Attribute "color" - node_attrib_color = nodes.new(type='ShaderNodeAttribute') - node_attrib_color.attribute_name = "color" - node_attrib_color.location = grid_location(2, 3) - links.new(node_attrib_color.outputs["Color"], - node_scatter.inputs["Color"]) - links.new(node_attrib_color.outputs["Color"], - node_absorption.inputs["Color"]) + node_principled.inputs["Density"].default_value = 5.0 if self.style in {'FIRE', 'BOTH'}: - # Fire - - # Emission - node_emission = nodes.new(type='ShaderNodeEmission') - node_emission.inputs["Color"].default_value = (0.8, 0.1, 0.01, 1.0) - node_emission.location = grid_location(4, 1) - links.new(node_emission.outputs["Emission"], - node_add_shader_1.inputs[1]) - - # Flame strength multiplier - node_flame_strength_mult = nodes.new(type='ShaderNodeMath') - node_flame_strength_mult.location = grid_location(3, 1) - node_flame_strength_mult.operation = 'MULTIPLY' - node_flame_strength_mult.inputs[1].default_value = 2.5 - links.new(node_flame_strength_mult.outputs["Value"], - node_emission.inputs["Strength"]) - - # Color ramp Flame - node_flame_ramp = nodes.new(type='ShaderNodeValToRGB') - node_flame_ramp.location = grid_location(1, 1) - ramp = node_flame_ramp.color_ramp - ramp.interpolation = 'EASE' - - # orange - elem = ramp.elements.new(0.5) - elem.color = (1.0, 0.128, 0.0, 1.0) - - # yellow - elem = ramp.elements.new(0.9) - elem.color = (0.9, 0.6, 0.1, 1.0) - - links.new(node_flame_ramp.outputs["Color"], - node_emission.inputs["Color"]) - - # Attribute "flame" - node_attrib_flame = nodes.new(type='ShaderNodeAttribute') - node_attrib_flame.attribute_name = "flame" - node_attrib_flame.location = grid_location(0, 1) - links.new(node_attrib_flame.outputs["Fac"], - node_flame_ramp.inputs["Fac"]) - links.new(node_attrib_flame.outputs["Fac"], - node_flame_strength_mult.inputs[0]) + node_principled.inputs["Blackbody Intensity"].default_value = 1.0 # Blender Internal else: diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 022ee1576d8..1bbb3e9883e 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1887,6 +1887,37 @@ class WM_OT_addon_disable(Operator): return {'FINISHED'} +class WM_OT_owner_enable(Operator): + """Enable workspace owner ID""" + bl_idname = "wm.owner_enable" + bl_label = "Enable Add-on" + + owner_id = StringProperty( + name="UI Tag", + ) + + def execute(self, context): + workspace = context.workspace + workspace.owner_ids.new(self.owner_id) + return {'FINISHED'} + + +class WM_OT_owner_disable(Operator): + """Enable workspace owner ID""" + bl_idname = "wm.owner_disable" + bl_label = "Disable UI Tag" + + owner_id = StringProperty( + name="UI Tag", + ) + + def execute(self, context): + workspace = context.workspace + owner_id = workspace.owner_ids[self.owner_id] + workspace.owner_ids.remove(owner_id) + return {'FINISHED'} + + class WM_OT_theme_install(Operator): """Load and apply a Blender XML theme file""" bl_idname = "wm.theme_install" @@ -2384,5 +2415,7 @@ classes = ( WM_OT_properties_remove, WM_OT_sysinfo, WM_OT_theme_install, + WM_OT_owner_disable, + WM_OT_owner_enable, WM_OT_url_open, ) diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py index 32a1b3a771d..cd29c3f10e7 100644 --- a/release/scripts/startup/bl_ui/properties_data_modifier.py +++ b/release/scripts/startup/bl_ui/properties_data_modifier.py @@ -940,7 +940,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): col = split.column() scene = context.scene - engine = scene.render.engine + engine = scene.view_render.engine show_adaptive_options = ( engine == 'CYCLES' and md == ob.modifiers[-1] and scene.cycles.feature_set == 'EXPERIMENTAL' diff --git a/release/scripts/startup/bl_ui/properties_data_workspace.py b/release/scripts/startup/bl_ui/properties_data_workspace.py index dae798bee95..c699fac7dd2 100644 --- a/release/scripts/startup/bl_ui/properties_data_workspace.py +++ b/release/scripts/startup/bl_ui/properties_data_workspace.py @@ -61,6 +61,61 @@ class WORKSPACE_PT_workspace(WorkSpaceButtonsPanel, Panel): layout.prop(view_render, "engine", text="") +class WORKSPACE_PT_owner_ids(WorkSpaceButtonsPanel, Panel): + bl_label = "Workspace Add-ons" + bl_options = {'DEFAULT_CLOSED'} + + def draw_header(self, context): + workspace = context.workspace + self.layout.prop(workspace, "use_filter_by_owner", text="") + + def draw(self, context): + layout = self.layout + # align just to pack more tightly + col = layout.box().column(align=True) + + workspace = context.workspace + userpref = context.user_preferences + + col.active = workspace.use_filter_by_owner + + import addon_utils + addon_map = {mod.__name__: mod for mod in addon_utils.modules()} + owner_ids = {owner_id.name for owner_id in workspace.owner_ids} + + for addon in userpref.addons: + module_name = addon.module + info = addon_utils.module_bl_info(addon_map[module_name]) + if not info["use_owner"]: + continue + is_enabled = module_name in owner_ids + row = col.row() + row.operator( + "wm.owner_disable" if is_enabled else "wm.owner_enable", + icon='CHECKBOX_HLT' if is_enabled else 'CHECKBOX_DEHLT', + text="", + emboss=False, + ).owner_id = module_name + row.label("%s: %s" % (info["category"], info["name"])) + if is_enabled: + owner_ids.remove(module_name) + + # Detect unused + if owner_ids: + layout.label(text="Unknown add-ons", icon='ERROR') + col = layout.box().column(align=True) + for module_name in sorted(owner_ids): + row = col.row() + row.operator( + "wm.owner_disable", + icon='CHECKBOX_HLT', + text="", + emboss=False, + ).owner_id = module_name + row.label(module_name) + + + class WORKSPACE_PT_custom_props(WorkSpaceButtonsPanel, PropertyPanel, Panel): _context_path = "workspace" _property_type = bpy.types.WorkSpace @@ -69,6 +124,7 @@ class WORKSPACE_PT_custom_props(WorkSpaceButtonsPanel, PropertyPanel, Panel): classes = ( WORKSPACE_PT_context, WORKSPACE_PT_workspace, + WORKSPACE_PT_owner_ids, WORKSPACE_PT_custom_props, ) diff --git a/release/scripts/startup/bl_ui/properties_material.py b/release/scripts/startup/bl_ui/properties_material.py index 2dc7bffa527..dfbf3eab244 100644 --- a/release/scripts/startup/bl_ui/properties_material.py +++ b/release/scripts/startup/bl_ui/properties_material.py @@ -183,7 +183,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel): class MATERIAL_PT_preview(MaterialButtonsPanel, Panel): bl_label = "Preview" - COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_EEVEE'} def draw(self, context): self.layout.template_preview(context.material) diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py index 5cf89df63ab..d02bee3a0fa 100644 --- a/release/scripts/startup/bl_ui/properties_physics_smoke.py +++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py @@ -68,6 +68,8 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel): col.prop(domain, "time_scale", text="Scale") col.label(text="Border Collisions:") col.prop(domain, "collision_extents", text="") + col.label(text="Empty Space:") + col.prop(domain, "clipping") col = split.column() col.label(text="Behavior:") diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 94924106542..918ce0da32f 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -106,7 +106,7 @@ class SEQUENCER_HT_header(Header): layout.prop(st, "preview_channels", expand=True, text="") layout.prop(st, "display_channel", text="Channel") - ed = context.scene.sequence_editor + ed = scene.sequence_editor if ed: row = layout.row(align=True) row.prop(ed, "show_overlay", text="", icon='GHOST_ENABLED') @@ -1076,7 +1076,7 @@ class SEQUENCER_PT_proxy(SequencerButtonsPanel, Panel): def draw(self, context): layout = self.layout - sequencer = context.scene.sequence_editor + ed = context.scene.sequence_editor strip = act_strip(context) @@ -1084,9 +1084,9 @@ class SEQUENCER_PT_proxy(SequencerButtonsPanel, Panel): proxy = strip.proxy flow = layout.column_flow() - flow.prop(sequencer, "proxy_storage", text="Storage") - if sequencer.proxy_storage == 'PROJECT': - flow.prop(sequencer, "proxy_dir", text="Directory") + flow.prop(ed, "proxy_storage", text="Storage") + if ed.proxy_storage == 'PROJECT': + flow.prop(ed, "proxy_dir", text="Directory") else: flow.prop(proxy, "use_proxy_custom_directory") flow.prop(proxy, "use_proxy_custom_file") @@ -1192,7 +1192,7 @@ class SEQUENCER_PT_modifiers(SequencerButtonsPanel, Panel): layout = self.layout strip = act_strip(context) - sequencer = context.scene.sequence_editor + ed = context.scene.sequence_editor layout.prop(strip, "use_linear_modifiers") @@ -1223,9 +1223,9 @@ class SEQUENCER_PT_modifiers(SequencerButtonsPanel, Panel): row.prop(mod, "input_mask_type", expand=True) if mod.input_mask_type == 'STRIP': - sequences_object = sequencer - if sequencer.meta_stack: - sequences_object = sequencer.meta_stack[-1] + sequences_object = ed + if ed.meta_stack: + sequences_object = ed.meta_stack[-1] box.prop_search(mod, "input_mask_strip", sequences_object, "sequences", text="Mask") else: box.prop(mod, "input_mask_id") diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py index d1202adfce6..9026a93aa99 100644 --- a/release/scripts/startup/bl_ui/space_time.py +++ b/release/scripts/startup/bl_ui/space_time.py @@ -119,7 +119,7 @@ class TIME_MT_marker(Menu): def draw(self, context): layout = self.layout - marker_menu_generic(layout, context) + marker_menu_generic(layout) class TIME_MT_view(Menu): diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index d24fafad661..77b54b3477a 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -1524,12 +1524,15 @@ class USERPREF_PT_addons(Panel): split.operator( "wm.url_open", text="Documentation", icon='HELP', ).url = info["wiki_url"] - split.operator( - "wm.url_open", text="Report a Bug", icon='URL', - ).url = info.get( - "tracker_url", - "https://developer.blender.org/maniphest/task/edit/form/2", - ) + # Only add "Report a Bug" button if tracker_url is set + # or the add-on is bundled (use official tracker then). + if info.get("tracker_url") or not user_addon: + split.operator( + "wm.url_open", text="Report a Bug", icon='URL', + ).url = info.get( + "tracker_url", + "https://developer.blender.org/maniphest/task/edit/form/2", + ) if user_addon: split.operator( "wm.addon_remove", text="Remove", icon='CANCEL', diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index dc8462f1af1..bb3eb1a7856 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -272,6 +272,7 @@ shader_node_categories = [ NodeItem("ShaderNodeHoldout", poll=object_cycles_shader_nodes_poll), NodeItem("ShaderNodeVolumeAbsorption", poll=eevee_cycles_shader_nodes_poll), NodeItem("ShaderNodeVolumeScatter", poll=eevee_cycles_shader_nodes_poll), + NodeItem("ShaderNodeVolumePrincipled"), NodeItem("ShaderNodeEeveeSpecular", poll=object_eevee_shader_nodes_poll), ]), ShaderNewNodeCategory("SH_NEW_TEXTURE", "Texture", items=[ |