EKK Tools - Edit Không Khó
Free Fusion Expression Library

Biến công thức thành chuyển động.

Hiểu Expression trong DaVinci Resolve từ con số 0. Học qua 6 bài viết, xem minh họa SVG theo thời gian và sao chép 31 mẫu Expression cho Motion, Text+, Mask và các node thường dùng.

06
Bài hướng dẫn
31
Công thức có ví dụ
100%
Hình vẽ SVG / CSS
Minh họa các vòng chuyển động của Fusion Expression bằng SVG
Lộ trình học

6 bài học, từ gốc đến ứng dụng

Mỗi bài có cách dùng, thông số cần dán, điều chỉnh công thức và cảnh báo các lỗi thường gặp.

Live SVG preview

Nhìn thấy Expression hoạt động

Kéo thanh thời gian để thay đổi frame. Đây là mô phỏng toán học trong trình duyệt, không phải engine Fusion.

Minh họa chuyển động SVGFrame 000
EKKSize: 1.000
0/120
Motion

Pulse — phóng to, thu nhỏ

Size dao động quanh 1.0, biên độ 0.12. Giảm 8 xuống 4 để nhịp nhanh hơn.

Dán vào · Transform1 → Size
1 + 0.12*sin(time/8)

Demo mô phỏng công thức bằng JavaScript; hiệu ứng thực tế vẫn phải kiểm tra trong Fusion.

Copy & apply

Thư viện 31 Expression miễn phí

Chọn đúng loại tham số trước khi dán vào Fusion. Mỗi mẫu có giải thích và liên kết tới bài học.

MotionDễ

Pulse — phóng to, thu nhỏ

Size dao động quanh 1.0, biên độ 0.12. Giảm 8 xuống 4 để nhịp nhanh hơn.

Dán vào · Transform1 → Size
1 + 0.12*sin(time/8)
Xem hướng dẫn →
MotionDễ

Xoay liên tục

Góc xoay tăng 3° mỗi frame; tốc độ tính theo frame, không tự cố định theo giây.

Dán vào · Transform1 → Angle
time*3
Xem hướng dẫn →
MotionDễ

Trôi nổi theo trục Y

Giữ X ở giữa khung hình; Y dao động ±0.08 trong hệ tọa độ chuẩn hóa.

Dán vào · Transform1 → Center
Point(0.5, 0.5 + 0.08*sin(time/12))
Xem hướng dẫn →
MotionTrung bình

Chuyển động tròn

Cos điều khiển X, sin điều khiển Y; tạo vòng lặp liên tục quanh tâm khung hình.

Dán vào · Transform1 → Center
Point(0.5+0.18*cos(time/20), 0.5+0.18*sin(time/20))
Xem hướng dẫn →
MotionDễ

Mờ/hiện mềm mại

Blend liên tục thay đổi trong khoảng 0–1 theo sóng sin.

Dán vào · Merge1 → Blend
0.5 + 0.5*sin(time/10)
Xem hướng dẫn →
MotionTrung bình

Phóng to Ease In/Out một lần

Tăng Size từ 0 lên 1 trong 24 frame đầu, có tăng/giảm tốc; giữ ở 1 sau đó.

Dán vào · Transform1 → Size
0.5 - 0.5*cos(min(1,max(0,(time-comp.RenderStart)/24))*pi)
Xem hướng dẫn →
MotionTrung bình

Rung nhẹ có kiểm soát

Cộng nhiều sóng với nhịp khác nhau tạo rung giả ngẫu nhiên; đây không phải nhiễu random thực.

Dán vào · Transform1 → Center
Point(0.5+0.02*sin(time*1.7)+0.01*sin(time*3.1), 0.5+0.02*cos(time*1.4))
Xem hướng dẫn →
Text+Dễ

Typewriter — chữ hiện dần

Nhập chữ vào Styled Text (có thể dùng tiếng Việt), rồi dán Expression ở Write On → End; chữ hiện dần trong 45 frame.

