Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormeta-androcto <meta.androcto1@gmail.com>2017-04-17 05:22:40 +0300
committermeta-androcto <meta.androcto1@gmail.com>2017-04-17 05:22:40 +0300
commit2def7cb534c97b6b99999a0829cfb28bc1dfe694 (patch)
tree3b6b126088ba1552913d79a0cc8cb03b62cabca1 /render_clay.py
parent6e967f1ac2432a69dd4808018165689850adb511 (diff)
Initial Commit Render Clay: T51229 T50357
Diffstat (limited to 'render_clay.py')
-rw-r--r--render_clay.py225
1 files changed, 225 insertions, 0 deletions
diff --git a/render_clay.py b/render_clay.py
new file mode 100644
index 00000000..d53878b0
--- /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@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()