2024年1月26日 星期五

京都動畫 小林家的龍女僕 官方總複習 分鏡集+原畫集 開箱

這本是在京都車站的特約商店購買的,這邊直營的購買的錢都會到京阿尼手裡

魔法紀錄 魔法少女小圓外傳 魔法少女變身原畫集 vol.1 開箱

 

 
 
噹噹噹噹, 魔法少女小圓外傳 魔法少女變身原畫集來了
 他這個一共目前有兩集,都是滿滿的變身原畫

2024年1月25日 星期四

首届动画花火活动营之嘉宾主题分享内容 第一章



分享嘉宾是作为原画师的Dogdog绘,从业6年+,

代表作品《英雄再临》、《没出息的阴阳师一家》第3季、《忍者必须死3》OP动画重制版。


先自我介绍,我叫DogDog绘,也可以叫我华哥(仪式感很重要),那我们就开始今天的分享。


https://www.bilibili.com/video/BV1SG411H7W1?vd_source=e17b5aa636fbe4e9dc355a15f40f9494


https://www.bilibili.com/video/BV1nF411K7mo?vd_source=e17b5aa636fbe4e9dc355a15f40f9494


一、对比



首先是第一个,就是我们要讲的第一个东西是相对论(对比),世间万物都是从相对论开始的。


最近英雄联盟皮肤打折了,然后我说要买,说:“好赚呐,打五折了,买买买!”

然后还想起那个表情包就说:“对对对,你赚了,我亏大了。”

但为什么我会觉得 50 块钱的皮肤是赚的?这皮肤真的值这个钱吗?

其实因为有了之前它原价是 100 的皮肤,现在打五折了我就(觉得)赚。

但平时我们真正要思考的是:这个皮肤真的值 50 块钱吗?


其实人类无时无刻都在比较:什么东西值钱,什么不值钱, 什么速度快什么速度慢,

包括幸福感什么的都是。

(比如)小明他得了 2 万块钱年终奖,他决定买些东西给妈妈、买些东西给老婆、买些东西给孩子,他觉得很快乐。突然他知道他有个同事年终奖是 5 万,他就非常不开心了。


但其实他自己得到的并没有变化,但是这种互相的对比就让他觉得自己是亏了,就不开心了。

回到画画上,其实很多东西都是对比出来的。


在原画上有些东西我们可以看得出:

对比有很多种,可以是大小的对比、速度的对比、还有信息量、节奏等。

2024年1月12日 星期五

etAEChangeProperties取得AE所有變更過後的特效參數 (aescripts)

 

download: https://2996510522021.gumroad.com/l/fzjrlc


學習別人或書中分享的工程檔的時候,老是不知道對方改了哪些參數搞得很煩
這個時候這個小腳本可以幫上忙。畢竟參數..... 實在是太多了 

2024年1月11日 星期四








layerNum = 1
control = comp("compname").layer("layername").effect("Slider Control")("Slider");
if(control == layerNum)
{value = 100;}
else
{value = 0;}

2024年1月8日 星期一

"DISABLE IN VIEWPORTS"属性设置关键帧

通过手动选择的方式设置关键帧,你可以使用以下脚本。这个脚本允许你选择一个或多个对象,然后在当前帧为它们的"DISABLE IN VIEWPORTS"属性设置关键帧。



import bpy

# 获取当前场景
scene = bpy.context.scene

# 记录当前帧数
current_frame = scene.frame_current

# 获取当前选择的对象列表
selected_objects = bpy.context.selected_objects

# 遍历选中的对象
for obj in selected_objects:
    # 设置当前帧
    scene.frame_set(current_frame)

    # 获取当前对象的“DISABLE IN VIEWPORTS”属性的值
    disable_in_viewports = obj.hide_viewport

    # 在当前帧启用或禁用视口显示
    obj.hide_viewport = disable_in_viewports

    # 插入关键帧
    obj.keyframe_insert(data_path="hide_viewport")

    # 恢复原始帧数
    scene.frame_set(current_frame)

2024年1月7日 星期日

Notepad++ 直接執行python

cmd /k C:\Users\XXXXXPLAYER\AppData\Local\Programs\Python\Python312/python.exe "$(FULL_CURRENT_PATH)" &; PAUSE &; EXIT

 

