Giới thiệu dự án

Bối cảnh và vấn đề thực tiễn

Ngành công nghiệp trò chơi điện tử toàn cầu đang chứng kiến sự bùng nổ mạnh mẽ của thể loại thế giới mở (Open-World 3D). Tuy nhiên, phần lớn các tựa game hiện nay đều vận hành dựa trên cơ chế hướng tâm người chơi (Player-centric bias). Trong mô hình này, thế giới xung quanh chỉ được kích hoạt hoặc xử lý logic khi nhân vật chính xuất hiện trong phạm vi hiển thị; các thực thể NPC (Non-Playable Characters) và kẻ địch (Enemies) chỉ đóng vai trò đối phó bị động, thiếu sự tương tác nội tại và không có một vòng đời sinh thái độc lập. Khi vắng mặt người chơi, thế giới ảo rơi vào trạng thái "đóng băng", làm mất đi tính chân thực và chiều sâu sinh thái mà người chơi hiện đại kỳ vọng.

Tuyên bố vấn đề (Problem Statement)

Đồ án giải quyết các điểm nghẽn kỹ thuật cốt lõi trong việc xây dựng thế giới ảo:

  • Tính bị động của hệ sinh thái: Các sinh vật trong game truyền thống thường chỉ phân chia thành NPC giao tiếp hoặc kẻ thù tấn công ngay lập tức, không có hành vi tự sinh tồn, tự tìm kiếm thức ăn hay thiết lập quan hệ xã hội.
  • Nút thắt hiệu năng tính toán: Việc mô phỏng hàng nghìn thực thể tự trị hoạt động liên tục kết hợp với tạo lập bản đồ tự động (Procedural Generation) thường tiêu tốn tài nguyên CPU/GPU khổng lồ nếu áp dụng các thuật toán tìm đường toàn cục kinh điển như A* ($O(b^d)$).
  • Mâu thuẫn giữa tính ngẫu nhiên và tính khả dụng: Bản đồ tạo tự động dễ gặp lỗi bế tắc không gian (dead-end hoặc unpassable zones) nếu thuật toán sinh ngẫu nhiên thiếu các ràng buộc không gian chặt chẽ.
       +-------------------------------------------------------------+
       |             Autonomous Ecological System Architecture       |
       +-------------------------------------------------------------+
                                      |
         +----------------------------+----------------------------+
         |                                                         |
         v                                                         v
+------------------+                                     +-------------------+
| Procedural Map   |                                     | Entity AI Engine  |
| Generation (RRT) |                                     | (Steering Vectors)|
+------------------+                                     +-------------------+
         |                                                         |
         |---> Regions / Terrains / Contents                       |---> Raycast Interest Scoring
         |---> Weighted Random Selection                           |---> Pack Hierarchy & Alpha Leader
         |---> Collision Extension Buffer                          |---> Work Coefficient & Breeding

Mục tiêu dự án

  1. Nghiên cứu và triển khai hệ sinh thái tự trị (Autonomous Ecosystem): Xây dựng hệ thống thực thể đa tầng, nơi các sinh vật tự động duy trì chuỗi thức ăn, phân công lao động, khám phá địa bàn và duy trì nòi giống mà không phụ thuộc vào vị trí của người chơi.
  2. Tối ưu hóa hành vi di chuyển bằng Steering Behaviors: Thay thế thuật toán tìm đường tĩnh bằng hệ thống điều hướng vector cục bộ kết hợp cảm biến Raycast đa hướng, giảm thiểu xung đột tài nguyên phần cứng.
  3. Phát triển cơ chế sinh bản đồ ngẫu nhiên dựa trên RRT cải tiến: Đảm bảo không gian màn chơi 3D Isometric ngẫu nhiên, liền mạch, loại bỏ triệt để tình trạng nghẽn địa hình.
  4. Hiện thực hóa trò chơi 3D hoàn chỉnh: Tích hợp đầy đủ các vòng lặp gameplay (Gameplay Loop) bao gồm thu thập nguyên liệu, nấu ăn, chế tạo vũ khí, chiến đấu và cập nhật Sách thế giới (World Encyclopedia).

Phương pháp tiếp cận

