RemixStudio

Hướng dẫn

Tab Hiệu ứng — Các đối tượng liên hệ với nhau như thế nào

⚠️ CẢNH BÁO ĐỘ TƯƠI — chưa đối chiếu lại sau G2–G5. Tài liệu này sửa lần cuối trước đợt G2–G5 (hợp nhất hai đường render, chọn nhiều clip, keyframe automation, thư viện ảnh động). Kiểm bằng grep: nó không nhắc tới một tính năng nào trong số đó. Phần mô tả giao diện vì thế có thể đã lạc hậu. Khi nghi ngờ, tin test và kịch bản UiDrive trước.

Tài liệu dành cho người dùng. Mục tiêu: hiểu được Effect, Look, Timeline, Track, Clip, Vùng chọn và Sơ đồ dây gắn kết ra sao, để biết “bấm cái gì thì ra cái gì”. Nội dung mô tả đúng cách phần mềm đang chạy thật (rà từ mã nguồn), không phải tính năng dự kiến.

Nếu bạn chỉ nhớ được một câu: effect là công thức, look là món nấu ra từ công thức, clip là suất phục vụ món đó lên dòng thời gian — và cảnh là cả buổi diễn mà công tắc trên bo chọn để chạy. Bốn tầng, bốn tên, không tên nào dùng thay tên nào.


1. Bảy khái niệm cốt lõi, một câu chuyện

Hãy hình dung bạn đang dàn một màn trình diễn ánh sáng. Có 7 khái niệm, xếp thành hai “thế giới” và một cây cầu nối:

Thế giới vật lý — bạn có gì để thắp sáng (Tab Sơ đồ dây):

Khái niệm Là gì Ví von
Controller Bo mạch điều khiển, có nhiều cổng Ổ cắm điện nhiều lỗ
Strip Một dải LED nối vào 1 cổng, các LED xếp theo thứ tự Một sợi đèn nháy
LED Một điểm sáng, có vị trí (X, Y) trên bản vẽ Một bóng đèn
Collection Một nhóm LED có tên (vd. “Cánh trái”, “Vòng ngoài”) Một nhóm bạn đặt tên sẵn để gọi cả nhóm

⚠️ Collection CHƯA DÙNG ĐƯỢC trong bản hiện tại (audit 2026-07-16). Mô hình dữ liệu và phép gán (WiringV2Mutations.SetLedsCollection) đã có trong lõi, nhưng chưa có lệnh/nút nào trên giao diện để gom LED thành Collection — không code path nào gán Led.CollectionId, và migrator V1→V2 cũng chưa map Layer → CollectionId. Hệ quả: mọi Collection đều rỗng, nên kiểu vùng chọn “Theo Collection” ở §3 hiện không chọn được LED nào. Phần nói về Collection dưới đây mô tả thiết kế dự kiến, chưa phải thứ bạn bấm được hôm nay.

Thế giới sáng tạo — bạn muốn chúng sáng thế nào (Tab Hiệu ứng):

Khái niệm Là gì Ví von
Effect (Hiệu ứng) Một thuật toán vẽ màu theo thời gian (Rainbow, Chase, Fire, Plasma, Strobe…). Có hơn một chục cái dựng sẵn trong Thư viện Một “công thức” pha màu động
Look (trong mã: Look) Một gói gồm effect kèm tham số (màu, tốc độ, độ mờ, kiểu hòa trộn) Một “món ăn” nấu từ công thức
Clip (Đoạn) Một Look được đặt lên dòng thời gian ở một khoảng (bắt đầu → kết thúc), kèm vùng chọn LED riêng Một “suất phục vụ” món ăn đó, vào đúng giờ, cho đúng bàn

Chữ “cảnh” KHÔNG còn dùng cho vật này. Theo ADR-0012, “cảnh” nay là đơn vị NẠP ĐƯỢC mà công tắc trên bo chọn — một tầng đứng TRÊN timeline. Trên giao diện, thứ bạn thao tác vẫn gọi là clip; thứ clip trỏ tới gọi là look. Xem §1.1.

Cây cầu — Vùng chọn (Selection): mỗi Clip mang theo một Vùng chọn LED trả lời câu hỏi “effect này sáng trên những LED nào?”. Đây chính là chỗ nối thế giới sáng tạo vào thế giới vật lý.

