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>2019-05-24 11:19:17 +0300
committermeta-androcto <meta.androcto1@gmail.com>2019-05-24 11:19:17 +0300
commit774a8331c371ad798c59b569d30be5c6e3ab169d (patch)
tree366a57c10ba8980ab06254da64b6b1d7285cab58 /object_animrenderbake.py
parent0aacb34c821740853d5de17aa7bd6f106ab63147 (diff)
object_animrenderbake: move top contrib: T63750
Diffstat (limited to 'object_animrenderbake.py')
-rw-r--r--object_animrenderbake.py214
1 files changed, 0 insertions, 214 deletions
diff --git a/object_animrenderbake.py b/object_animrenderbake.py
deleted file mode 100644
index ea9713bb..00000000
--- a/object_animrenderbake.py
+++ /dev/null
@@ -1,214 +0,0 @@
-# ##### 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 #####
-
-bl_info = {
- "name": "Animated Render Baker",
- "author": "Janne Karhu (jahka)",
- "version": (2, 0),
- "blender": (2, 75, 0),
- "location": "Properties > Render > Bake Panel",
- "description": "Renderbakes a series of frames",
- "category": "Render",
- "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
- "Scripts/Object/Animated_Render_Baker",
-}
-
-
-import bpy
-from bpy.props import IntProperty
-
-class OBJECT_OT_animrenderbake(bpy.types.Operator):
- bl_label = "Animated Render Bake"
- bl_description= "Bake animated image textures of selected objects"
- bl_idname = "object.anim_bake_image"
- bl_register = True
-
- def framefile(self, filepath, frame):
- """
- Set frame number to file name image.png -> image0013.png
- """
- import os
- fn, ext = os.path.splitext(filepath)
- return "%s%04d%s" % (fn, frame, ext)
-
- def invoke(self, context, event):
- import shutil
- is_cycles = (context.scene.render.engine == 'CYCLES')
-
- scene = context.scene
-
- start = scene.animrenderbake_start
- end = scene.animrenderbake_end
-
- # Check for errors before starting
- if start >= end:
- self.report({'ERROR'}, "Start frame must be smaller than end frame")
- return {'CANCELLED'}
-
- selected = context.selected_objects
-
- # Only single object baking for now
- if scene.render.use_bake_selected_to_active:
- if len(selected) > 2:
- self.report({'ERROR'}, "Select only two objects for animated baking")
- return {'CANCELLED'}
- elif len(selected) > 1:
- self.report({'ERROR'}, "Select only one object for animated baking")
- return {'CANCELLED'}
-
- if context.active_object.type != 'MESH':
- self.report({'ERROR'}, "The baked object must be a mesh object")
- return {'CANCELLED'}
-
- if context.active_object.mode == 'EDIT':
- self.report({'ERROR'}, "Can't bake in edit-mode")
- return {'CANCELLED'}
-
- img = None
-
- # find the image that's used for rendering
- # TODO: support multiple images per bake
- if is_cycles:
- # XXX This tries to mimic nodeGetActiveTexture(), but we have no access to 'texture_active' state from RNA...
- # IMHO, this should be a func in RNA nodetree struct anyway?
- inactive = None
- selected = None
- for mat_slot in context.active_object.material_slots:
- mat = mat_slot.material
- if not mat or not mat.node_tree:
- continue
- trees = [mat.node_tree]
- while trees and not img:
- tree = trees.pop()
- node = tree.nodes.active
- if node.type in {'TEX_IMAGE', 'TEX_ENVIRONMENT'}:
- img = node.image
- break
- for node in tree.nodes:
- if node.type in {'TEX_IMAGE', 'TEX_ENVIRONMENT'} and node.image:
- if node.select:
- if not selected:
- selected = node
- else:
- if not inactive:
- inactive = node
- elif node.type == 'GROUP':
- trees.add(node.node_tree)
- if img:
- break
- if not img:
- if selected:
- img = selected.image
- elif inactive:
- img = inactive.image
- else:
- for uvtex in context.active_object.data.uv_textures:
- if uvtex.active_render == True:
- for uvdata in uvtex.data:
- if uvdata.image is not None:
- img = uvdata.image
- break
-
- if img is None:
- self.report({'ERROR'}, "No valid image found to bake to")
- return {'CANCELLED'}
-
- if img.is_dirty:
- self.report({'ERROR'}, "Save the image that's used for baking before use")
- return {'CANCELLED'}
-
- if img.packed_file is not None:
- self.report({'ERROR'}, "Can't animation-bake packed file")
- return {'CANCELLED'}
-
- # make sure we have an absolute path so that copying works for sure
- img_filepath_abs = bpy.path.abspath(img.filepath, library=img.library)
-
- print("Animated baking for frames (%d - %d)" % (start, end))
-
- for cfra in range(start, end + 1):
- print("Baking frame %d" % cfra)
-
- # update scene to new frame and bake to template image
- scene.frame_set(cfra)
- if is_cycles:
- ret = bpy.ops.object.bake()
- else:
- ret = bpy.ops.object.bake_image()
- if 'CANCELLED' in ret:
- return {'CANCELLED'}
-
- # Currently the api doesn't allow img.save_as()
- # so just save the template image as usual for
- # every frame and copy to a file with frame specific filename
- img.save()
- img_filepath_new = self.framefile(img_filepath_abs, cfra)
- shutil.copyfile(img_filepath_abs, img_filepath_new)
- print("Saved %r" % img_filepath_new)
-
- print("Baking done!")
-
- return{'FINISHED'}
-
-
-def draw(self, context):
- layout = self.layout
-
- scene = context.scene
-
- row = layout.row()
- row.operator("object.anim_bake_image", text="Animated Bake", icon="RENDER_ANIMATION")
- rowsub = row.row(align=True)
- rowsub.prop(scene, "animrenderbake_start")
- rowsub.prop(scene, "animrenderbake_end")
-
-
-def register():
- bpy.utils.register_module(__name__)
-
- bpy.types.Scene.animrenderbake_start = IntProperty(
- name="Start",
- description="Start frame of the animated bake",
- default=1)
-
- bpy.types.Scene.animrenderbake_end = IntProperty(
- name="End",
- description="End frame of the animated bake",
- default=250)
-
- bpy.types.RENDER_PT_bake.prepend(draw)
- cycles_panel = getattr(bpy.types, "CYCLES_RENDER_PT_bake", None)
- if cycles_panel:
- cycles_panel.prepend(draw)
-
-
-def unregister():
- bpy.utils.unregister_module(__name__)
-
- # restore original panel draw function
- del bpy.types.Scene.animrenderbake_start
- del bpy.types.Scene.animrenderbake_end
-
- bpy.types.RENDER_PT_bake.remove(draw)
- cycles_panel = getattr(bpy.types, "CYCLES_RENDER_PT_bake", None)
- if cycles_panel:
- cycles_panel.remove(draw)
-
-
-if __name__ == "__main__":
- register()