CSCD FPS Animbaker - Blender addon

1. Tổng quan

Nhằm hỗ trợ modder trong việc xử lý luồng animation-based, nhóm phát triển cung cấp một addon dành cho phần mềm Blender, mang tên “CSCD FPS Animbaker”, giúp đơn giản hóa các tác vụ liên quan đến animation

Download addon tại https://github.com/tipforeveryone/cscd-fps-animbaker

1.1 Vai trò

Trước khi đưa vào engine, animation cần được “bake” để các keyframe nội suy, f-curve, hay constraints sử dụng bởi phần mềm 3D được biến đổi thành dạng keyframe thuần túy, chạy frame by frame.

Thông thường, tác vụ này sẽ được xử lý nhanh chóng bằng cách xuất file fbx, áp dụng tốt cho các đối tượng chỉ sử dụng 1 armature. Tuy nhiên, hầu hết animation cho FPS được triển khai với nhiều armature, ví dụ 1 cho đôi tay, 1 cho vũ khí. Điều này làm quá trình bake khó khăn hơn do sự phụ thuộc giữa các armature.

Ví dụ, bone của object vũ khí được gán constraint vào bone tay phải, trong khi bone băng đạn, đến một thời điểm nào đó lại cần “dính” vào bone tay trái v..v..

Khi đó việc bake ra một action sẽ cần nhiều thao tác lặp lại nhiều lần khiến thời gian chuẩn bị animation bị kéo dài. Addon này được tạo ra để xử lý vấn đề trên.

1.2 Giao diện

Sau khi cài đặt, addon được truy cập thông qua panel bên phải viewport (N) dưới tên “CSCD FPS Animbaker”

Giao diện được chia ra nhiều phần, tương ứng với các giai đoạn:

  • Giai đoạn 1: Đổi tên armature và action về tiêu chuẩn nhằm phục vụ các bước tiếp theo.

  • Giai đoạn 2: Hoàn thiện hóa (refine) độ dài và keyframe cho các action đã đổi tên.

  • Giai đoạn 3: Lựa chọn các action bạn muốn để ghép cúng thành một chuỗi.

Quá trình ghép nhiều action thành một action dài sẽ tránh được việc bake từng cặp action, làm mất kết nối constraint sau khi bake. Tùy chọn “Clear Local Constraint” được đánh dấu trong trong lệnh “Bake actions” là bắt buộc.

  • Giai đoạn 4: Triển khai bake và chia kết quả ra nhiều action khác nhau.

  • Giai đoạn 5: Đặt các action trên trên vào NLA và export fbx.

1.3 Tiêu chuẩn đặt tên

Tên của armature và các action trong blender cần được đặt theo tiêu chuẩn, nhờ đó các giai đoạn của addon được xử lý liền mạch.

Animator hoàn toàn có thể đặt tên action theo ý muốn. Addon sẽ hỗ trợ trong công đoạn sửa tên theo chuẩn hóa mà không gây ảnh hưởng đến các animation gốc do animator tạo ra (non-destructive).

Và đây là một số quy tắc quan trọng

  • Mọi thứ liên quan đến đôi tay và súng sẽ có chữ armgun.

  • Các action của arm và gun sẽ luôn tồn tại theo cặp. Nếu một trong 2 bị khuyết, cả 2 action sẽ không xuất hiện trong danh sách Test action của mỗi giai đoạn.

  • armature-armarmature-gun: đây là 2 tên bắt buộc dành cho armature của 2 objects

  • Trong giai đoạn trước refine (quick rename), action của bạn sẽ được đổi sang format:

    • arm-<tên action> - ví dụ: “arm-reload-fast-dry“

    • gun-<tên action> - ví dụ: “gun-reload-fast-dry“

  • Trong giai đoạn sau refine, format sẽ được thêm tiền tố refined-, trở thành

    • refined-arm-<tên action>" - ví dụ: “refined-arm-reload-fast-dry”

    • refined-gun-<tên action>" - ví dụ: “refined-gun-reload-fast-dry”

  • Sau khi được ghép vào 1 action duy nhất (combine): combined-arm / combined-gun

  • Sau khi được bake vào 1 action duy nhất: baked-combined-arm / baked-combined-gun

  • Và cuối cùng là sau khi được tách ra các action thành phẩm:

    • baked-arm-<tên action> - ví dụ: “baked-arm-reload-fast-dry”

    • baked-gun-<tên action - ví dụ: “baked-gun-reload-fast-dry”

    • Đây sẽ là các action được sử dụng trong engine để làm animation.