Và tất cả nằm trên:

Khái niệm Là gì Ví von
Track (Lớp) Một dải chứa các Clip. Nhiều Track chồng lên nhau và hòa trộn (blend + độ mờ) Các lớp giấy bóng kính chồng lên nhau
Timeline (Dòng thời gian) Toàn bộ các Track theo trục thời gian Cuộn phim của cả buổi diễn

1.1. Ba tầng ở phía TRÊN clip: chế độ → cảnh → clip

Ba khái niệm dưới đây trả lời câu hỏi “khi rút dây máy tính ra, mạch biết phải chạy cái gì?”. Chúng là quyết định D1 của ADR-0012.

Tầng Là gì Ai chọn nó
chế độ (mode) Một tổ hợp vị trí của hai cần gạt trên bo → 4 trạng thái: ↓↓ ↑↓ ↓↑ ↑↑ Bạn, bằng tay, ngay trên mạch — không cần máy tính
cảnh (Scene) Một đơn vị nạp được: trọn bộ Track + Clip của riêng nó, cộng cấu hình “Nháy theo nhạc” của riêng nó Chế độ đang gạt trỏ tới nó — hoặc bộ chọn tự động theo nhạc
clip Một look được đặt lên dòng thời gian của một cảnh Bạn, khi soạn trong RemixStudio

Đọc từ trên xuống: gạt công tắc → ra một chế độ → chế độ trỏ tới một cảnh → cảnh đó có timeline riêng → trên timeline là các clip → mỗi clip trỏ tới một look → look chứa các effect.

Ba điều dễ nhầm, nói thẳng ra để khỏi nhầm:

✅ Tầng cảnh ĐÃ BẤM ĐƯỢC — bảng "Cảnh" nay nằm ở sidebar bên trái của Dòng thời gian (dock đáy), ngay sát cạnh timeline (Views/TimelineView.axaml nhúng Views/SceneTreeView.axaml làm sidebar trái với dải vạch Accent Bar nổi bật khi cảnh đang mở; Dock trái phía trên có hai tab: "Thư viện Hiệu ứng" và "Cài đặt sẵn" theo ModuleManifests.cs:113-114). Từ đó bạn thêm / đổi tên / xoá / chọn cảnh, và đặt bảng chế độ (vị trí công tắc nào nạp cảnh nào) trong khối gấp được ngay dưới danh sách cảnh. Lệnh chạy thật ở SceneEditService.cs:22-31 (Activate · Add · Rename · Remove · SetMode). Tệp dự án .rsp mang tầng này từ schema bản 4 (ProjectFormat.CurrentSchemaVersion = 4).

Bố cục mới chuẩn hóa theo luồng thị giác 1:1: chọn Cảnh ở cột trái $\rightarrow$ Dòng thời gian tương ứng bung ra ở bên phải, đồng thời giải phóng 100% không gian dock trái cho Thư viện hiệu ứng và Cài đặt sẵn.

⚠ Còn nợ thật: phần chạy trên mạch vẫn chờ đường xuất .rfx2 được nối hai đầu — firmware chưa đọc .rfx2. Đó là món nợ duy nhất còn lại của mục này.


