Trumpet movie
четверг, 15 сентября 2016 г.
понедельник, 30 июня 2014 г.
пятница, 30 мая 2014 г.
четверг, 22 мая 2014 г.
Немножко дождя
Для сцены в мульте сделал окно :) Анимация через Dynamic Paint. Как раз немножко остыть.
четверг, 15 мая 2014 г.
Скрипт для рендера всех кадров с keyframe
Скрипт для рендера всех кадров с keyframe. Делает панельку во вкладке Render.
import bpy import os def build_frame_set(context): current_frame = context.scene.frame_current frames = {current_frame} for action in bpy.data.actions: if action.users > 0 and not action.use_fake_user or\ action.users > 1 and action.use_fake_user: for fcurve in action.fcurves: for point in fcurve.keyframe_points: frame_nr = int(point.co[0]) if frame_nr > current_frame: frames.add(frame_nr) return frames def find_next_frame(context, frame_set, next_frame): next_frame += 1 last_frame = context.scene.frame_end while next_frame not in frame_set and next_frame <= last_frame: next_frame += 1 return next_frame if next_frame in frame_set else None def render_frame(context, frame_counter, path): context.scene.render.filepath = os.path.join(path, str(frame_counter).zfill(4)) bpy.ops.render.render(write_still=True) class RenderKeyframesOperator(bpy.types.Operator): """Tooltip""" bl_idname = "render.render_keyframes" bl_label = "Render keyframes only" @classmethod def poll(cls, context): return True def execute(self, context): current_frame = context.scene.frame_current render_path = context.scene.render.filepath next_frame = current_frame frame_set = build_frame_set(context) while True: bpy.context.scene.frame_set(next_frame) render_frame(context, next_frame, render_path) print("Frame {}".format(next_frame)) next_frame = find_next_frame(context, frame_set, next_frame) if next_frame is None: break # restore context.scene.render.filepath = render_path bpy.context.scene.frame_set(current_frame) return {'FINISHED'} class RenderKeyframePanel(bpy.types.Panel): """Creates a Panel with keyframe render button""" bl_label = "Render keyframes" bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' bl_context = "render" def draw(self, context): layout = self.layout scene = context.scene row = layout.row(align=True) row.prop(scene, "frame_current") row.prop(scene, "frame_end") row = layout.row() row.scale_y = 2.0 row.operator("render.render_keyframes") def register(): bpy.utils.register_class(RenderKeyframesOperator) bpy.utils.register_class(RenderKeyframePanel) def unregister(): bpy.utils.unregister_class(RenderKeyframesOperator) bpy.utils.unregister_class(RenderKeyframePanel) if __name__ == "__main__": register()
вторник, 1 апреля 2014 г.
понедельник, 13 января 2014 г.
Что это?
Ещё по незнанию написал скрипт Similar Crease Selection, оказалось в блендере есть такая штука, правда только в режиме Edge. Но мож кому пригодится, сделан через bmesh.
import bpy import bmesh class SimilarCreaseOperator(bpy.types.Operator): """Select edges by crease""" bl_idname = "mesh.select_similar_crease" bl_label = "Select similar crease" RESOLUTION = 0.0001 @classmethod def poll(cls, context): return context.mode == 'EDIT_MESH' and context.active_object is not None def execute(self, context): obj = context.edit_object bm = bmesh.from_edit_mesh(obj.data) if obj.data.total_edge_sel == 0: return {'FINISHED'} crease_lay = bm.edges.layers.crease['SubSurfCrease'] creases = [edge[crease_lay] for edge in bm.edges if edge.select and edge[crease_lay] > self.RESOLUTION] if len(creases) == 0: return {'FINISHED'} for edge in bm.edges: edge_crease = edge[crease_lay] if not edge.select and edge_crease > self.RESOLUTION: for crease in creases: if crease + self.RESOLUTION >= edge_crease and crease - self.RESOLUTION <= edge_crease: edge.select_set(True) bmesh.update_edit_mesh(obj.data, False, False) return {'FINISHED'} def register(): bpy.utils.register_class(SimilarCreaseOperator) def unregister(): bpy.utils.unregister_class(SimilarCreaseOperator) if __name__ == "__main__": register()
Подписаться на:
Сообщения (Atom)