2. Hướng dẫn

2.1 Đổi tên armature, kiểm tra object

Theo tiêu chuẩn, armature của đôi tay và vũ khí cần được đưa về là “armature-arm” và “armature-gun”. Hãy chắc chắn là mesh object được gắn vào các armature đã được join thành 1 object duy nhất (nếu được cấu thành từ nhiều object khác nhau) và đổi tên là “arm” và “gun” tương ứng.

Nếu phát hiện armature chưa đúng tên, addon cung cấp công cụ đổi tên nhanh cho armature, chỉ cần chọn tên armature hiện tại của đôi tay và ấn nút “Arm”, tương tự với armature dành cho vũ khí. Khi này các bước tiếp theo sẽ bị ẩn đi.

Addon dựa vào tên của các armature và object để thực hiện mọi tác vụ) sau đó, do đó việc đổi tên theo đúng tiêu chuẩn là điều bắt buộc.

2.2 Giai đoạn 1: Đổi tên action

Ấn vào nút “Rename” để mở ra cửa sổ “Quick Rename Actions”, tại đây có nhiều công cụ giúp bạn đổi tên nhanh chóng cho hàng loạt action, giao diện cửa sổ như sau

Yếu tố quan trọng nhất cần được đề cập là khái niệm “Prefix”. Tất cả các action thuộc vè armature-arm, sẽ có tên mở đầu là “arm-” tương ứng với mỗi action “arm-” sẽ là một action “gun-”. Chúng luôn đi theo cặp như ta đã biết qua phần Tiêu chuẩn tên.

2.2.1 Cụm bảng action

  • Cột Old Name: Đây là toàn bộ danh sách các animation chưa theo tiêu chuẩn hiện có, thường sẽ do animator đặt ra theo ý muốn của mình.

  • Cột Prefix: Bạn sẽ cần lựa chọn trong danh sách xổ xuống giá trị là “arm” hay “gun”

  • Cột New Name: Đây chính là tên mang tính chỉ định vai trò của action (“reload”, “deploy” v..v..)

  • Cột Result: Đây là tên thưc tế dành cho action sau khi đổi tên, nó được ghép bởi giá trị trong cột Prefix và cột New Name

  • Cột Ignore: Đánh dấu các action bạn chưa đổi tên, có thể do chưa hoàn thiện hoặc thiếu action theo cặp.

2.2.2 Cụm Quick Set Prefix

Giúp bạn nhanh chóng lựa chọn giá trị cột Prefix thay vì phải đi chọn cho từng action trong bảng, đặc biệt hữu ích nếu bản thân các action (Old Name) đã có sẵn Prefix hoặc Suffix do animator tự đặt. Như trong ví dụ sẽ là “_Gun” dành cho các action của đối tượng vũ khí, trong khi Không có Prefix hay Suffix cụ thể cho đối tượng đôi tay.