2. Sơ đồ quan hệ

        THẾ GIỚI VẬT LÝ (Tab Sơ đồ dây)                THẾ GIỚI SÁNG TẠO (Tab Hiệu ứng)
   ┌───────────────────────────────────┐        ┌──────────────────────────────────────┐
   │ Controller ─cổng→ Strip ─┬→ LED    │        │  Thư viện Hiệu ứng                    │
   │                          │         │        │  (Rainbow, Chase, Fire, Plasma, …)    │
   │            Collection ◄──┘         │        └───────────────┬──────────────────────┘
   │            (nhóm LED có tên)       │                        │ kéo vào Timeline / bấm Apply
   └──────────────┬────────────────────┘                        ▼
                  │                                   ┌────────  Look  ─────────┐
                  │                                   │  1 (hoặc nhiều) Effect  │
                  │                                   │  + tham số, blend, opacity
                  │                                   └───────────┬─────────────┘
                  │                                               │  LookRef (trỏ tới Look)
                  │   Selection (Vùng chọn)                       ▼
                  └───────────────────────────────────►   ┌───  Clip  ───┐
                      "effect này sáng trên LED nào"       │ Start, Duration
                      (Tất cả / Chữ nhật / LED cụ thể /     │ + Vùng chọn LED
                       theo Collection)                     │ + ghi đè tham số
                                                            └──────┬───────┘
                                                                   │ nằm trên
                                                                   ▼
                                                              Track (Lớp) ──blend/opacity──┐
                                                                   │ thuộc                 │ nhiều Track
                                                                   ▼                       │ chồng lên nhau
                                                              Timeline ◄───────────────────┘
                                                                   │ thuộc
                                                                   ▼
                                                            Cảnh (Scene)  ── đơn vị NẠP ĐƯỢC
                                                                   ▲
                                                                   │ trỏ tới
                                                          chế độ (2 cần gạt: ↓↓ ↑↓ ↓↑ ↑↑)

Đọc sơ đồ theo một câu:

Bạn chọn một Effect từ Thư viện → nó được gói thành một Look → Look được đặt lên Timeline thành một Clip trong một Track → Clip mang một Vùng chọn trỏ tới các LED / Collection trong Sơ đồ dây → khi chạy, effect chỉ tô màu lên đúng nhóm LED đó.

Và một câu nữa cho hai tầng trên cùng:

Cả cái Timeline vừa nói nằm trong một Cảnh; gạt hai cần gạt trên bo là chọn chế độ, và chế độ quyết định cảnh nào được nạp ra chạy. Hôm nay mọi dự án có đúng một cảnh nên bốn vị trí công tắc đều ra cùng một thứ — xem §1.1.


3. Quan hệ chi tiết (ai chứa ai, ai trỏ ai)

Điểm mấu chốt cần nhớ: “Sáng cái gì” nằm ở Look/Effect; “sáng ở đâu” nằm ở Vùng chọn của Clip; “sáng lúc nào” nằm ở vị trí Clip trên Timeline.


4. Vùng chọn quyết định cả “ở đâu” lẫn “hình dạng”

Điều nhiều người bất ngờ: Vùng chọn không chỉ lọc LED, nó còn định hình toạ độ cho effect. Khi chạy, phần mềm lấy các LED được chọn, chuẩn hoá vị trí của chúng về khoảng 0→1 rồi mới đưa cho effect vẽ.

Hệ quả thực tế:


5. Nhiều Track chồng lên nhau ra sao

Khi có nhiều Track cùng chạy tại một thời điểm:

Nhờ vậy bạn có thể để nền “Gradient” ở Track dưới và “Sparkle” lấp lánh ở Track trên, chúng cộng hưởng thành một hiệu ứng phức hợp.


6. Các khu vực trong Tab Hiệu ứng

Khu vực Vị trí Dùng để
Thư viện Hiệu ứng Dock trái (tab 1) Kho effect dựng sẵn — nguồn để kéo/Apply
Cài đặt sẵn Dock trái (tab 2) Danh sách mẫu preset hiệu ứng của người dùng & hệ thống
Sidebar Cảnh Dock đáy (cột trái Timeline) Thêm/đổi tên/xoá/chọn cảnh, và đặt bảng chế độ (công tắc nào nạp cảnh nào)
Dòng thời gian Dock đáy (phần chính) Sắp Clip theo thời gian, nhiều Track (mô hình tinh gọn 1 Clip 1 Effect)
Inspector Dock phải (tab 1) Chỉnh tham số effect và đặt Vùng chọn LED cho Clip đang chọn
VFX Modifiers Dock phải (tab 2) Bộ biến đổi hậu kỳ cho effect
Preview Trung tâm Xem trước kết quả trên bố cục LED (tách cửa sổ được)

Dock trái có đúng hai tab: "Thư viện Hiệu ứng" và "Cài đặt sẵn" (ModuleManifests.cs:113-114). Cảnh được chuyển về làm Sidebar bên trái của Dòng thời gian (TimelineView.axaml), tạo luồng thao tác trực quan: chọn Cảnh bên trái $\rightarrow$ Dòng thời gian bên phải nạp đúng các track và clip của Cảnh đó. Khi cần xếp chồng hiệu ứng, người dùng thêm nhiều Track trên Dòng thời gian thay vì lồng nhiều effect trong một clip đơn lẻ.