Dán vào · Text1 → Text → Write On → End
min(1,max(0,(time-comp.RenderStart)/45))
Xem hướng dẫn →
Text+Trung bình

Đếm từ 0 đến 100

Tăng từ 0 đến 100 trong 60 frame; cố định ở 100 khi kết thúc.

Dán vào · Text1 → Styled Text
Text(string.format("%d", math.floor(100*min(1,max(0,(time-comp.RenderStart)/60)))))
Xem hướng dẫn →
Text+Trung bình

Phần trăm tiến trình

Giống bộ đếm nhưng thêm dấu % bằng ký tự %% trong string.format.

Dán vào · Text1 → Styled Text
Text(string.format("%d%%", math.floor(100*min(1,max(0,(time-comp.RenderStart)/60)))))
Xem hướng dẫn →
Text+Trung bình

Nhãn shot tự cập nhật

Tạo SHOT 001, SHOT 002… mỗi 12 frame; .. dùng để nối chuỗi.

Dán vào · Text1 → Styled Text
Text("SHOT " .. string.format("%03d", math.floor((time-comp.RenderStart)/12)+1))
Xem hướng dẫn →
NodeTrung bình

Theo sau chậm 5 frame

Đọc Blend của Merge1 tại thời điểm trước đó 5 frame; chú ý biên đầu comp.

Dán vào · Merge2 → Blend
Merge1:GetValue("Blend",time-5)
Xem hướng dẫn →
MaskTrung bình

Vòng tròn lan tỏa — Width

Width tăng từ 0.08 lên 0.45 trong 60 frame rồi lặp lại; vòng giãn dần từ tâm.

Dán vào · Ellipse1 → Width
0.08 + (0.45 - 0.08) * ( (time/60) - floor(time/60) )
Xem hướng dẫn →
MaskDễ

Vòng tròn — Height bám theo Width

Height lấy đúng giá trị Width của chính node để vòng luôn tròn; nếu Viewer thấy méo, xem lưu ý trong bài.

Dán vào · Ellipse1 → Height
self.Width
Xem hướng dẫn →
MaskTrung bình

Vòng tan nhanh (Level dạng mũ)

Level giảm từ 1 xuống khoảng 0.05 theo hàm mũ: vòng rõ lúc đầu rồi tan nhanh.

Dán vào · Ellipse1 → Level
exp( -3 * ( (time/60) - floor(time/60) ) )
Xem hướng dẫn →
MaskDễ

Vòng mờ đều (Level tuyến tính)

Level giảm đều từ 1 về 0 trong 60 frame; dùng thay dòng exp khi muốn fade đều.

Dán vào · Ellipse1 → Level
1 - ( (time/60) - floor(time/60) )
Xem hướng dẫn →
MaskTrung bình

Mở rộng từ tâm có ease-out

Width tăng từ 0 lên 1 trong 20 frame, nhanh lúc đầu rồi chậm dần; dùng làm mask lộ hình.

Dán vào · Rectangle1 → Width
1 - pow(1 - min(1,max(0,(time-comp.RenderStart)/20)), 3)
Xem hướng dẫn →
Text+Dễ

Con trỏ gõ chữ nhấp nháy

Thêm con trỏ | sau chữ: hiện 12 frame, ẩn 12 frame; đổi nội dung trong dấu nháy.

Dán vào · Text1 → Styled Text
Text("EDIT KHÔNG KHÓ" .. iif(time%24 < 12, "|", ""))
Xem hướng dẫn →
Text+Nâng cao

Đếm giá tiền có dấu chấm

Số tăng từ 0 lên 1.250.000đ trong 60 frame, tự thêm dấu chấm ngăn cách hàng nghìn; đổi 1250000 thành giá của bạn.

Dán vào · Text1 → Styled Text
Text(string.gsub(string.reverse(string.gsub(string.reverse(tostring(math.floor(1250000*min(1,max(0,(time-comp.RenderStart)/60))))), "(%d%d%d)", "%1.")), "^%.", "") .. "đ")
Xem hướng dẫn →
Text+Nâng cao