Giả sử nhập “_Gun” vào ô trong nhóm “Suffix”. Ấn 1 trong 4 nút có mặt bên phải sẽ thực hiện một trong số các điều sau:

  • As Arm: Mọi action có Suffix của “Old Name” là “_Gun” đều sẽ được chọn prefix mới là “arm-”

  • As Gun: Tương tự “As Arm” nhưng prefix mới là “gun-”

  • Not As Arm: Ngược lại, mọi action có Suffix của “Old Name” là “_Gun” đều sẽ được chọn prefix mới là “gun-”

  • Not As Gun: Tương tự “Not As Arm” nhưng prefix mới là “arm-”

  • Clear: Đơn giản là xóa bỏ toàn bộ Suffix của Old Name để biến thành New Name. Ví dụ Old Name là “ReloadDry_Gun” thì sẽ chỉ còn là “ReloadDry”

2.2.3 Cụm Replace

Thay thế bất cứ chữ nào có mặt trong Old Name thành phiên bản New Name

2.2.4 Cụm Format

Dù không bắt buộc, nhưng khuyến nghị modder sử dụng tên action theo dạng “my-action-name” thay vì “MyActionName” (Pascal/Camel case). Lý do là vì hầu hết các tài liệu hướng dẫn dành cho GDE và cả tiêu chuẩn trong gamecore đều dùng cách viết này, tạo tính đồng nhất về nội dung.

Khi click vào nút Split Pascal/Camel Case, toàn bộ tên action sẽ được chuyển thành dạng “my-action-name”

2.2.5 Cụm kiểm tra cặp action

Như trên đã đề cập, các action “arm-” và “gun-” luôn cần đi theo cặp để mọi thứ hoạt động bình thường. Cụm “Missing counterpart” sẽ chỉ ra cho bạn animation nào đang tồn tại mà thiếu đi action theo cặp của nó, nhờ đó bạn biết mình cần bổ sung action nào, hoặc đơn giản là đánh dấu vào checkbox trong cột Ignore nằm bên phải của danh sách action.

Cuối cùng, nhấn OK nằm dưới cùng cửa sổ để hoàn tất Rename. Bạn có thể tham khảo danh sách các action theo tiêu chuẩn tại Danh sách action luồng AB

Các action được rename đúng tiêu chuẩn sẽ xuất hiện trong danh sách của mục “Test renamed original actions”. Bạn có thể chọn trong danh sách hoặc ấn nút Previous/Next bên dưới để nhanh chóng kiểm tra action mà không phải assign cho mỗi armature trong pose mode hoặc sắp xếp trong cửa sổ NLA.

Các phần khác của addon cũng sở hữu danh sách test tương tự, sau mỗi giao đoạn, bạn đều có thể test các action được sinh ra theo cách này.

2.3 Giai đoạn 2: Hoàn thiện độ dài và keyframes (Refine)

Quá trình bake yêu cầu tùy chọn “Clear Local Constrains” trong cửa sổ “Bake Action” được đánh dấu tick. Điều này khiến các local constraint quan trọng biến mất sau khi bake. Bạn sẽ cần mở lại file và bake action khác.

Do đó, addon ưu tiên việc ghép các action thành một chuỗi (áp dụng với cả armature-arm và armature-gun) sau đó bake một lần, rồi mới chia action kết quả ra nhiều action nhỏ hơn.

Trước khi nối các cặp action, ta cần độ dài của các cặp này bằng nhau, đồng thời key frame của chúng cũng phải được “chốt lại” tại một vài vị trí, để khi nối vào nhau, các phép toán nội suy, sử dụng f-curve, constraint được diễn ra độc lập cho mỗi action thay vì gây ảnh hưởng lẫn nhau, gây ra chuyển động ngoài mong muốn.

Để điều chỉnh độ dài và keyframe của các action, nhấn nút “Refine”. Bạn sẽ thấy trong file xuất hiện các action mới có mở đầu bằng tên “refined-arm-” hoặc “refined-gun-”.

Tới đây, các action đã có thể được nối vào nhau một cách an toàn trong giai đoạn tiếp theo.

2.4 Giai đoạn 3: Nối chuỗi action (Combine)

Click nút “Combine”, cửa sổ “Combine to Single Action” hiện ra, tại đây bạn có thể chọn các action được nối với nhau, thứ tự action trong danh sách cũng là thứ tự của chuỗi sau khi nối > Nhấn OK.

