[Bf-extensions-cvs] [2def7cb] master: Initial Commit Render Clay: T51229 T50357

meta-androcto noreply at git.blender.org
Mon Apr 17 04:23:16 CEST 2017


Commit: 2def7cb534c97b6b99999a0829cfb28bc1dfe694
Author: meta-androcto
Date:   Mon Apr 17 12:22:40 2017 +1000
Branches: master
https://developer.blender.org/rBA2def7cb534c97b6b99999a0829cfb28bc1dfe694

Initial Commit Render Clay: T51229 T50357

===================================================================

A	render_clay.py

===================================================================

diff --git a/render_clay.py b/render_clay.py
new file mode 100644
index 0000000..d53878b
--- /dev/null
+++ b/render_clay.py
@@ -0,0 +1,225 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+bl_info = {
+    "name": "Clay Render",
+    "author": "Fabio Russo <ruesp83 at libero.it>",
+    "version": (1, 2),
+    "blender": (2, 56, 0),
+    "location": "Render > Clay Render",
+    "description": "This script, applies a temporary material to all objects"\
+        " of the scene.",
+    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
+        "Scripts/Clay_Render",
+    "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
+    "category": "Render"}
+
+import bpy
+from bpy.props import BoolProperty
+
+
+def Create_Mat():
+    id = bpy.data.materials.new("Clay_Render")
+    #diffuse
+    id.diffuse_shader = "OREN_NAYAR"
+    id.diffuse_color = 0.800, 0.741, 0.536
+    id.diffuse_intensity = 1
+    id.roughness = 0.909
+    #specular
+    id.specular_shader = "COOKTORR"
+    id.specular_color = 1, 1, 1
+    id.specular_hardness = 10
+    id.specular_intensity = 0.115
+
+
+def Alternative_Clay(self, msg):
+    Find = False
+    AM = None
+    i = 0
+    for mat in bpy.data.materials:
+        if (mat.Mat_Clay) and (not Find):
+            Find = True
+            AM = mat
+            i += 1
+
+        else:
+            if (mat.Mat_Clay):
+                i += 1
+
+    if msg is True:
+        if (i == 1):
+            self.report({'INFO'}, "The material \"" + AM.name + "\" is set "\
+                "as Clay!")
+        else:
+            if (i > 1):
+                self.report({'WARNING'}, "Two or more materials are set as "\
+                    "Clay. \"" + AM.name + "\" will be used!")
+
+    return AM
+
+
+def Get_Mat():
+    Mat = bpy.data.materials["Clay_Render"]
+    return Mat
+
+
+def Exist_Mat():
+    if bpy.data.materials.get("Clay_Render"):
+        return True
+
+    else:
+        return False
+
+
+class ClayPinned(bpy.types.Operator):
+    bl_idname = "render.clay_pinned"
+    bl_label = "Clay Pinned"
+    bl_description = "Clay Material Stores"
+
+    def execute(self, context):
+        if bpy.types.Scene.Clay_Pinned:
+            bpy.types.Scene.Clay_Pinned = False
+        else:
+            if bpy.types.Scene.Clay:
+                if bpy.data.materials[0].users == 0:
+                    bpy.data.materials.remove(Get_Mat())
+                    bpy.types.Scene.Clay_Pinned = True
+
+            else:
+                bpy.types.Scene.Clay_Pinned = True
+
+        return {'FINISHED'}
+
+
+class CheckClay(bpy.types.Operator):
+    bl_idname = "render.clay"
+    bl_label = "Clay Render"
+    bl_description = "Use Clay Render"
+
+    def execute(self, context):
+        if bpy.types.Scene.Clay:
+            #Clay Attivato
+            ac = Alternative_Clay(self, True)
+            if ac is None:
+                if not Exist_Mat():
+                    Create_Mat()
+                rl = context.scene.render.layers
+                rl.active.material_override = Get_Mat()
+
+            else:
+                context.scene.render.layers.active.material_override = ac
+
+            bpy.types.Scene.Clay = False
+
+        else:
+            context.scene.render.layers.active.material_override = None
+            if bpy.types.Scene.Clay_Pinned:
+                if bpy.data.materials[0].users == 0:
+                    bpy.data.materials.remove(Get_Mat())
+            bpy.types.Scene.Clay = True
+
+        return {'FINISHED'}
+
+
+def draw_clay_render(self, context):
+    ok_clay = not bpy.types.Scene.Clay
+    pin = not bpy.types.Scene.Clay_Pinned
+
+    rnl = context.scene.render.layers.active
+    split = self.layout.split()
+    col = split.column()
+
+    col.operator(CheckClay.bl_idname, emboss=False, icon='CHECKBOX_HLT'\
+        if ok_clay else 'CHECKBOX_DEHLT')
+    col = split.column()
+    if Alternative_Clay(self, False) is None:
+        if Exist_Mat():
+            if (bpy.data.materials[0].users == 0) or (ok_clay):
+                row = col.row(align=True)
+                im = Get_Mat()
+                row.prop(im, "diffuse_color", text="")
+                row.operator(ClayPinned.bl_idname, text="", icon='PINNED'\
+                    if pin else 'UNPINNED')
+
+                if ok_clay:
+                    row.active = True
+
+                else:
+                    row.active = False
+
+            else:
+                col.label('Clay Material applied to an object')
+
+    else:
+        col.label('Custom Material Clay')
+
+    self.layout.separator()
+
+
+def draw_clay_options(self, context):
+    cm = context.material
+    layout = self.layout
+    layout.prop(cm, "Mat_Clay", text="Clay")
+
+
+def draw_clay_warning(self, context):
+    if not bpy.types.Scene.Clay:
+        self.layout.label("Render Clay Enabled", "ERROR")
+
+
+def register():
+    bpy.types.Scene.Clay = BoolProperty(
+    name='Clay Render',
+    description='Use Clay Render',
+    default=False)
+
+    bpy.types.Scene.Clay_Pinned = BoolProperty(
+    name='Clay Pinned',
+    description='Clay Material Stores',
+    default=False)
+
+    bpy.types.Material.Mat_Clay = bpy.props.BoolProperty(
+        name='Use as Clay',
+        description='Use as Clay',
+        default=False)
+
+    bpy.utils.register_class(ClayPinned)
+    bpy.utils.register_class(CheckClay)
+    bpy.types.RENDER_PT_render.prepend(draw_clay_render)
+    bpy.types.MATERIAL_PT_options.append(draw_clay_options)
+    bpy.types.INFO_HT_header.append(draw_clay_warning)
+
+
+def unregister():
+    bpy.context.scene.render.layers.active.material_override = None
+    if (Exist_Mat()) and (bpy.data.materials[0].users == 0):
+        bpy.data.materials.remove(Get_Mat())
+    del bpy.types.Scene.Clay
+    del bpy.types.Scene.Clay_Pinned
+    del bpy.types.Material.Mat_Clay
+    bpy.utils.unregister_class(ClayPinned)
+    bpy.utils.unregister_class(CheckClay)
+    bpy.types.RENDER_PT_render.remove(draw_clay_render)
+    bpy.types.MATERIAL_PT_options.remove(draw_clay_options)
+    bpy.types.INFO_HT_header.remove(draw_clay_warning)
+
+
+if __name__ == "__main__":
+    register()



More information about the Bf-extensions-cvs mailing list