Đồng hồ phút:giây

Đếm mm:ss theo FPS của comp, không cần nhập tay FPS.

Dán vào · Text1 → Styled Text
Text(string.format("%02d:%02d", math.floor(time/comp:GetPrefs("Comp.FrameFormat.Rate")/60), math.floor(time/comp:GetPrefs("Comp.FrameFormat.Rate"))%60))
Xem hướng dẫn →
Text+Trung bình

Chữ bung rộng rồi thu khít

Khoảng cách chữ từ 1.8 giảm mượt về 1.0: kiểu tiêu đề mở đầu.

Dán vào · Text1 → Character Spacing
1 + 0.8*exp(-max(0,time-comp.RenderStart)/12)
Xem hướng dẫn →
Text+Trung bình

Typewriter có ease-out

Chữ hiện nhanh lúc đầu rồi chậm dần trong 45 frame.

Dán vào · Text1 → Text → Write On → End
1 - pow(1 - min(1,max(0,(time-comp.RenderStart)/45)), 3)
Xem hướng dẫn →
MotionTrung bình

Trượt vào có ease-out

Trượt từ mép trái (X = 0) về giữa khung trong 20 frame, giảm tốc mượt.

Dán vào · Transform1 → Center
Point(0.5 - 0.5*pow(1-min(1,max(0,(time-comp.RenderStart)/20)),3), 0.5)
Xem hướng dẫn →
MotionNâng cao

Phóng to nảy (overshoot)

Size từ 0 vọt qua 1 rồi dao động tắt dần quanh 1.0.

Dán vào · Transform1 → Size
1 - exp(-0.25*max(0,time-comp.RenderStart))*cos(0.5*max(0,time-comp.RenderStart))
Xem hướng dẫn →
Node khácTrung bình

Rõ nét dần (pull focus)

Blur Size 20 giảm theo hàm mũ về 0: ảnh mờ rồi rõ nét.

Dán vào · Blur1 → Blur Size
20*exp(-max(0,time-comp.RenderStart)/10)
Xem hướng dẫn →
Node khácTrung bình

Đèn chập chờn

Gain dao động nhẹ khoảng ±0.08 nhờ hai sóng sin lệch nhịp.

Dán vào · BrightnessContrast1 → Gain
1 + 0.08*sin(time*0.9)*sin(time*2.3)
Xem hướng dẫn →
Node khácDễ

Glow nhịp thở

Cường độ Glow dao động giữa 0.2 và 0.8.

Dán vào · Glow1 → Glow
0.5 + 0.3*sin(time/10)
Xem hướng dẫn →
Cần biết

Expression không phải phép màu

01 / THAM SỐ

Dán đúng trường

Point cho Center; số cho Size, Angle, Blend; Text cho Styled Text.

02 / THỜI GIAN

Time là frame

Cùng công thức sẽ chạy khác tốc độ theo giây khi FPS thay đổi.

03 / UNICODE

Text tiếng Việt

Typewriter nên dùng Write On; string.sub có thể làm hỏng dấu UTF-8.

04 / KIỂM THỬ

Thử trong Viewer

Giá trị công thức đã đối chiếu trong Resolve Studio 21.1; hình render và phiên bản khác cần anh em kiểm tra lại.

Nguồn: Blackmagic Design — tài liệu chính thức DaVinci Resolve 21.1, Chương 73 — bản tra cứu bên thứ ba, Fusion Expressions Cookbook. Tất cả sơ đồ, hình và mô phỏng là minh họa gốc xây bằng SVG/HTML/CSS, không phải ảnh giao diện DaVinci Resolve; giá trị của các công thức đã được đối chiếu bằng script trong DaVinci Resolve Studio 21.1 (macOS); hình render thực tế và các phiên bản Resolve khác chưa được kiểm tra.

Muốn hiểu Node và Motion bài bản hơn?

Khóa Fusion 04 buổi đi từ tư duy Node, Animation đến Motion Graphic, Tracking và Composition 3D.