Người viết lựa chọn 4 action như trong hình để minh họa. Dễ thấy các action được nối với nhau kèm theo marker để dễ nhận biết.

Lưu ý: Sau khi combine, ta có 2 action mới tên “combined-arm” và “combined-gun”

2.5 Giai đoạn 4: Bake và chia nhỏ (Split)

Như đã giải thích, việc một action được bake sẽ làm action đó ngừng phụ thuộc vào hệ thống keyframe nội suy, f-curve, constraint, và trở thành dạng frame-by-frame.

Click nút “Bake combined actions”, máy có thể treo một lúc do quá trình tính toán bake phức tạp diễn ra, thời gian treo này sẽ phụ thuộc vào số lượng action được nối cũng như cấu hình máy bạn, hãy kiên nhẫn chờ quá trình bake hoàn thành, đừng lo lắng và terminate Blender bằng task manager, điều này có khả năng làm hỏng file .blend của bạn.

Và đây là action có được sau khi bake, “baked-arm(gun)-sequences”

Tiếp theo, ấn nút “Split Baked Actions”, lúc này 2 chuỗi action được bake cho arm và gun sẽ được chia ra và đặt tên theo đúng danh sách ban đầu bạn chọn để combine, tên sẽ có dạng “baked-arm-” và baked-gun-”. Đây cũng là các action để bạn đưa vào engine sau đó. Quá trình này cũng gây “treo máy” đôi chút nếu lượng action nhiều.

2.6 Giai đoạn 5: Phân bổ NLA và Export FBX

Nói qua về hội thoại export FBX. Thông thường, khi export ra định dạng này, sẽ có một loạt các option cần được bật hoặc tắt để file mang lại kết quả mong muốn trong engine.

Tuy nhiên với addon, bạn sẽ không cần làm việc này thủ công, tính năng export của addon đã tự chỉnh các lựa chọn phù hợp nhất, bao gồm:

Danh sách giá trị đi kèm của các tùy chọn dưới đây sẽ hữu ích khi bạn muốn tự mình xuất file mà vẫn đảm bảo workflow của addon

  • Include > Limit to > Selected Objects: TRUE

  • Armature

    • Only Deform Bones: TRUE

    • Add Leaf Bones: FALSE

  • Animation

    • Key All Bones: FALSE

    • NLA Strip: TRUE

    • All Actions: FALSE

    • Force Start/End Keying: FALSE

Tùy chọn NLA Strips = TRUEAll Actions = FALSE là bắt buộc vì các animation sẽ được bake dựa vào các action được push trong cửa sổ NLA chứ không phải các action trong Action Editor.

Vì thế, addon đã có sẵn tính năng “Populate NLA” chỉ bằng một nút bấm!

Và cuối cùng là bước Export FBX, bạn chỉ cần ấn 2 nút tương ứng dành cho armature-arm và armature-gun phía dưới cùng của addon, chọn vị trí lưu file là xong!

Tại đây nếu bạn gặp thông báo lỗi liên quan tới “Không tìm thấy đối tượng có tên “arm” hoặc “gun” hãy kiểm tra cửa sổ Outliner, tiến hành join và rename các mesh gắn với armature tương ứng (mesh “arm” sẽ thuộc về “armature-arm”, mesh “gun” sẽ thuộc về “armature-gun”)

3. Tổng kết

Mặc dù addon này được tạo ra để phục vụ cho Animation-based pipeline của game CSCD: Vietnam Mobile Police trong bước chuẩn bị asset, nhưng người viết tin răng nó cũng sẽ hữu ích với những ai cần rút ngắn quá trình bake animation dành cho FPS view model của mình.

Cảm ơn bạn đã sử dụng addon “CSCD FPS Animbaker”!


Was this article helpful?
© 2026 CSCD: Vietnam Mobile Police - Tiếng Việt