7. Làm một hiệu ứng hiện lên LED — từng bước (theo đúng luồng hiện tại)

  1. Dựng sơ đồ dây trước (Tab Sơ đồ dây): đặt Controller → Strip → LED. ⚠️ (Bản hiện tại chưa có lệnh gom LED thành Collection — xem §1. Muốn nhắm theo khu vực, hãy dùng Hình chữ nhật hoặc LED cụ thể ở bước 4.)
  2. Sang Tab Hiệu ứng → Thư viện: bấm Apply hoặc kéo một effect thả xuống một Track trên Timeline. → Phần mềm tự tạo Look + Clip + Effect cùng lúc, và tự chọn Clip vừa tạo.
  3. Chỉnh tham số trong Inspector (màu, tốc độ, độ mờ…). Các thay đổi này là ghi đè cho Clip đang chọn.
  4. Chọn vùng LED trong Inspector (chỉ bật khi đang chọn 1 Clip):
    • Toàn bộ, hoặc
    • Hình chữ nhật qua các ô X/Y/W/H nâng cao, hoặc
    • Theo dải LED — chọn một dải LED trên sơ đồ làm vùng cho clip (ràng buộc động), hoặc
    • bấm “Chọn LED cho clip” để bật chế độ chọn LED ngay trên Preview của tab Hiệu ứng. (Nút bên cạnh, “Chọn LED cho track”, làm việc tương tự cho cả track.) Tên nút thật lấy từ Strings.resx:1299 — bản trước của tài liệu gọi nó là “Chọn LED trên canvas”, không có nút nào mang tên đó.
    • Khi đó bạn có thể click từng LED hoặc kéo khung để chọn trực tiếp trên preview; tắt chế độ này thì vùng chọn được ghi vào Clip.
  5. Xem Preview ở giữa; bấm Play trên Timeline để chạy theo thời gian.

Mẹo: Muốn cùng một hiệu ứng chạy ở hai khu vực khác nhau, hãy tạo hai Clip (mỗi Clip một Vùng chọn). Muốn hai hiệu ứng khác nhau chồng nhau, đặt chúng ở hai Track.


8. Bảng thuật ngữ nhanh

Tiếng Việt Trong phần mềm Một dòng
Hiệu ứng Effect / EffectInstance Thuật toán vẽ màu động
Gói hiệu ứng Look Effect + tham số, thứ mà clip trỏ tới
Đoạn Clip Look đặt lên timeline, có thời điểm + vùng chọn riêng
Cảnh Scene Đơn vị NẠP ĐƯỢC mà công tắc trên bo chọn (ADR-0012) — chứa cả một timeline, không phải gói effect
Chế độ mode Một tổ hợp vị trí hai cần gạt (↓↓ ↑↓ ↓↑ ↑↑); mỗi chế độ trỏ tới một cảnh
Lớp Track Dải chứa Clip, hoà trộn với lớp khác
Dòng thời gian Timeline Trục thời gian của cả buổi diễn
Vùng chọn Selection / LedSelection Effect này sáng trên LED nào
Nhóm LED Collection Nhóm LED có tên, dùng lại được
Sơ đồ dây Wiring / Diagram Bố cục LED vật lý (Controller→Strip→LED)

Trang chị em cũ: 02-Danh-gia-mo-hinh-va-Khuyen-nghi.md (đánh giá mô hình + khuyến nghị P1–P5) đã chuyển vào archive/audits/ ngày 2026-08-27 và KHÔNG còn được liên kết từ tầng hiện hành: P1–P4 trong đó đã làm xong, và mọi tệp:dòng của nó mô tả thế giới trước đợt đổi tên Scene→Look (SceneRef không còn tồn tại, TickV2 không tồn tại). Đọc nó để biết ý đồ, đừng tra cứu theo nó.

Nguồn: docs/HDSD/01-Moi-lien-he-Doi-tuong-Tab-Hieu-ung.md trong kho mã — bản web sinh lúc dựng ảnh.