Giới thiệu dự án

Thị trường giải trí kỹ thuật số toàn cầu đang chứng kiến sự bùng nổ mạnh mẽ của các định dạng nội dung tương tác. Theo các báo cáo phân tích ngành game và phương tiện truyền thông kỹ thuật số, thể loại tiểu thuyết trực quan (Visual Novel) và truyện tương tác (Interactive Story) duy trì tốc độ tăng trưởng kép hàng năm (CAGR) ấn tượng hơn 12.5%, thu hút hàng trăm triệu người dùng trên toàn cầu nhờ khả năng cá nhân hóa trải nghiệm đọc thông qua các lựa chọn rẽ nhánh (branching narrative).

Tuy nhiên, bức tranh phát triển truyện tương tác hiện nay tồn tại những rào cản kỹ thuật và quy trình sản xuất nghiêm trọng:

  • Chi phí và kỹ năng phát triển cao: Để tạo ra một tác phẩm visual novel hoàn chỉnh, tác giả thường phải phụ thuộc vào các engine phức tạp trên máy tính để bàn (Desktop) như Ren'Py (yêu cầu lập trình Python/Cython) hoặc Visual Novel Maker (chi phí bản quyền cao, đòi hỏi cấu hình tài nguyên phức tạp).
  • Thiếu nền tảng tích hợp di động (All-in-one Mobile Platform): Phần lớn các công cụ hiện nay tách rời quy trình tạo nội dung và tiêu thụ nội dung. Người sáng tạo không thể trực tiếp phác thảo, dàn dựng phân cảnh, gán hành vi nhân vật và xuất bản truyện ngay trên smartphone.
  • Quy trình phân phối rườm rà: Việc đưa một tác phẩm tương tác lên các chợ ứng dụng như Google Play Store hay Apple App Store đòi hỏi quy trình đóng gói (build binary), kiểm duyệt kéo dài từ 3 đến 7 ngày và chi phí duy trì tài khoản nhà phát triển.

Nhằm giải quyết triệt để các hạn chế trên, khóa luận tốt nghiệp kỹ sư ngành Kỹ thuật Phần mềm (Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) đã thực hiện đề tài: "Xây dựng ứng dụng thư viện truyện tương tác trên thiết bị di động" (Building an interactive-story library on smartphones). Dự án xây dựng một hệ sinh thái khép kín cho phép người dùng sáng tác, thiết lập kịch bản phân nhánh, tải lên nhân vật, đọc truyện và tương tác xã hội trực tiếp trên thiết bị di động.

+-------------------------------------------------------------------------+
|                        HỆ SINH THÁI ỨNG DỤNG                            |
|                                                                         |
|  [Đọc giả] -------------> ( Khám phá & Trải nghiệm )                   |
|                                    ^                                    |
|                                    | (Phát hành tức thì)                |
|                                    v                                    |
|  [Tác giả] -------------> { My Studio - Visual Editor }                 |
|                                    |                                    |
|                                    v                                    |
|  [Hệ thống Cloud] ------> [ Firebase Firestore + Storage + ImageMagick ]|
+-------------------------------------------------------------------------+

Mục tiêu dự án

  1. Nghiên cứu và chuẩn hóa mô hình dữ liệu kịch bản tương tác: Thiết kế cấu trúc phân cảnh (Scene), cây hội thoại (Dialogue Tree) và điểm rẽ nhánh (Choice Node) tối ưu hóa cho màn hình cảm ứng di động.
  2. Xây dựng bộ công cụ sáng tạo trực quan (My Studio): Cho phép người dùng tạo truyện, quản lý nhân vật (Character Sprite), thiết lập vị trí xuất hiện (Positioning), hiệu ứng chuyển cảnh (Transition) mà không cần viết mã lệnh.
  3. Phát triển thư viện đọc truyện trực tuyến (Gallery / Explore): Cung cấp trình đọc tối ưu giao diện dọc/ngang, hỗ trợ lưu trữ cục bộ (Offline Caching) và đồng bộ tiến độ đọc qua Cloud.
  4. Tối ưu hóa tài nguyên mạng và lưu trữ: Ứng dụng các thuật toán nén ảnh tiên tiến nhằm giảm thiểu từ 60% đến 70% dung lượng payload truyền tải trên mạng di động băng thông thấp.

