пятница, 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()