-
Luca Bonavita authored
READ THIS TO AVOID A LOT OF WORK! New way of linking to tracker pages: just use the parameter "aid" (artifact ID), to avoid a lot of manual updates later in wiki and svn. Example: ========= OLD WAY TO LINK TO TRACKER ----------------------------- Complete url of a script in Upload http://projects.blender.org/tracker/index.php?func=detail&aid=25349&group_id=153&atid=467 If we move this in contrib this url will become http://projects.blender.org/tracker/index.php?func=detail&aid=25349&group_id=153&atid=468 467 becomes 468, so we have to update this in wiki page. Later on, when this moves into Trunk, the url will become http://projects.blender.org/tracker/index.php?func=detail&aid=25349&group_id=153&atid=469 468 becomes 469, so we have to update the url in wiki page and svn. Annoying! NEW WAY TO LINK TO TRACKER ----------------------------- Best way to link to tracker page is using: http://projects.blender.org/tracker/index.php?func=detail&aid=25349 Use "func=detail" Use "aid" (which is the "artifact ID") DON'T use "group_id" (which is the project ID, bf-extensions is project 153) DON'T use "atid" (which is the "artifacts tracker ID") Like this, the url is unique, and we will avoid to update wiki pages and svn after moving pages
Luca Bonavita authoredREAD THIS TO AVOID A LOT OF WORK! New way of linking to tracker pages: just use the parameter "aid" (artifact ID), to avoid a lot of manual updates later in wiki and svn. Example: ========= OLD WAY TO LINK TO TRACKER ----------------------------- Complete url of a script in Upload http://projects.blender.org/tracker/index.php?func=detail&aid=25349&group_id=153&atid=467 If we move this in contrib this url will become http://projects.blender.org/tracker/index.php?func=detail&aid=25349&group_id=153&atid=468 467 becomes 468, so we have to update this in wiki page. Later on, when this moves into Trunk, the url will become http://projects.blender.org/tracker/index.php?func=detail&aid=25349&group_id=153&atid=469 468 becomes 469, so we have to update the url in wiki page and svn. Annoying! NEW WAY TO LINK TO TRACKER ----------------------------- Best way to link to tracker page is using: http://projects.blender.org/tracker/index.php?func=detail&aid=25349 Use "func=detail" Use "aid" (which is the "artifact ID") DON'T use "group_id" (which is the project ID, bf-extensions is project 153) DON'T use "atid" (which is the "artifacts tracker ID") Like this, the url is unique, and we will avoid to update wiki pages and svn after moving pages
render_clay.py 6.34 KiB
# ##### 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_addon_info = {
"name": "Clay Render",
"author": "Fabio Russo <ruesp83@libero.it>",
"version": (1, 1),
"blender": (2, 5, 5),
"api": 33568,
"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.5/Py/"\
"Scripts/Clay_Render",
"tracker_url": "https://projects.blender.org/tracker/index.php?"\
"func=detail&aid=22971",
"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 == 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.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.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()