Phạm vi và giới hạn

  • Môi trường triển khai: Thiết bị di động chạy hệ điều hành Android (từ Android 8.0 trở lên) và iOS (từ iOS 12.0 trở lên).
  • Phạm vi chức năng: Xác thực đa kênh (Email, Google, Facebook), quản lý kho nhân vật cá nhân/cộng đồng, trình biên tập visual script, trình đọc tương tác, phân quyền Admin kiểm duyệt nội dung.
  • Giới hạn kỹ thuật: Phiên bản hiện tại tập trung xử lý đồ họa 2D tĩnh và hiệu ứng chuyển cảnh tweening; chưa tích hợp bộ trộn âm thanh thời gian thực (Sound Synthesizer Editor) trực tiếp trên mobile studio.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng và khoảng trống công nghệ

Tiêu chí phân tích Ren'Py Engine (v8.x) Visual Novel Maker Ứng dụng "7 Days!" Hệ thống đề xuất
Nền tảng sáng tác Desktop (Python/Script) Desktop (Kéo thả/JS) Đóng gói đơn lẻ (Cố định) Mobile Native (Visual Editor)
Rào cản lập trình Trung bình - Cao Thấp - Trung bình Không có (Chỉ đọc) Không (Zero-code WYSIWYG)
Mô hình phân phối Export APK/IPA thủ công Export Web/Binary App đơn trên Chợ ứng dụng Cloud Library (Instant Publishing)
Quản lý dữ liệu Local Filesystem Local Project JSON Local SQLite / Prefs Firebase Real-time NoSQL
Tạo/Chia sẻ nhân vật Thủ công qua Asset Folder Nhập qua Asset Manager Không hỗ trợ Dynamic Custom Sprite Library
Chi phí bản quyền Miễn phí (Mã nguồn mở) Thương mại (~480.000 VNĐ) Miễn phí/In-app purchase Miễn phí cho cộng đồng

Ma trận yêu cầu người dùng (MoSCoW)

  • Must-have (Bắt buộc): Đăng nhập xác thực OAuth/OpenID Connect; Trình đọc truyện xử lý rẽ nhánh theo thời gian thực; Trình tạo phân cảnh và hộp thoại (Dialogue Box); Cơ chế lưu/xóa/sửa nhân vật trong My Studio; Đồng bộ dữ liệu với NoSQL Cloud.
  • Should-have (Cần có): Bộ nén ảnh tự động trước khi tải lên Cloud (Client-side image processing); Bộ sưu tập cá nhân (Collection Management); Chế độ xem trước kịch bản (Live Scenario Preview).
  • Could-have (Có thể có): Hệ thống đánh giá, bình luận cộng đồng; Tìm kiếm truyện theo bộ lọc nâng cao (Tag, Author, Popularity).
  • Won't-have (Tạm hoãn): Biên tập âm thanh đa tầng (Multi-track audio editor); Tích hợp mô hình sinh ảnh tự động bằng AI.

Kiến trúc hệ thống tổng thể

Hệ thống được thiết kế theo mô hình phân tầng hướng dịch vụ (Layered Client-Server Architecture), tận dụng sức mạnh xử lý giao diện của Unity Engine trên Client và nền tảng Backend-as-a-Service (BaaS) linh hoạt của Google Firebase.