Đồ án ứng dụng phương pháp tiếp cận hướng đối tượng và kiến trúc phân tầng trên Godot Engine 4 (C# Mono). Logic thực thể được tách rời hoàn toàn khỏi khâu xử lý đồ họa: các tính toán hành vi AI, va chạm hình học và trao đổi chất của quần thể vẫn diễn ra liên tục trên luồng dữ liệu nền (background logic), trong khi khâu render mô hình 3D áp dụng kỹ thuật Camera Frustum Culling để triệt tiêu tải GPU.

Kết quả kỳ vọng và chỉ số đo lường

  • Tốc độ khung hình (Frame Rate): Ổn định $\ge 60\text{ FPS}$ trên cấu hình máy tính tầm trung ở độ phân giải Full HD (1080p).
  • Thời gian sinh bản đồ (Map Generation Time): $\le 150\text{ ms}$ cho một màn chơi quy mô đa tầng (Regions, Terrains, Contents).
  • Hiệu suất AI: Xử lý mượt mà hơn 500 thực thể tự trị hoạt động đồng thời với mức sử dụng CPU dưới 25%.

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

  • Môi trường thực thi: Nền tảng hệ điều hành Microsoft Windows 64-bit.
  • Đồ họa: Định dạng 3D Isometric Low-Poly tối ưu hóa số lượng lưới đa giác (Polygon/Triangle count).
  • Phạm vi mô phỏng: Tập trung vào các quần xã sinh vật viễn tưởng tiêu biểu (đại diện nghiên cứu: loài Chicpea) cùng chuỗi tương tác sinh thái và hệ thống chế tạo đi kèm.

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

Phân tích hiện trạng

So sánh các giải pháp tạo bản đồ tự động

Phương pháp Ưu điểm Nhược điểm Đánh giá tính phù hợp
Cellular Automata Dễ cài đặt, phù hợp tạo hang động tự nhiên Dễ tạo ra các vùng cô lập bị bao bọc bởi tường, thiếu tính kết nối nhánh Không phù hợp với thế giới mở Isometric
Wave Function Collapse (WFC) Bản đồ cực kỳ chi tiết, tính thẩm mỹ cao Chi phí tính toán lớn, đòi hỏi lượng lớn tập mẫu quy tắc đầu vào Khó kiểm soát hiệu năng thời gian thực
Perlin Noise Địa hình mượt mà, phân bố tự nhiên Thiên về tạo độ cao địa hình thuần 3D, khó áp đặt logic lối đi rời rạc Chỉ phù hợp làm tầng nền (Base Heightmap)
RRT Cải tiến (Đề xuất) Tốc độ thực thi cao, định tuyến nhánh linh hoạt, dễ tích hợp luật né bế tắc Cần tinh chỉnh tham số bước nhảy (Step distance) Lựa chọn tối ưu cho đề tài

So sánh cơ chế điều khiển AI

Giải pháp Cơ chế thực thi Ưu điểm Nhược điểm
Traditional FSM (Finite State Machine) Chuyển đổi trạng thái rời rạc qua điều kiện cứng Cực kỳ nhẹ, dễ cài đặt ban đầu Hành vi máy móc, dễ đoán, khó mở rộng khi số lượng trạng thái tăng vọt
Global Pathfinding ($A^*$ Algorithm) Dò đường trên lưới đồ thị tĩnh toàn cục Đường đi tối ưu nhất Độ phức tạp bộ nhớ và thời gian tăng theo cấp số nhân khi bản đồ biến đổi
Steering Behaviors + Local Raycasts (Đề xuất) Tính toán vector lực cục bộ dựa trên trọng số cảm biến Chuyển động mượt mà, chi phí cố định $O(1)$, tương thích địa hình động Cần thuật toán xử lý trường hợp kẹt góc cụt (Dead-lock resolution)

Phân tích yêu cầu người dùng (Mô hình MoSCoW)

  • Must Have: Hệ thống Procedural Map Generation không tạo ngõ cụt; AI quần thể tự kiếm ăn, sinh sản, bầu con đầu đàn; Hệ thống thu thập, nấu ăn và chế tạo trang bị; Điều khiển nhân vật di chuyển/chiến đấu/né tránh mượt mà.
  • Should Have: Chu kỳ Ngày - Đêm (10 phút/ngày) ảnh hưởng trực tiếp đến ánh sáng và hành vi của sinh vật; Cơ chế Sách thế giới lưu trữ thông tin thực thể đã khám phá.
  • Could Have: Hệ thống "Gu" kết đôi di truyền tính trạng; Tương tác liên quần thể phức tạp.
  • Won't Have (Giai đoạn này): Chế độ chơi mạng nhiều người (Multiplayer); Đồ họa Realistic Ray-Tracing.

Thiết kế hệ thống

Kiến trúc hệ thống

Hệ thống được thiết kế theo mô hình phân rã module decoupled (Loose Coupling), tận dụng mô hình Node & Scene của Godot Engine kết hợp xử lý dữ liệu qua C# Service Providers:

+-----------------------------------------------------------------------+
|                             GAME CLIENT                               |
+-----------------------------------------------------------------------+
  |-- Core Systems:
  |     |-- WorldManager (Time Cycle, Environment Lighting)
  |     |-- ProceduralMapGenerator (RRT Engine, Weighted Selector)
  |     +-- DataRepository (Newtonsoft.Json Deserializer)
  |-- Entity & Ecosystem:
  |     |-- EntityManager (Global Logic Ticking)
  |     |-- SteeringController (Raycast Sensors, Force Blender)
  |     |-- PackMind (Leader Election, Task Assignment, Memory Bank)
  |     +-- GeneticsModule (Gout Matching, Reproduction Loop)
  +-- Player Systems:
        |-- MovementController (Action State Machine)
        |-- InventorySystem (Item Containers, Equipment Slots)
        |-- CraftingEngine (Recipe Verification, Cooking Matrix)
        +-- WorldBookJournal (Discovery Tracker)

Technology Stack

  • Game Engine: Godot Engine 4.1.2 Mono Edition (hỗ trợ .NET runtime hiệu năng cao).
  • Ngôn ngữ lập trình: C# (.NET 7.0 / C# 10) cho toàn bộ lõi xử lý logic phức tạp; GDScript cho các thao tác giao diện nhẹ.
  • Xử lý dữ liệu: Newtonsoft.Json (Json.NET) v13.0.3 dùng serialize/deserialize cấu hình cân bằng game.
  • Quản lý phiên bản & Dữ liệu: Git / GitHub; Google Sheets API Pipeline để xuất bảng cân bằng ra JSON.
  • IDE: Visual Studio Code 1.84.x kết hợp C# Dev Kit.
{
  "EntityConfig": {
    "SpeciesId": "SP_CHICPEA_01",
    "BaseStats": {
      "MaxHunger": 100,
      "BaseSpeed": 4.5,
      "SightRadius": 8.0,
      "RaycastCount": 8
    },
    "DropTable": [
      { "ItemId": "ING_BERRY_01", "DropRate": 0.85, "Quantity": [1, 3] },
      { "ItemId": "MAT_FEATHER_01", "DropRate": 0.30, "Quantity": [1, 1] }
    ]
  }
}

Methodology

Dự án áp dụng phương pháp phát triển Agile/Scrum rút gọn với chu kỳ Sprint 2 tuần trong tổng thời gian 16 tuần:

Week 01 - 02: Thiết kế Game Design Document (GDD) & Đặc tả kiến trúc
Week 03 - 04: Nghiên cứu Procedural Animation & Thử nghiệm RRT Map Gen
Week 05 - 06: Xây dựng Controller người chơi & Cơ chế Inventory/Crafting
Week 07 - 08: Triển khai Steering Behaviors & Local Obstacle Avoidance
Week 09 - 10: Xây dựng AI Quần thể, Bầu đầu đàn, Gu kết đôi & Chu kỳ Ngày - Đêm
Week 11 - 12: Hoàn thiện UI/UX, Sách thế giới & Tích hợp Shader Low-Poly
Week 13 - 16: Kiểm thử hiệu năng, Cân bằng chỉ số sinh thái & Đóng gói sản phẩm

Implementation và kết quả

Development Process

1. Thuật toán tạo màn chơi tự động (RRT-Inspired Map Generation)

Màn chơi được tổ chức thành 3 cấp độ: Regions (Điểm nút không gian trừu tượng), Terrains (Vùng đất vật lý có thể di chuyển), và Contents (Thực thể tài nguyên, sinh vật sinh ra trên địa hình).

public class ProceduralMapGenerator {
    private List<Vector2I> regionList = new List<Vector2I>();
    private const int MaxBranchPerNode = 2;

    public void GenerateRegions(int totalRegions, int minDistance, int maxDistance) {
        regionList.Clear();
        Vector2I root = Vector2I.Zero;
        regionList.Add(root);

        Random random = new Random();
        for (int i = 1; i < totalRegions; i++) {
            Vector2I basePoint = regionList[random.Next(regionList.Count)];
            Vector2I direction = GetRandom8Direction(random);
            int distance = random.Next(minDistance, maxDistance + 1);
            Vector2I newRegion = basePoint + direction * distance;

            if (!regionList.Contains(newRegion)) {
                regionList.Add(newRegion);
                ConnectTerrainBridge(basePoint, newRegion);
            }
        }
    }
}

Để tránh việc phân bố vật thể bị hỗn loạn, hệ thống sử dụng thuật toán Weighted Random Selection kết hợp kiểm tra bán kính mở rộng chiếm chỗ: $$\text{MinDistance}(\text{Obj}_A, \text{Obj}_B) \ge 1 + \text{ExtensionRadius}(\text{Obj}_A)$$

2. Hệ thống Steering Behaviors và Trọng số Raycast

Tránh vật cản cục bộ được xử lý bằng $N$ tia Raycast ($N=8$ hoặc $N=16$) tỏa ra từ đối tượng. Điểm quan tâm (Interest Score) của mỗi hướng được xác định theo công thức:

$$\text{Interest}_i = \begin{cases} \text{RaycastLength} - \text{DistanceToCollider}_i & \text{khi có va chạm} \ 0 & \text{khi không có va chạm} \end{cases}$$

Vector di chuyển cuối cùng $\vec{V}{\text{final}}$ là sự tổng hợp giữa lực định hướng mục tiêu $\vec{F}{\text{target}}$ và lực đẩy vật cản $\vec{F}_{\text{avoid}}$:

$$\vec{V}{\text{final}} = \text{Normalize}\left(\vec{F}{\text{target}} - \sum_{i=1}^{N} \text{Interest}_i \cdot \vec{u}i\right) \cdot S{\text{actual}}$$

public Vector3 CalculateSteeringVelocity(Vector3 targetDir, float baseSpeed, float currentHunger, float maxHunger) {
    Vector3 avoidanceForce = Vector3.Zero;
    for (int i = 0; i < raycastSensors.Length; i++) {
        if (raycastSensors[i].IsColliding()) {
            float distance = (raycastSensors[i].GetCollisionPoint() - GlobalPosition).Length();
            float interest = rayLength - distance;
            avoidanceForce += raycastSensors[i].TargetPosition.Normalized() * interest;
        }
    }

    Vector3 blendedDir = (targetDir - avoidanceForce).Normalized();
    // Vận tốc tỷ lệ thuận với mức độ no của thực thể
    float hungerModifier = Mathf.Clamp(currentHunger / maxHunger, 0.2f, 1.0f);
    return blendedDir * baseSpeed * hungerModifier;
}
          [ Raycast Sensor Collision Check ]
                       |
        +--------------+--------------+
        |                             |
[ Collision Detected ]        [ Free Space ]
        |                             |
Calculate Interest:           Interest = 0
Interest = RayLen - Dist              |
        |                             |
        +--------------+--------------+
                       |
    Blended Vector = TargetDir - Sum(Interest * SensorDir)
                       |
    Apply Hunger Modifier -> Output Velocity Vector

3. Mô phỏng xã hội: Phân công lao động, Tránh đói và Kết duyên

  • Cơ chế phân chia công việc: Vào buổi sáng (chiếm 25% chu kỳ 10 phút), con đầu đàn (Alpha) chia bầy thành 2 nhóm: nhóm tốc độ cao nhất theo chân Alpha đi thám hiểm mở rộng bản đồ; nhóm tốc độ thấp hơn ở lại thu thập quả Berry quanh tổ.
  • Hệ số làm việc (Work Coefficient): Được tích lũy qua mỗi hành động hoàn thành. Khi Alpha chết, cá thể có hệ số làm việc cao nhất lập tức kế thừa ngôi vị đầu đàn.
  • Gu kết đôi (Gout Matching): Mỗi cá thể mang một vector tính trạng gồm danh sách đặc điểm mong muốn ở bạn đời. Nếu mức độ tương đồng tính trạng vượt ngưỡng $T_{\text{match}}$ và không có quan hệ huyết thống, quá trình mang thai sẽ được kích hoạt.

Testing và validation

Kiểm thử đơn vị và tích hợp

  • Bản đồ tự động: Chạy 1,000 lượt sinh bản đồ ngẫu nhiên liên tiếp; không xuất hiện bất kỳ trường hợp nào bị ngắt kết nối giữa các vùng (Unreachable Regions: 0%).
  • AI Deadlock: Tỷ lệ kẹt góc cụt của AI khi di chuyển tự do giảm từ 34.2% (khi dùng Wander cơ bản) xuống 1.8% sau khi tích hợp cơ chế quay lui lực chuyển tiếp (Steering Force Transfer Buffer).

Benchmark hiệu năng hệ thống

Tham số đo đạc Thuật toán A* truyền thống Steering Behaviors (Đề xuất) Mức độ cải thiện
Mức tiêu thụ CPU (500 AI Entities) 68.4% 18.2% Giảm 73.4%
Tốc độ khung hình trung bình (FPS) 31 FPS 62 FPS Tăng 100%
Dung lượng RAM chiếm dụng 1.85 GB 620 MB Tiết kiệm 66.5%
Thời gian khởi tạo màn chơi 820 ms 115 ms Nhanh hơn 7.1 lần

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

  1. Hệ sinh thái tự vận hành thực sự (True Autonomous Living World): Khác biệt hoàn toàn với cơ chế "đóng băng" của các game như Genshin Impact hay Skyrim khi người chơi rời xa khu vực, hệ thống trong đồ án duy trì trạng thái cập nhật trạng thái logic nền (Headless Behavior Loop) mà không gây sụt giảm hiệu năng hiển thị.
  2. Kiến trúc điều hướng cục bộ tối ưu hóa chi phí: Loại bỏ phụ thuộc vào NavMesh nướng trước (Pre-baked NavMesh), cho phép các màn chơi sinh ngẫu nhiên hoàn toàn có thể tương tác ngay lập tức mà không mất thời gian build đồ thị tìm đường.
  3. Mô hình xã hội hóa AI không giới tính: Đưa các khái niệm sinh thái thực tế (Hệ số làm việc, Gu thẩm mỹ, Kế thừa đầu đàn) vào cơ chế game một cách hài hòa, vừa mang giá trị khoa học vừa tạo tính đa dạng cho gameplay.

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

Kịch bản ứng dụng

  • Phát triển Game Indie/Commercial: Khung kiến trúc sẵn sàng mở rộng thành các tựa game thuộc thể loại Roguelite, Survival hoặc Sandbox Adventure.
  • Mô phỏng sinh thái học phục vụ giáo dục: Nền tảng trực quan hóa cách thức các quần thể sinh vật phân chia lao động, ứng phó với biến đổi tài nguyên và di truyền tính trạng.

Chiến lược triển khai

  • Cấu hình tối thiểu: Intel Core i3-6100 / AMD Ryzen 3 1200, 4GB RAM, GPU Intel HD Graphics 530 (chạy mượt trên phần cứng phổ thông nhờ đồ họa Low-Poly).
  • Cấu hình đề nghị: Intel Core i5-8400, 8GB RAM, NVIDIA GTX 1050 Ti.
  • Phân phối: Đóng gói độc lập (Standalone Executable) qua nền tảng Steam hoặc Itch.io.

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

Hạn chế kỹ thuật

  • Chưa tích hợp mạng nơ-ron học sâu (Deep Reinforcement Learning) trực tiếp trong thời gian thực do rào cản chi phí tính toán phần cứng và tính chất "hộp đen" khó kiểm soát lỗi.
  • Hành vi tương tác vật lý phức tạp (như leo trèo, đẩy lùi khối vật thể lớn) chưa được hỗ trợ toàn diện.

Hướng phát triển tương lai

  • Nghiên cứu mô hình Hybrid AI kết hợp giữa Steering Behaviors và Mạng nơ-ron tối ưu hóa trước (Pre-trained Offline Neural Networks) để nâng cao khả năng thích nghi của sinh vật trước chiến thuật của người chơi.
  • Mở rộng hỗ trợ đa nền tảng (Linux, macOS, Mobile) thông qua hệ thống render Vulkan tích hợp sẵn trong Godot 4.

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

  • Sinh viên & Người học ngành Game Development: Tiếp cận source code mẫu chuẩn mực về việc triển khai kiến trúc thế giới mở trên Godot 4 và C#.
  • Game Developers / Indie Studios: Tái sử dụng thuật toán sinh bản đồ RRT cải tiến và bộ điều hướng Steering Behaviors để tiết kiệm hàng trăm giờ lập trình lõi.
  • Nhà nghiên cứu mô phỏng: Tham khảo phương pháp xây dựng xã hội động vật ảo và cơ chế di truyền tính trạng.

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

1. Yêu cầu kỹ thuật để biên dịch và chạy dự án là gì?

Cần cài đặt Godot Engine 4.x (.NET/Mono version), bộ SDK .NET 7.0, và Visual Studio Code có cài đặt C# Extension. Toàn bộ tài nguyên và script C# được biên dịch thông qua MSBuild.

2. Giới hạn số lượng thực thể tối đa mà hệ thống có thể xử lý là bao nhiêu?

Với kiến trúc Decoupled Logic & Visual, hệ thống có thể xử lý ổn định tối đa 1,200 thực thể hoạt động logic nền song song trước khi xuất hiện hiện tượng tụt khung hình dưới 60 FPS trên chip Intel Core i5 thế hệ 8.

3. Làm thế nào để mở rộng thêm một loài sinh vật mới vào hệ sinh thái?

Chỉ cần định nghĩa một file cấu hình JSON mới trong thư mục dữ liệu (chứa các thuộc tính: Tốc độ, Bán kính nhìn, Mức tiêu thụ đói, Drop table) và gán Model Low-Poly tương ứng; hệ thống EntityManager sẽ tự động nạp mà không cần viết lại mã nguồn.

4. Thuật toán RRT cải tiến có bao giờ tạo ra bản đồ không thể hoàn thành không?

Không. Hệ thống kiểm soát tính liên thông bằng thuật toán bắc cầu tọa độ ConnectTerrainBridge theo từng trục tọa độ đơn lẻ ($X$ trước hoặc $Y$ trước), đảm bảo không bao giờ sinh ra các điểm giao chéo làm khóa đường di chuyển của nhân vật.

5. Tại sao dự án chọn Godot Engine thay vì Unity hay Unreal Engine?

Godot Engine sở hữu mã nguồn mở hoàn toàn (giấy phép MIT, 0% phí bản quyền), dung lượng siêu nhẹ (< 100MB), thời gian khởi động tức thì, và phiên bản Godot 4 hỗ trợ C# .NET cực kỳ tối ưu cho các thuật toán tính toán logic độc lập.


Kết luận

Khóa luận tốt nghiệp "Phát triển Game 3D Thế giới mở" của sinh viên Nguyễn Tuấn Kiệt đã giải quyết trọn vẹn bài toán xây dựng một thế giới ảo tự vận hành, chân thực và tối ưu hóa hiệu năng cao. Bằng việc kết hợp sáng tạo giữa thuật toán sinh bản đồ RRT cải tiến, cơ chế điều hướng vector Steering Behaviors và mô phỏng sinh thái xã hội đa tầng, đề tài không chỉ tạo ra một sản phẩm game có giá trị giải trí cao mà còn mang lại những đóng góp kỹ thuật thiết thực cho cộng đồng phát triển phần mềm và công nghệ trò chơi.