1 # ##### BEGIN GPL LICENSE BLOCK #####
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 # ##### END GPL LICENSE BLOCK #####
22 "name": "Clay Render",
23 "author": "Fabio Russo <ruesp83@libero.it>",
25 "blender": (2, 56, 0),
26 "location": "Render > Clay Render",
27 "description": "This script, applies a temporary material to all objects"
29 "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/Py/"
30 "Scripts/Clay_Render",
34 from bpy
.types
import Operator
35 from bpy
.props
import BoolProperty
39 mat_id
= bpy
.data
.materials
.new("Clay_Render")
41 mat_id
.diffuse_shader
= "OREN_NAYAR"
42 mat_id
.diffuse_color
= 0.800, 0.741, 0.536
43 mat_id
.diffuse_intensity
= 1
44 mat_id
.roughness
= 0.909
46 mat_id
.specular_shader
= "COOKTORR"
47 mat_id
.specular_color
= 1, 1, 1
48 mat_id
.specular_hardness
= 10
49 mat_id
.specular_intensity
= 0.115
52 def Alternative_Clay(self
, msg
):
56 for mat
in bpy
.data
.materials
:
57 if (mat
.Mat_Clay
) and (not Find
):
68 "The material \"" + AM
.name
+ "\" is set as Clay")
71 self
.report({'WARNING'},
72 "Two or more materials are set as "
73 "Clay. \"" + AM
.name
+ "\" will be used")
79 Mat
= bpy
.data
.materials
["Clay_Render"]
84 if bpy
.data
.materials
.get("Clay_Render"):
90 class ClayPinned(Operator
):
91 bl_idname
= "render.clay_pinned"
92 bl_label
= "Clay Pinned"
93 bl_description
= ("Keep current Clay Material settings if Clay Render is disabled\n"
94 "The Material will not have a Fake User set, so it'll be lost\n"
95 "on quitting Blender or loading / reloading a blend file")
97 def execute(self
, context
):
98 if bpy
.types
.Scene
.Clay_Pinned
:
99 bpy
.types
.Scene
.Clay_Pinned
= False
101 if bpy
.types
.Scene
.Clay
:
102 if bpy
.data
.materials
[0].users
== 0:
103 bpy
.data
.materials
.remove(Get_Mat())
104 bpy
.types
.Scene
.Clay_Pinned
= True
106 bpy
.types
.Scene
.Clay_Pinned
= True
111 class CheckClay(Operator
):
112 bl_idname
= "render.clay"
113 bl_label
= "Clay Render"
114 bl_description
= "Enable Clay render override"
116 def execute(self
, context
):
117 if bpy
.types
.Scene
.Clay
:
119 ac
= Alternative_Clay(self
, True)
123 rl
= context
.scene
.render
.layers
124 rl
.active
.material_override
= Get_Mat()
127 context
.scene
.render
.layers
.active
.material_override
= ac
129 bpy
.types
.Scene
.Clay
= False
132 context
.scene
.render
.layers
.active
.material_override
= None
133 if bpy
.types
.Scene
.Clay_Pinned
:
134 if bpy
.data
.materials
[0].users
== 0:
135 bpy
.data
.materials
.remove(Get_Mat())
136 bpy
.types
.Scene
.Clay
= True
141 def draw_clay_render(self
, context
):
142 ok_clay
= not bpy
.types
.Scene
.Clay
143 pin
= not bpy
.types
.Scene
.Clay_Pinned
145 box
= self
.layout
.box()
146 row
= box
.row(align
=True)
147 row
.operator(CheckClay
.bl_idname
, emboss
=True, icon
='RADIOBUT_ON' if
148 ok_clay
else 'RADIOBUT_OFF')
150 if Alternative_Clay(self
, False) is None:
152 if (bpy
.data
.materials
[0].users
== 0) or ok_clay
:
154 row
.prop(im
, "diffuse_color", text
="")
155 row
.operator(ClayPinned
.bl_idname
, text
="", icon
='PINNED' if
159 spacer_box
= row
.box()
160 sub_row
= spacer_box
.row(align
=True)
161 sub_row
.scale_y
= 0.5
162 sub_row
.label(text
="Clay Material applied to an Object", icon
="INFO")
164 spacer_box
= row
.box()
165 sub_row
= spacer_box
.row(align
=True)
166 sub_row
.scale_y
= 0.5
167 sub_row
.label(text
="Custom Material Clay", icon
="INFO")
170 def draw_clay_options(self
, context
):
171 cm
= context
.material
173 layout
.prop(cm
, "Mat_Clay", text
="Use as Clay", icon
="META_EMPTY", toggle
=True)
176 def draw_clay_warning(self
, context
):
177 if not bpy
.types
.Scene
.Clay
:
178 self
.layout
.label(text
="Clay Render Enabled", icon
="INFO")
182 bpy
.types
.Scene
.Clay
= BoolProperty(
184 description
="Use Clay Render",
187 bpy
.types
.Scene
.Clay_Pinned
= BoolProperty(
189 description
="Keep Clay Material",
192 bpy
.types
.Material
.Mat_Clay
= BoolProperty(
194 description
="Use as Clay Material render override",
198 bpy
.utils
.register_class(ClayPinned
)
199 bpy
.utils
.register_class(CheckClay
)
200 bpy
.types
.RENDER_PT_render
.prepend(draw_clay_render
)
201 bpy
.types
.MATERIAL_PT_options
.append(draw_clay_options
)
202 bpy
.types
.INFO_HT_header
.append(draw_clay_warning
)
206 bpy
.context
.scene
.render
.layers
.active
.material_override
= None
207 if (Exist_Mat()) and (bpy
.data
.materials
[0].users
== 0):
208 bpy
.data
.materials
.remove(Get_Mat())
209 bpy
.utils
.unregister_class(ClayPinned
)
210 bpy
.utils
.unregister_class(CheckClay
)
211 bpy
.types
.RENDER_PT_render
.remove(draw_clay_render
)
212 bpy
.types
.MATERIAL_PT_options
.remove(draw_clay_options
)
213 bpy
.types
.INFO_HT_header
.remove(draw_clay_warning
)
215 del bpy
.types
.Scene
.Clay
216 del bpy
.types
.Scene
.Clay_Pinned
217 del bpy
.types
.Material
.Mat_Clay
220 if __name__
== "__main__":