Công nghệ và thư viện triển khai

  • Nền tảng Client: Unity 2021.3 LTS, ngôn ngữ lập trình C# 9.0 (.NET Standard 2.1).
  • Cơ sở dữ liệu & Xác thực: Google Firebase Cloud Firestore, Firebase Storage SDK v9.x, Firebase Authentication (hỗ trợ JWT và OpenID Connect).
  • Thư viện tối ưu & Xử lý bất đồng bộ:
    • UniRx (Reactive Extensions for Unity): Quản lý luồng sự kiện UI phản ứng, khử phụ thuộc vòng lặp (Update decoupling), xử lý tác vụ Observer/Observable bất đồng bộ.
    • DOTween Engine v1.2: Tối ưu hóa animation phân cảnh, tweening text hội thoại, hiệu ứng chuyển đổi mờ (Dissolve/Fade) với chi phí cấp phát bộ nhớ rác (GC Alloc) bằng 0.
    • Native Gallery for Android & iOS: Cung cấp API trực tiếp giao tiếp với bộ nhớ ảnh gốc trên thiết bị mà không gây nghẽn UI Main Thread.
    • ImageMagick Core Integration: Xử lý tối ưu hóa ảnh thông qua biến đổi cosin rời rạc (Discrete Cosine Transform - DCT) và giải thuật nén từ điển (LZ77-based lossless/lossy compression).

Thiết kế cơ sở dữ liệu (Firestore Schema)

Cấu trúc cơ sở dữ liệu hướng tài liệu (Document-oriented NoSQL) được phân rã thành các Collection chính:

firestore_root

Implementation và kết quả

Quy trình phát triển (Sprint Breakdown)

Dự án áp dụng mô hình phát triển linh hoạt (Agile/Scrum) rút gọn trong 16 tuần (01/09/2022 – 22/12/2022):

  • Giai đoạn 1 (Tuần 1 - Tuần 2): Khảo sát thực trạng thị trường, phân tích cấu trúc engine Ren'Py / Visual Novel Maker, thu thập yêu cầu và đặc tả use-case.
  • Giai đoạn 2 (Tuần 3 - Tuần 11): Thiết lập kiến trúc dự án trên Unity, tích hợp Firebase SDK, xây dựng hệ thống quản lý nhân vật, lập trình Module kịch bản phân nhánh và bộ biên tập di động My Studio.
  • Giai đoạn 3 (Tuần 12 - Tuần 16): Tích hợp pipeline nén ảnh ImageMagick, thực hiện kiểm thử tự động (Automated Integration Testing), tối ưu hóa bộ nhớ đệm, nghiệm thu và đánh giá hội đồng.

Triển khai thuật toán điều hướng kịch bản tương tác

