2025年11月10日 星期一

雙11購物節 越來越爛的購物節

 其實早雙11之後跑出個雙12的時候就知道他會越來越爛了

今年是真的沒什麼好康,就算有也是要買個兩箱三箱飲料清庫存才有。

 我買了一枝wacom筆,有便宜到一些,但也就這樣。

沒有哪種失心瘋的感覺。我另外一個看上的硬碟

也要買足26tb才會有可接受的優惠
簡單來說就是出清大貨的日子吧。

雙12應該也是了。 

2025年8月26日 星期二

2024年12月1日 星期日

2024/12/02 最推的blender插件

2024年7月22日 星期一

【4.2LTS】Blender 中英雙語翻譯,材質、幾何、界面翻譯

直接進入

C:\Program Files\Blender Foundation\Blender 4.2\4.2\datafiles\locale

去替換隨便一個語言的 blender.mo 檔案即可

下載



 

2024年4月9日 星期二

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()

2023年12月20日 星期三

[AE腳本] 筆記向: 取得所有效果的變更參數

只要複製內容, 新建一個getAllChangeProperties.jsx 檔案,

然後記事本打開, 貼上進去, 再用ae調用即可 

[AE表達式] 目前幀秒顯示 | 動畫攝影

// 補零函數

function PrefixZero(num, n) {

    var zeros = new Array(n + 1).join('0');

    return (zeros + num).slice(-n);

}


// 目前合成幀率(可以手改為24)

fps = 1 / thisComp.frameDuration;


// 目前秒整數/幀數

second = PrefixZero(Math.floor(time), 2);

current_frame = PrefixZero((time * fps) % fps + 1, 2); 


// 總幀數

total_frames = PrefixZero(timeToFrames(), 4);


// 合成靜態總秒

 comp_seconds = Math.floor(thisComp.duration);


// 合成靜態總幀

comp_frame = PrefixZero(timeToFrames(thisComp.duration) % fps, 2);


// 輸出

second + " + " + current_frame + "   " + total_frames+ "k" + "   " + "(總時長 " +  comp_seconds + "+" + comp_frame +"k)"

2023年3月9日 星期四

通過BPY重建幾何節點應用後丟失的UV坐標

import bpy
obData=bpy.context.object.data
obCopy=obData.copy()
for i in obCopy.attributes:
    if i.data_type == 'FLOAT2' and i.domain == 'CORNER':
        obUv = obData.uv_layers.new()
        for a,b in enumerate(i.data):
            obUv.data[a].uv = b.vector
bpy.data.meshes.remove(obCopy)


出處



2023年3月2日 星期四

循環 alembic 動畫

 4張循環的話在frame屬性中,可以設置關鍵幀。

下面的表達式會循環第1、2、3、4幀,直接在Frame屬性中輸入如下:

(frame - 1) % 4 + 1