#綠色是你py安裝目錄

2024年1月1日 星期一

Blender將粒子系統轉換為動畫網格(py腳本) 帶旋轉約束

import bpy

# Set these to False if you don't want to key that property.
KEYFRAME_LOCATION = True
KEYFRAME_ROTATION = True
KEYFRAME_SCALE = True
KEYFRAME_VISIBILITY = False  # Viewport and render visibility.
KEYFRAME_VISIBILITY_SCALE = True


def create_objects_for_particles(ps, obj):
    # Duplicate the given object for every particle and return the duplicates.
    # Use instances instead of full copies.
    obj_list = []
    mesh = obj.data
    particles_coll = bpy.data.collections.new(name="particles")
    bpy.context.scene.collection.children.link(particles_coll)

    for i, _ in enumerate(ps.particles):
        dupli = bpy.data.objects.new(
                    name="particle.{:03d}".format(i),
                    object_data=mesh)
        particles_coll.objects.link(dupli)
        obj_list.append(dupli)
    return obj_list

def match_and_keyframe_objects(ps, obj_list, start_frame, end_frame):
    # Match and keyframe the objects to the particles for every frame in the
    # given range.
    for frame in range(start_frame, end_frame + 1):
        print("frame {} processed".format(frame))
        bpy.context.scene.frame_set(frame)
        for p, obj in zip(ps.particles, obj_list):
            match_object_to_particle(p, obj)
            keyframe_obj(obj)

def match_object_to_particle(p, obj):
    # Match the location, rotation, scale and visibility of the object to
    # the particle.
    loc = p.location
    rot = p.rotation
    size = p.size
    if p.alive_state == 'ALIVE':
        vis = True
    else:
        vis = False
    obj.location = loc
    # Set rotation mode to quaternion to match particle rotation.
    obj.rotation_mode = 'QUATERNION'
    obj.rotation_quaternion = rot
    if KEYFRAME_VISIBILITY_SCALE:
        if vis:
            obj.scale = (size, size, size)
        if not vis:
            obj.scale = (0.001, 0.001, 0.001)
    obj.hide_viewport = not(vis) # <<<-- this was called "hide" in <= 2.79
    obj.hide_render = not(vis)

def keyframe_obj(obj):
    # Keyframe location, rotation, scale and visibility if specified.
    if KEYFRAME_LOCATION:
        obj.keyframe_insert("location")
    if KEYFRAME_ROTATION:
        obj.keyframe_insert("rotation_quaternion")
    if KEYFRAME_SCALE:
        obj.keyframe_insert("scale")
    if KEYFRAME_VISIBILITY:
        obj.keyframe_insert("hide_viewport") # <<<-- this was called "hide" in <= 2.79
        obj.keyframe_insert("hide_render")
        
        
def add_copy_rotation_constraint(obj):
    # Add Copy Rotation constraint to the object.
    copy_rotation_constraint = obj.constraints.new(type='COPY_ROTATION')
    
    # Set the target to the original animated object (assuming it's the active object).
    copy_rotation_constraint.target = bpy.context.selected_objects[0]
    copy_rotation_constraint.owner_space = 'LOCAL'

def main():
    #in 2.8 you need to evaluate the Dependency graph in order to get data from animation, modifiers, etc
    depsgraph = bpy.context.evaluated_depsgraph_get()

    # Assume only 2 objects are selected.
    # The active object should be the one with the particle system.
    ps_obj = bpy.context.object
    ps_obj_evaluated = depsgraph.objects[ ps_obj.name ]
    obj = [obj for obj in bpy.context.selected_objects if obj != ps_obj][0]
    
    for psy in ps_obj_evaluated.particle_systems:         
        ps = psy  # Assume only 1 particle system is present.
        start_frame = bpy.context.scene.frame_start
        end_frame = bpy.context.scene.frame_end
        obj_list = create_objects_for_particles(ps, obj)
        match_and_keyframe_objects(ps, obj_list, start_frame, end_frame)
        
        for generated_obj in obj_list:
            add_copy_rotation_constraint(generated_obj)

if __name__ == '__main__':
    main()