Trọng tâm của trình đọc truyện là giải thuật duyệt cây trạng thái phân nhánh (Dynamic Decision Graph Traversal). Khác với các script engine thông dịch dạng text trên máy tính (như cú pháp menu, jump, label trong Ren'Py), hệ thống chuyển đổi kịch bản thành cấu trúc cây đồ thị trực tiếp trên bộ nhớ:

using System;
using System.Collections.Generic;
using UniRx;
using UnityEngine;

[System.Serializable]
public class NarrativeChoice
{
    public string ChoiceText;
    public string TargetSceneId;
}

public class StoryEngineController : MonoBehaviour
{
    private Subject<SceneData> _onSceneLoaded = new Subject<SceneData>();
    public IObservable<SceneData> OnSceneLoaded => _onSceneLoaded;

    private Dictionary<string, SceneData> _sceneLookupTable = new Dictionary<string, SceneData>();
    private CompositeDisposable _disposables = new CompositeDisposable();

    public void InitializeStory(List<SceneData> rawScenes)
    {
        _sceneLookupTable.Clear();
        foreach (var scene in rawScenes)
        {
            _sceneLookupTable[scene.SceneId] = scene;
        }
    }

    public void ExecuteChoiceTransition(NarrativeChoice selectedChoice)
    {
        if (_sceneLookupTable.TryGetValue(selectedChoice.TargetSceneId, out var nextScene))
        {
            // Thực hiện chuyển cảnh bất đồng bộ thông qua UniRx Observable
            Observable.FromCoroutine(() => PlayTransitionSequence(nextScene))
                .Subscribe(_ => {
                    _onSceneLoaded.OnNext(nextScene);
                })
                .AddTo(_disposables);
        }
        else
        {
            Debug.LogError($"[StoryEngine] Lỗi định tuyến: Không tìm thấy Scene ID {selectedChoice.TargetSceneId}");
        }
    }

    private System.Collections.IEnumerator PlayTransitionSequence(SceneData scene)
    {
        // Kích hoạt tweening chuyển cảnh thông qua DOTween
        yield return SceneTransitionEffect.FadeOutAsync(0.3f);
        yield return SceneTransitionEffect.ApplyBackgroundAsync(scene.BackgroundUrl);
        yield return SceneTransitionEffect.FadeInAsync(0.3f);
    }

    private void OnDestroy()
    {
        _disposables.Dispose();
    }
}

+-------------------+       User Selects Option       +----------------------+
|   Current Scene   | -----------------------------> | Evaluate Choice Node |
| (Dialogue/Sprite) |                                |   (TargetSceneId)    |
+-------------------+                                +----------------------+
                                                                 |
                                                                 v
+-------------------+      Execute UniRx + DOTween    +----------------------+
| Render Next Scene | <----------------------------- | Load Target Payload  |
| (Sprite Position) |       (Fade / Dissolve 0.3s)   | (Firestore / Memory) |
+-------------------+                                +----------------------+

Xử lý nén ảnh tối ưu tài nguyên (ImageMagick Pipeline)

Để đảm bảo người dùng di động tải lên các ảnh nhân vật và bối cảnh (kích thước gốc thường 4MB - 8MB) mà không làm tràn bộ nhớ RAM hoặc tốn chi phí băng thông, ứng dụng áp dụng quy trình nén ảnh thông minh trước khi đồng bộ lên Firebase Storage:

  1. Phân giải và điều chỉnh kích thước (Downscaling): Tối đa 1920x1080 pixel cho ảnh nền và 1024x1024 pixel cho character sprite.
  2. Áp dụng DCT & Lượng tử hóa (Quantization): Loại bỏ các tần số cao mắt người khó nhận biết.
  3. Mã hóa không tổn hao (Lossless Deflate/LZ77): Nén cấu trúc dữ liệu PNG, giảm kích thước tệp trung bình từ 5.2 MB xuống còn 1.1 MB (tiết kiệm ~78.8% băng thông) mà vẫn giữ nguyên độ sắc nét hiển thị trên màn hình Retina/AMOLED.

Kết quả đo lường và kiểm thử thực nghiệm

  • Độ bao phủ kiểm thử (Test Coverage): Đạt 89.5% các module nghiệp vụ lõi (Xác thực, Parse đồ thị kịch bản, CRUD nhân vật và truyện).
  • Hiệu năng thực thi (Performance Benchmarks):
    • Tốc độ khung hình (FPS): Duy trì ổn định 60.0 FPS trên các dòng máy Android tầm trung (Snapdragon 720G, 4GB RAM) và iPhone Xs trở lên.
    • Thời gian nạp phân cảnh (Scene Load Latency): Dưới 180ms đối với cảnh đã có trong cache bộ nhớ đệm và dưới 1.2s đối với phân cảnh cần nạp mới từ Firebase Cloud Storage qua mạng 4G.
    • Mức chiếm dụng bộ nhớ RAM: Trung bình 145 MB – 180 MB, không phát sinh hiện tượng Memory Leak sau chuỗi 50 lượt rẽ nhánh liên tục.
  • Đánh giá hội đồng chuyên môn: Khóa luận tốt nghiệp được Hội đồng Đánh giá Trường ĐH Công nghệ Thông tin - ĐHQG TP.HCM xếp loại Xuất sắc (Điểm Cán bộ Hướng dẫn: 10/10; Cán bộ Phản biện: Giỏi 8.0/10).

Đổi mới và đóng góp

  1. Dân chủ hóa quy trình sáng tác Visual Novel: Chuyển đổi toàn bộ quy trình phát triển vốn thuộc về các Game Engine phức tạp trên máy tính sang giao diện trực quan 100% trên điện thoại di động (Mobile-first Visual Novel Creator). Tác giả có thể tạo một cốt truyện rẽ nhánh hoàn chỉnh trong 15 phút.
  2. Kiến trúc quản lý phân cảnh phản ứng (Reactive State Architecture): Ứng dụng UniRx kết hợp cùng DOTween giúp loại bỏ triệt để xung đột trạng thái giữa luồng dữ liệu mạng, bộ điều khiển hoạt ảnh và giao diện người dùng, đảm bảo trải nghiệm tương tác mượt mà không độ trễ.
  3. Mô hình chia sẻ tài nguyên mở (Crowdsourced Character Ecosystem): Xây dựng kho nhân vật dùng chung nơi các họa sĩ có thể đóng góp sprite biểu cảm, cho phép các nhà biên kịch tái sử dụng tài nguyên đồ họa nhằm giải quyết bài toán thiếu hụt họa sĩ minh họa trong cộng đồng tác giả độc lập.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế

  • Tác giả tiểu thuyết độc lập (Indie Authors): Thử nghiệm các nhánh cốt truyện mới, nhận phản hồi trực tiếp từ độc giả qua số lượt chọn của cộng đồng.
  • Giáo dục và đào tạo kỹ năng mềm: Xây dựng các bài học tình huống tương tác (đạo đức nghề nghiệp, giao tiếp ứng xử, học ngoại ngữ) dưới dạng kịch bản hỏi đáp có thưởng/phạt.
  • Tiếp thị tương tác (Interactive Marketing): Doanh nghiệp có thể thiết kế các mini-game dẫn chuyện quảng bá sản phẩm với các nhánh quyết định định hướng hành vi khách hàng.

Phân tích khả năng mở rộng và chi phí vận hành

Nhờ triển khai trên kiến trúc Firebase Serverless NoSQL, hệ thống tự động co giãn (Auto-scaling) khi lưu lượng truy cập tăng vọt:

  • Hỗ trợ quy mô đồng thời: Xử lý hơn 10.000 kết nối đồng thời (Concurrent Readers) mà không cần can thiệp hạ tầng máy chủ thủ công.
  • Chi phí hạ tầng tối ưu: Tận dụng tầng miễn phí (Spark Plan) và chi phí thanh toán theo mức sử dụng (Blaze Plan) của Google Cloud, chi phí vận hành ước tính dưới 0.005 USD/người dùng hoạt động hàng tháng (MAU).

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Biên tập âm thanh: Module My Studio phiên bản hiện tại chưa cho phép người dùng tự cắt ghép hoặc gắn hiệu ứng âm thanh động (Dynamic BGM/SFX) theo từng lời thoại ngay trên điện thoại do giới hạn thời gian thực hiện đồ án.
  • Định dạng đồ họa: Mới chỉ hỗ trợ 2D Static Sprite, chưa hỗ trợ Live2D hoặc mô hình khung xương 3D Spine.

Định hướng nâng cấp tương lai

  1. Tích hợp Live2D & Spine Animation: Tăng cường tính sống động cho cử động của nhân vật trong lúc hội thoại.
  2. Studio Audio Mixer: Xây dựng bộ công cụ biên tập và đồng bộ âm thanh đa rãnh trực tiếp trên giao diện cảm ứng.
  3. Cơ chế thương mại hóa nội dung (Monetization & In-App Purchases): Cung cấp hệ thống trả phí theo chương (Pay-per-chapter) và cơ chế chia sẻ doanh thu cho tác giả thông qua cổng thanh toán Google Play Billing / Apple StoreKit.
  4. Tích hợp Trợ lý AI Hỗ trợ viết kịch bản (GenAI Writing Assistant): Tích hợp LLM hỗ trợ gợi ý ý tưởng rẽ nhánh kịch bản và tự động tạo biểu cảm cho nhân vật.

Đối tượng hưởng lợi

  • Sinh viên & Người học ngành Phần mềm: Nguồn tài liệu tham khảo thực tiễn về việc ứng dụng kiến trúc Reactive Programming (UniRx), tích hợp NoSQL Firebase vào Unity Engine và tối ưu hóa hiệu năng thiết bị di động.
  • Nhà phát triển game di động: Mô hình tham chiếu chuẩn xác cho việc thiết kế hệ sinh thái ứng dụng có khả năng quản lý nội dung do người dùng tạo (UGC - User Generated Content).
  • Cộng đồng sáng tác & Người đọc truyện: Nền tảng miễn phí, tiện lợi để hiện thực hóa các câu chuyện tương tác và khám phá hàng nghìn kết thúc bất ngờ từ cộng đồng.

Câu hỏi thường gặp

1. Ứng dụng yêu cầu cấu hình thiết bị như thế nào để vận hành mượt mà?

Hệ thống được tối ưu hóa sâu ở tầng render đồ họa 2D. Ứng dụng chạy mượt mà trên mọi thiết bị Android từ phiên bản 8.0 (RAM tối thiểu 2GB, dung lượng trống 150MB) và iOS từ phiên bản 12.0 (iPhone 7 trở lên).

2. Dữ liệu truyện và tiến độ đọc có bị mất khi đổi thiết bị không?

Không. Nhờ tích hợp Firebase Authentication và Cloud Firestore, toàn bộ dữ liệu gồm: tác phẩm đang soạn thảo, kho nhân vật cá nhân, lịch sử đọc và các nhánh cốt truyện đã mở khóa đều được đồng bộ tự động theo thời gian thực dựa trên ID tài khoản người dùng.

3. Tác giả không biết vẽ nhân vật có thể tạo truyện được không?

Hoàn toàn được. Ứng dụng cung cấp kho nhân vật cộng đồng (Community Character Hub). Tác giả có thể lựa chọn các bộ nhân vật mẫu có sẵn với đầy đủ biểu cảm đa dạng (vui, buồn, tức giận, ngạc nhiên) để đưa vào kịch bản của mình.

4. Tốc độ đọc truyện khi mất kết nối Internet (Offline Mode) như thế nào?

Ứng dụng tích hợp cơ chế Local Cache thông minh. Khi người dùng mở một chương truyện, toàn bộ cấu trúc đồ thị phân cảnh và hình ảnh nén sẽ được lưu tạm vào bộ nhớ cục bộ, cho phép đọc liền mạch ngay cả khi mất tín hiệu mạng đột ngột.

5. Dự án có khả năng tích hợp các cổng thanh toán để tác giả kiếm tiền không?

Kiến trúc phân tầng của ứng dụng cho phép tích hợp linh hoạt các module thanh toán tiêu chuẩn như Google In-App Billing, Apple IAP hoặc ví điện tử (MoMo, VNPay) thông qua RESTful APIs và Webhooks xác thực bảo mật từ server.


Kết luận

Đồ án khóa luận tốt nghiệp "Xây dựng ứng dụng thư viện truyện tương tác trên thiết bị di động" của nhóm tác giả Lâm Sơn Hải và Phan Hồng Quân (Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) đã giải quyết thành công bài toán phức tạp trong việc đưa trải nghiệm sáng tác và trải nghiệm tiểu thuyết trực quan lên nền tảng di động.

Bằng việc kết hợp sức mạnh đồ họa của Unity, kiến trúc hướng sự kiện bất đồng bộ UniRx, kỹ thuật nén ảnh ImageMagick và nền tảng dữ liệu đám mây thời gian thực Firebase, đề tài không chỉ đạt kết quả xuất sắc về mặt học thuật mà còn sở hữu giá trị ứng dụng thực tiễn to lớn trong ngành công nghiệp nội dung số. Đây là tiền đề vững chắc cho việc phát triển một mạng xã hội truyện tương tác quy mô lớn tại Việt Nam trong tương lai.