[Bf-extensions-cvs] [7cde1c9] master: Fix T45879: Object Animated Render Baker options not showing up in Render->Bake, with Cycles engine
Bastien Montagne
noreply at git.blender.org
Mon Aug 24 12:51:05 CEST 2015
Commit: 7cde1c98a02c78c26154edf3cef2ef9fd8936ad1
Author: Bastien Montagne
Date: Mon Aug 24 12:48:00 2015 +0200
Branches: master
https://developer.blender.org/rBA7cde1c98a02c78c26154edf3cef2ef9fd8936ad1
Fix T45879: Object Animated Render Baker options not showing up in Render->Bake, with Cycles engine
Take Two. Not really happy with our current baking API tbh, there are many things that look messy
(even inside Blender code, how can a func named 'ED_object_get_active_image' can be reserved to new shading system???),
but this should do it for now. Just avoid too much exotic node systems with Cycles and this addon,
and/or clearly select/activate the image tex node containing the picture you want to use as target.
Based on a patch by Edward Gabriel Rowlett-Barbu (Zadirion), many thanks.
===================================================================
M object_animrenderbake.py
===================================================================
diff --git a/object_animrenderbake.py b/object_animrenderbake.py
index ce04f60..552ac80 100644
--- a/object_animrenderbake.py
+++ b/object_animrenderbake.py
@@ -19,8 +19,8 @@
bl_info = {
"name": "Animated Render Baker",
"author": "Janne Karhu (jahka)",
- "version": (1, 0),
- "blender": (2, 65, 0),
+ "version": (2, 0),
+ "blender": (2, 75, 0),
"location": "Properties > Render > Bake Panel",
"description": "Renderbakes a series of frames",
"category": "Object",
@@ -48,9 +48,10 @@ class OBJECT_OT_animrenderbake(bpy.types.Operator):
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
@@ -82,12 +83,46 @@ class OBJECT_OT_animrenderbake(bpy.types.Operator):
# find the image that's used for rendering
# TODO: support multiple images per bake
- 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
+ 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")
@@ -111,7 +146,10 @@ class OBJECT_OT_animrenderbake(bpy.types.Operator):
# update scene to new frame and bake to template image
scene.frame_set(cfra)
- ret = bpy.ops.object.bake_image()
+ if is_cycles:
+ ret = bpy.ops.object.bake()
+ else:
+ ret = bpy.ops.object.bake_image()
if 'CANCELLED' in ret:
return {'CANCELLED'}
More information about the Bf-extensions-cvs
mailing list