diff options
Diffstat (limited to 'release/ui/buttons_material.py')
-rw-r--r-- | release/ui/buttons_material.py | 314 |
1 files changed, 264 insertions, 50 deletions
diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index b9816e36dd7..c9df957ee02 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -1,4 +1,4 @@ - + import bpy class MaterialButtonsPanel(bpy.types.Panel): @@ -13,114 +13,313 @@ class MATERIAL_PT_preview(MaterialButtonsPanel): __idname__= "MATERIAL_PT_preview" __label__ = "Preview" - def poll(self, context): - return (context.material or context.object) - def draw(self, context): layout = self.layout - mat = context.material + layout.template_preview(mat) - -class MATERIAL_PT_material(MaterialButtonsPanel): - __idname__= "MATERIAL_PT_material" - __label__ = "Material" + +class MATERIAL_PT_context_material(MaterialButtonsPanel): + __idname__= "MATERIAL_PT_context_material" + __no_header__ = True def poll(self, context): - return (context.material or context.object) + return (context.object) def draw(self, context): layout = self.layout + mat = context.material ob = context.object slot = context.material_slot space = context.space_data + if ob: + row = layout.row() + + row.template_list(ob, "materials", ob, "active_material_index") + + col = row.column(align=True) + col.itemO("OBJECT_OT_material_slot_add", icon="ICON_ZOOMIN", text="") + col.itemO("OBJECT_OT_material_slot_remove", icon="ICON_ZOOMOUT", text="") + split = layout.split(percentage=0.65) if ob and slot: - split.template_ID(context, slot, "material", new="MATERIAL_OT_new") - split.itemR(ob, "active_material_index", text="Active") + split.template_ID(slot, "material", new="MATERIAL_OT_new") + row = split.row() + row.itemR(slot, "link", expand=True) elif mat: - split.template_ID(context, space, "pin_id") + split.template_ID(space, "pin_id") split.itemS() + +class MATERIAL_PT_material(MaterialButtonsPanel): + __idname__= "MATERIAL_PT_material" + __label__ = "Material" - if mat: - layout.itemS() + def draw(self, context): + layout = self.layout - layout.itemR(mat, "type", expand=True) + mat = context.material + ob = context.object + slot = context.material_slot + space = context.space_data - row = layout.row() - row.column().itemR(mat, "diffuse_color") - row.column().itemR(mat, "specular_color") - row.column().itemR(mat, "mirror_color") + if mat: + layout.itemR(mat, "type", expand=True) layout.itemR(mat, "alpha", slider=True) + + row = layout.row() + row.active = mat.type in ('SURFACE', 'VOLUME') + row.itemR(mat, "shadeless") + row.itemR(mat, "wireframe") + rowsub = row.row() + rowsub.active = mat.shadeless== False + rowsub.itemR(mat, "tangent_shading") +class MATERIAL_PT_strand(MaterialButtonsPanel): + __idname__= "MATERIAL_PT_strand" + __label__ = "Strand" + __default_closed__ = True + + def draw(self, context): + layout = self.layout + tan = context.material.strand + mat = context.material + + split = layout.split() + + sub = split.column() + sub.itemL(text="Size:") + sub.itemR(tan, "start_size", text="Root") + sub.itemR(tan, "end_size", text="Tip") + sub.itemR(tan, "min_size", text="Minimum") + sub.itemR(tan, "blender_units") + colsub = sub.column() + colsub.active = mat.shadeless== False + colsub.itemR(tan, "tangent_shading") + + sub = split.column() + sub.itemR(tan, "shape") + sub.itemR(tan, "width_fade") + sub.itemR(tan, "uv_layer") + colsub = sub.column() + colsub.active = mat.shadeless== False + colsub.itemR(tan, "surface_diffuse") + colsubsub = colsub.column() + colsubsub.active = tan.surface_diffuse + colsubsub.itemR(tan, "blend_distance", text="Distance") + +class MATERIAL_PT_options(MaterialButtonsPanel): + __idname__= "MATERIAL_PT_options" + __label__ = "Options" + + def draw(self, context): + layout = self.layout + mat = context.material + + split = layout.split() + + sub = split.column() + sub.itemR(mat, "traceable") + sub.itemR(mat, "full_oversampling") + sub.itemR(mat, "sky") + sub.itemR(mat, "exclude_mist") + sub.itemR(mat, "face_texture") + colsub = sub.column() + colsub.active = mat.face_texture + colsub.itemR(mat, "face_texture_alpha") + sub.itemR(mat, "invert_z") + sub.itemR(mat, "light_group") + sub.itemR(mat, "light_group_exclusive") + + sub = split.column() + sub.itemL(text="Shadows:") + sub.itemR(mat, "shadows", text="Recieve") + sub.itemR(mat, "transparent_shadows", text="Recieve Transparent") + sub.itemR(mat, "only_shadow", text="Shadows Only") + sub.itemR(mat, "cast_shadows_only", text="Cast Only") + sub.itemR(mat, "shadow_casting_alpha", text="Casting Alpha", slider=True) + + sub.itemR(mat, "ray_shadow_bias", text="Auto Ray Bias") + colsub = sub.column() + colsub.active = not mat.ray_shadow_bias + colsub.itemR(mat, "shadow_ray_bias", text="Ray Shadow Bias") + sub.itemR(mat, "cast_buffer_shadows") + sub.itemR(mat, "shadow_buffer_bias", text="Buffer Bias") + +class MATERIAL_PT_diffuse(MaterialButtonsPanel): + __idname__= "MATERIAL_PT_diffuse" + __label__ = "Diffuse" + + def poll(self, context): + mat = context.material + return (mat and mat.type != "HALO") + + def draw(self, context): + layout = self.layout + mat = context.material + + split = layout.split() + + sub = split.column() + sub.itemR(mat, "diffuse_color", text="") + sub.itemR(mat, "object_color") + colsub = sub.column() + colsub.active = mat.shadeless== False + colsub.itemR(mat, "ambient", slider=True) + colsub.itemR(mat, "emit") + sub.itemR(mat, "translucency", slider=True) + + sub = split.column() + sub.active = mat.shadeless== False + sub.itemR(mat, "diffuse_reflection", text="Intensity", slider=True) + sub.itemR(mat, "vertex_color_light") + sub.itemR(mat, "vertex_color_paint") + sub.itemR(mat, "cubic") + + row = layout.row() + row.active = mat.shadeless== False + row.itemR(mat, "diffuse_shader", text="Shader") + + split = layout.split() + split.active = mat.shadeless== False + sub = split.column() + if mat.diffuse_shader == 'OREN_NAYAR': + sub.itemR(mat, "roughness") + if mat.diffuse_shader == 'MINNAERT': + sub.itemR(mat, "darkness") + if mat.diffuse_shader == 'TOON': + sub.itemR(mat, "diffuse_toon_size", text="Size") + sub = split.column() + sub.itemR(mat, "diffuse_toon_smooth", text="Smooth") + if mat.diffuse_shader == 'FRESNEL': + sub.itemR(mat, "diffuse_fresnel", text="Fresnel") + sub = split.column() + sub.itemR(mat, "diffuse_fresnel_factor", text="Factor") + + layout.itemR(mat, "diffuse_ramp", text="Ramp") + +class MATERIAL_PT_specular(MaterialButtonsPanel): + __idname__= "MATERIAL_PT_specular" + __label__ = "Specular" + + def poll(self, context): + mat = context.material + return (mat and mat.type != "HALO") + + def draw(self, context): + layout = self.layout + mat = context.material + + layout.active = mat.shadeless== False + + split = layout.split() + + sub = split.column() + sub.itemR(mat, "specular_color", text="") + sub = split.column() + sub.itemR(mat, "specular_reflection", text="Intensity", slider=True) + + layout.itemR(mat, "spec_shader", text="Shader") + + split = layout.split() + + sub = split.column() + if mat.spec_shader in ('COOKTORR', 'PHONG'): + sub.itemR(mat, "specular_hardness", text="Hardness") + if mat.spec_shader == 'BLINN': + sub.itemR(mat, "specular_hardness", text="Hardness") + sub = split.column() + sub.itemR(mat, "specular_ior", text="IOR") + if mat.spec_shader == 'WARDISO': + sub.itemR(mat, "specular_slope", text="Slope") + sub = split.column() + sub.itemR(mat, "specular_hardness", text="Hardness") + if mat.spec_shader == 'TOON': + sub.itemR(mat, "specular_toon_size", text="Size") + sub = split.column() + sub.itemR(mat, "specular_toon_smooth", text="Smooth") + + layout.itemR(mat, "specular_ramp", text="Ramp") + class MATERIAL_PT_sss(MaterialButtonsPanel): __idname__= "MATERIAL_PT_sss" __label__ = "Subsurface Scattering" - + __default_closed__ = True + def poll(self, context): mat = context.material return (mat and mat.type == "SURFACE") def draw_header(self, context): + layout = self.layout sss = context.material.subsurface_scattering - layout = self.layout layout.itemR(sss, "enabled", text="") def draw(self, context): layout = self.layout sss = context.material.subsurface_scattering + mat = context.material layout.active = sss.enabled - flow = layout.column_flow() - flow.itemR(sss, "error_tolerance") - flow.itemR(sss, "ior") - flow.itemR(sss, "scale") - - row = layout.row() - row.column().itemR(sss, "color") - row.column().itemR(sss, "radius") + split = layout.split() + split.active = mat.shadeless== False - flow = layout.column_flow() - flow.itemR(sss, "color_factor", slider=True) - flow.itemR(sss, "texture_factor", slider=True) - flow.itemR(sss, "front") - flow.itemR(sss, "back") + sub = split.column() + sub.itemR(sss, "color", text="") + sub.itemL(text="Blend:") + sub.itemR(sss, "color_factor", slider=True) + sub.itemR(sss, "texture_factor", slider=True) + sub.itemL(text="Scattering Weight:") + sub.itemR(sss, "front") + sub.itemR(sss, "back") + sub = split.column() + sub.itemR(sss, "ior") + sub.itemR(sss, "scale") + sub.itemR(sss, "radius", text="RGB Radius") + sub.itemR(sss, "error_tolerance") + class MATERIAL_PT_raymir(MaterialButtonsPanel): __idname__= "MATERIAL_PT_raymir" __label__ = "Ray Mirror" + __default_closed__ = True def poll(self, context): mat = context.material return (mat and mat.type == "SURFACE") def draw_header(self, context): + layout = self.layout raym = context.material.raytrace_mirror - layout = self.layout layout.itemR(raym, "enabled", text="") def draw(self, context): layout = self.layout raym = context.material.raytrace_mirror - layout.active = raym.enabled + mat = context.material + + layout.active = raym.enabled + split = layout.split() sub = split.column() - sub.itemR(raym, "reflect", text="RayMir", slider=True) + sub.itemR(raym, "reflect", text="Reflectivity", slider=True) + sub.itemR(mat, "mirror_color", text="") sub.itemR(raym, "fresnel") sub.itemR(raym, "fresnel_fac", text="Fac", slider=True) sub = split.column() sub.itemR(raym, "gloss", slider=True) - sub.itemR(raym, "gloss_threshold", slider=True) - sub.itemR(raym, "gloss_samples") - sub.itemR(raym, "gloss_anisotropic", slider=True) + colsub = sub.column() + colsub.active = raym.gloss < 1 + colsub.itemR(raym, "gloss_threshold", slider=True, text="Threshold") + colsub.itemR(raym, "gloss_samples", text="Samples") + colsub.itemR(raym, "gloss_anisotropic", slider=True, text="Anisotropic") row = layout.row() row.itemR(raym, "distance", text="Max Dist") @@ -131,23 +330,27 @@ class MATERIAL_PT_raymir(MaterialButtonsPanel): class MATERIAL_PT_raytransp(MaterialButtonsPanel): __idname__= "MATERIAL_PT_raytransp" __label__= "Ray Transparency" - + __default_closed__ = True + def poll(self, context): mat = context.material return (mat and mat.type == "SURFACE") def draw_header(self, context): + layout = self.layout rayt = context.material.raytrace_transparency - layout = self.layout layout.itemR(rayt, "enabled", text="") def draw(self, context): layout = self.layout rayt = context.material.raytrace_transparency + mat = context.material + layout.active = rayt.enabled split = layout.split() + split.active = mat.shadeless== False sub = split.column() sub.itemR(rayt, "ior") @@ -156,14 +359,17 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel): sub = split.column() sub.itemR(rayt, "gloss", slider=True) - sub.itemR(rayt, "gloss_threshold", slider=True) - sub.itemR(rayt, "gloss_samples") + colsub = sub.column() + colsub.active = rayt.gloss < 1 + colsub.itemR(rayt, "gloss_threshold", slider=True, text="Threshold") + colsub.itemR(rayt, "gloss_samples", text="Samples") flow = layout.column_flow() + flow.active = mat.shadeless== False flow.itemR(rayt, "filter", slider=True) flow.itemR(rayt, "limit") flow.itemR(rayt, "falloff") - flow.itemR(rayt, "specular_opacity", slider=True) + flow.itemR(rayt, "specular_opacity", slider=True, text="Spec Opacity") flow.itemR(rayt, "depth") class MATERIAL_PT_halo(MaterialButtonsPanel): @@ -176,13 +382,14 @@ class MATERIAL_PT_halo(MaterialButtonsPanel): def draw(self, context): layout = self.layout + mat = context.material halo = mat.halo split = layout.split() - col = split.column(align=True) - col.itemL(text="General Settings:") + col = split.column() + col.itemR(mat, "diffuse_color", text="") col.itemR(halo, "size") col.itemR(halo, "hardness") col.itemR(halo, "add", slider=True) @@ -195,15 +402,17 @@ class MATERIAL_PT_halo(MaterialButtonsPanel): col.itemR(halo, "soft") col = split.column() - col = col.column(align=True) + col = col.column() col.itemR(halo, "ring") colsub = col.column() colsub.active = halo.ring colsub.itemR(halo, "rings") + colsub.itemR(mat, "mirror_color", text="") col.itemR(halo, "lines") colsub = col.column() colsub.active = halo.lines colsub.itemR(halo, "line_number", text="Lines") + colsub.itemR(mat, "specular_color", text="") col.itemR(halo, "star") colsub = col.column() colsub.active = halo.star @@ -217,10 +426,15 @@ class MATERIAL_PT_halo(MaterialButtonsPanel): colsub.itemR(halo, "flare_seed", text="Seed") colsub.itemR(halo, "flares_sub", text="Sub") + +bpy.types.register(MATERIAL_PT_context_material) bpy.types.register(MATERIAL_PT_preview) bpy.types.register(MATERIAL_PT_material) +bpy.types.register(MATERIAL_PT_diffuse) +bpy.types.register(MATERIAL_PT_specular) bpy.types.register(MATERIAL_PT_raymir) bpy.types.register(MATERIAL_PT_raytransp) bpy.types.register(MATERIAL_PT_sss) bpy.types.register(MATERIAL_PT_halo) - +bpy.types.register(MATERIAL_PT_strand) +bpy.types.register(MATERIAL_PT_options) |