Đề tài Xây dựng game engine đa nền tảng quản lý khung cảnh

Khái niệm Game Engine xuất hiện ở giữa thập kỉ 90 và ngày này đã trở thành một thành phần quan trọng trong quy trình phát triển trò chơi điện tử. Sự ra đời và phát triển của Game Engine đã mang đến cho các game hiện đại những bước tiến nhảy vọt về mọi mặt : đồ họa, khả năng tương tác, độ chân thực… Khóa luận này đề cập đến phương pháp triển khai module “Quản lýkhung cảnh” trong dự án “Xây dựng Game Engine đa nền tảng” của chúng tôi.Cụ thể,chương 1 và chương 2mang đến cho người đọc một các nhìn tổng thể vềkiến trúc của cả hệ thống Game Engine. Sau đó, chương 3trình bày chi tiết về module “Quản l ýkhung cảnh”,đi sâu vàocách tổ chức khung cảnh và các giai đoạntrong quá trình render khung cảnh. Cuối cùng là thông tin kiểm thử thực nghiệm về hiệu năng của các kỹ thuật được triển khai và hướng phát triển trong tương lai.

pdf46 trang | Chia sẻ: nhungnt | Lượt xem: 2022 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đề tài Xây dựng game engine đa nền tảng quản lý khung cảnh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trương Đức Phương XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG QUẢN LÝ KHUNG CẢNH KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin HÀ NỘI - 2009 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trương Đức Phương XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG QUẢN LÝ KHUNG CẢNH KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin Cán bộ hướng dẫn: TS. Nguyễn Việt Hà Cán bộ đồng hướng dẫn : ThS. Vũ Quang Dũng HÀ NỘI - 2009 Lời cảm ơn Tôi xin chân thành cảm ơn Tiến sĩ Nguyễn Việt Hà, Thạc sĩ Vũ Quang Dũng là người trực tiếp, nhiệt tình hướng dẫn tôi hoàn thành khóa luận tốt nghiệp này. Tôi xin gửi lời cảm ơn phòng thí nghiệm Toshiba-Coltech đã tạo môi trường làm việc để nhóm chúng tôi tập trung cùng nhau nghiên cứu. Tôi xin gửi lời cảm ơn tới toàn thể các thầy giáo, cô giáo tại Trường Đại học Công Nghệ - Đai học Quốc gia Hà Nội những người đã hết lòng dạy cho tôi những kiến thức hết sức bổ ích trong 4 năm học qua. Xin cảm ơn gia đình và những người bạn đã dành cho tôi tình thương yêu và sự hỗ trợ tốt nhất. Hà nội, ngày 22 tháng 05 năm 2009 Sinh viên Trương Đức Phương Tóm tắt nội dung Khái niệm Game Engine xuất hiện ở giữa thập kỉ 90 và ngày này đã trở thành một thành phần quan trọng trong quy trình phát triển trò chơi điện tử. Sự ra đời và phát triển của Game Engine đã mang đến cho các game hiện đại những bước tiến nhảy vọt về mọi mặt : đồ họa, khả năng tương tác, độ chân thực… Khóa luận này đề cập đến phương pháp triển khai module “Quản lý khung cảnh” trong dự án “Xây dựng Game Engine đa nền tảng” của chúng tôi. Cụ thể, chương 1 và chương 2 mang đến cho người đọc một các nhìn tổng thể về kiến trúc của cả hệ thống Game Engine. Sau đó, chương 3 trình bày chi tiết về module “Quản l ý khung cảnh”, đi sâu vào cách tổ chức khung cảnh và các giai đoạn trong quá trình render khung cảnh. Cuối cùng là thông tin kiểm thử thực nghiệm về hiệu năng của các kỹ thuật được triển khai và hướng phát triển trong tương lai. Mục lục Tóm tắt nội dung ........................................................................................................... Bảng các thuật ngữ ........................................................................................................ Danh mục hình vẽ.......................................................................................................... Chương 1. Đặt vấn đề ..................................................................................................1 1.1. Bối cảnh nghiên cứu ..........................................................................................1 1.2. Mục tiêu ............................................................................................................1 1.3. Giới thiệu chung ................................................................................................2 Chương 2. Kiến trúc tổng thể .......................................................................................4 2.1. Thành phần Các kiểu dữ liệu cơ bản ..................................................................5 2.2. Thành phần Giao tiếp với hệ điều hành..............................................................7 2.3. Thành phần Render Engine................................................................................8 2.4. Các thành phần còn lại.....................................................................................10 Chương 3. Quản lý khung cảnh..................................................................................11 3.1. Khái niệm khung cảnh và cách tổ chức khung cảnh .........................................11 3.2. Thiết kế cấu trúc ..............................................................................................13 3.3. Thiết kế chức năng ..........................................................................................21 Chương 4. Tổng kết ...................................................................................................34 4.1. Kết quả ............................................................................................................34 4.2. Hướng phát triển..............................................................................................37 Bảng các thuật ngữ Thuật ngữ Ý nghĩa Axis aligned bounding box Là một loại bounding volume có dạng hình hộp, các cạnh dọc theo 3 trục xyz. Bounding Sphere Là một loại bounding volume có dạng hình cầu. Bounding Volume Là danh từ chung chỉ các loại hình học đơn giản được sử dụng để mô tả một không gian bao bọc hoàn toàn một vật thể nào đó. Event Đơn vị truyền thông liên tiến trình được gửi đến bởi Hệ điều hành. Game Engine Middleware cung cấp một giao diện đơn giản hơn để phát triển game . Mesh Là một mạng lưới các đa giác dùng để mô tả hình dạng của vật thể trong không gian 3 chiều. OpenGL Một chuẩn 3d graphic API . Render Là việc từ các dữ liệu về khung cảnh, đối tượng 3D, ta thực hiện các phép biến đổi, các tính toán để đưa ra hình ảnh 2D thu được tại vị trí nhìn ( giống nhau quá trình mắt người hay các camera thu hình ảnh 2D từ môi trường ). Texture Là một hoặc một loạt các bức ảnh dùng để tăng độ chi tiết cho các đối tượng. View Frustum Hình chóp cụt xác định khung nhìn của camera. Danh mục hình vẽ Hình 1: Kiến trúc phân tầng của GEM. .......................................................................2 Hình 2: Kiến trúc tổng thể...........................................................................................4 Hình 3: Biểu đồ lớp của thành phần Các kiểu dữ liệu cơ bản.......................................5 Hình 4: Quá trình điều phối event. ..............................................................................7 Hình 5: Kiến trúc phân tầng của Render Engine..........................................................8 Hình 6: Biểu đồ gói của Render Engine. .....................................................................9 Hình 7: Axis Aligned Bounding Box và Bounding Sphere trong GEM. ....................12 Hình 8: Ví dụ cây khung cảnh và BHVs tương ứng...................................................12 Hình 9: Biều đồ lớp của module Quản lý khung cảnh. ..............................................13 Hình 10: Lớp SceneNode. .........................................................................................14 Hình 11: Lớp SolidMeshSceneNode. ........................................................................16 Hình 12: Hình ảnh Bàn cờ và các quân cờ dùng SolidMeshNode. ............................17 Hình 13: Lớp CameraSceneNode. .............................................................................18 Hình 14: Lớp SkyboxSceneNode. .............................................................................19 Hình 15: Skybox. ......................................................................................................20 Hình 16: Lớp SceneGraphManager. ..........................................................................20 Hình 17: Lớp RenderList và RenderContext. ............................................................21 Hình 18: Biều đồ hoạt động của giai đoạn prepare-render. ........................................23 Hình 19: Biều đồ hoạt động của giai đoạn Tính lại BVHs. ........................................25 Hình 20: Ví dụ minh họa khung hình. .......................................................................27 Hình 21: Biều đồ hoạt động giai đoạn view frustum culling. .....................................28 Hình 22: Ví dụ một Bounding Sphere có d > R. ........................................................29 Hình 23: Biều đồ hoạt động của giai đoạn render từng render-list. ............................32 Hình 24: Ví dụ minh họa một vật thể bị chắn hoàn toàn. ...........................................33 1 Chương 1. Đặt vấn đề 1.1. Bối cảnh nghiên cứu Ngành công nghiệp phát triển game trên thế giới đang phát triển như vũ bão. Cách đây 20 năm, game rất đơn giản và chỉ cần một người hoặc một nhóm nhỏ người phát triển nhưng ngày nay, các game hiện đại với đồ họa và khả năng tương tác ấn tượng thường được phát triển bởi một đội ngũ đông đảo người thiết kế game, lập trình viên, nghệ sĩ… trong thời gian ròng rã từ một đến ba năm. Chính việc game ngày càng trở nên phức tạp như vậy nên hiện nay, các game thương mại không còn phát triển từ nguyên thủy nữa mà được phát triển lên từ game engine. Game engine hỗ trợ việc xây dựng game một cách nhanh chóng, đơn giản hơn đồng thời cung cấp khả năng tái sử dụng code cao do có thể phát triển nhiều game từ một game engine. Ở Việt Nam, Game online mới chỉ thực sự thâm nhập vào thị trường cách đây 6 năm nhưng chỉ trong khoảng thời gian ít ỏi đó, chúng ta đã có một số lượng nhà phát hành game lên tới con số hàng chục, số game được phát hành cũng tương ứng với số lượng đó. Nhưng theo như chúng tôi được biết, gần như tất cả các game online đang được phát hành ở Việt Nam là được nhập khẩu từ nước ngoài, chủ yếu là Trung Quốc và Hàn Quốc ( trừ một số game nhỏ chơi trên web như đánh bài, đánh cờ ..) Một câu hỏi mà có lẽ tất cả những người chơi game đều trăn trở là “bao giờ mới được chơi game Việt Nam?”. Chúng tôi chọn đề tài này làm khóa luận tốt nghiệp không phải với một tham vọng quá lớn, chỉ là muốn đi những bước chân chập chững đầu tiên vào thế giới phát triển game rộng lớn, để thu lượm kiến thức về lĩnh vực khó khăn nhưng đầy thú vị này và hi vọng ở một tương lai không xa, chúng tôi có thể góp một phần sức lực giái đáp trăn trở của cộng đồng người chơi game Việt Nam. 1.2. Mục tiêu Xây dựng một Game Engine đa nền có thể chạy trên nhiều hệ điều hành khác nhau, hướng đến phân khúc phát triên game nhập vai trực tuyến (MMORPG). Game Engine này được đặt tên là GEM. Đây là mục tiêu dài hạn, còn hiện tại, do thời gian làm luận văn chỉ khoảng 5 tháng nên nhóm chúng tôi chỉ tập trung hoàn thiện thành phần Render Engine trong Game Engine ( Xem chi tiết ở chương 2). 2 1.3. Giới thiệu chung Như đã giới thiệu ở trên, Game Engine là một lớp trung gian giữa game và nền tảng bên dưới, các thư viện lập trình cấp thấp. GEM là một game engine nên dĩ nhiên nó cũng tuân thủ theo nguyên tắc này Hình 1: Kiến trúc phân tầng của GEM. Đặt điểm đầu tiên của GEM là khả năng chạy đa nền.Để đặt được điều đó, GEM sử dụng các bản build trên các nền tảng khác nhau ( chứ không phải sử dụng thông dịch ). Các đoạn code phụ thuộc nền tảng sẽ được phân chia bằng việc sử dụng các cờ tiền biên dịch, hạn chế tối đa việc sử dụng các lớp abstract – vì việc này sẽ làm giảm hiệu suất chương trình đáng kể [1]. Cũng vì lí đo chạy đa nền nên chúng tôi lựa chọn openGL làm giao diện lập trình đồ họa 3D cấp thấp cho GEM, do chuẩn openGL là chuẩn mở và không bị phụ thuộc vào hệ điều hành. GEM được thiết kế hướng đối tượng và yêu cầu về hiệu năng chạy cao nên chúng tôi sử dụng ngôn ngữ C++ - ngôn ngữ đáp ứng hoàn hảo các điều kiện trên. Đa số các Game Engine trên thế giới hiện nay đều được phát triển bằng ngôn ngữ C++. Chúng tôi thiết kế GEM nhắm đến phân khúc phát triển game nhập vai trực tuyến, nên khả năng tương thích với một phạm vi rộng cấu hình phần cứng là một điều kiện quan trọng, dự kiến sẽ support các card đồ họa hỗ trợ openGL 1.4 và shader 1.0 trở lên. 3 Bảng cấu hình tối thiểu dự kiến : Hãng sãn xuất Dòng card hỗ trợ nVidia Từ GeForce4 Ti trở lên ATI Từ Radeon 9500 trở lên Intel ( card tích hợp ) Từ Intel® GMA 3100 ( chipset G31,Q33) trở lên 4 Chương 2. Kiến trúc tổng thể GEM là được chia thành nhiều thành phần để tiện cho việc phát triển và bảo trì. Cụ thể GEM gồm các thành phần như sau : Hình 2: Kiến trúc tổng thể. Ghi chú : Do thời gian làm luận văn có hạn, chúng tôi mới chỉ hoàn thành những thành phần sau : Giao tiếp với hệ điều hành, Các kiểu dữ liệu cơ bản, Render Engine. Những thành phần này đủ để hỗ trợ người sử dụng tạo ra các khung cảnh 3D và tương tác với chúng. 5 2.1. Thành phần Các kiểu dữ liệu cơ bản Các kiểu dữ liệu cơ bản là thành phần bao gồm các cấu trúc dữ liệu cơ bản như mảng động, vector, ma trận…, các phép toán trên các kiểu dữ liệu đó cung cấp cho thành phần khác sử dụng Hình 3: Biểu đồ lớp của thành phần Các kiểu dữ liệu cơ bản. Các kiểu dữ liệu này có thể chia thành 2 nhóm chính : - Các yếu tố trong không gian 3D : + Vector2, Vector, Vector4 : các loại vector biểu diễn tọa độ 2 chiều, 3 chiều và tọa độ đồng nhất + Aabb ( Axis aligned bounding box ) : hình hộp chữ nhật có các cạnh dọc theo 3 trục xyz, được mô tả bằng 2 điểm (xmin, ymin, zmin ), ( xmax, ymax, zmax ) + Sphere : hình cầu, được mô tả bởi tọa độ tầm và bán kính. 6 + LineSequent, Line, Ray : đoạn thẳng, đường thẳng, tia. + Matrix : ma trận sử dụng để biểu diễn các phép biến đổi : dịch, xoay, co giãn trong không gian 3 chiều. + Plane : mặt phẳng được mô tả bằng các hệ số của phương trình : ax + by + cz + d = 0. + Frustum : là hình chóp cụt biểu diễn khung nhìn của camera, được mô tả bằng 6 mặt phẳng tạo nên nó. - Các kiểu đối tượng lưu trữ : + String. + Array : mảng động với hệ số mở rộng có thể tùy biến. + GemAllocator : sử dụng bởi các lớp khác để thực thi việc cấp phát và giải phóng bộ nhớ. + List : linked list 2 chiều. + Stack. 7 2.2. Thành phần Giao tiếp với hệ điều hành Giao tiếp với hệ điều hành là thành phần thực thi các công việc cần giao tiếp với hệ điều hành như điều phối event, đọc ghi file, lấy thời gian hệ thống… Trong đó quan trọng nhất là quá trình điều phối event : Hình 4: Quá trình điều phối event. GEM lấy event từ Message System của hệ điều hành, từ đó lấy các thông tin cần thiết tạo ra GemEvent - lý do cần tạo ra GemEvent là để tránh bị phụ thuộc vào hệ điều hành. Sau đó, GemEvent sẽ được gửi lần lượt đến các thành phần có khả năng nhận và xử lý event. 8 2.3. Thành phần Render Engine 2.3.1. Khái quát về Render Engine Render Engine là thành phần cốt lõi của một Game Engine. Nó hỗ trợ người dùng các công việc thiết yếu để tạo ra một khung cảnh 3D. Người dùng sẽ không cần biết nhiều đến những công việc tầng thấp như quá trình đọc file tài nguyên, sử dụng 3D Graphic API, quá trình tạo các effect… mà chỉ cần dùng giao diện do Render Engine cung cấp. Render Engine là thành phần duy nhất trong Game Engine giao tiếp với các thư viện đồ họa cấp thấp ( cụ thể ở đây là openGL và Cg ) Hình 5: Kiến trúc phân tầng của Render Engine. 9 2.3.2. Kiến trúc của Render Engine Render engine được chia thành các module sau : Hình 6: Biểu đồ gói của Render Engine. - Graphic Driver là module duy nhất trực tiếp sử dụng 3D Graphic API (openGL), cung cấp cho các module khác một giao diện đơn giản hơn để tương tác với card đồ họa. - Quản lý tài nguyên là module quản lý các tài nguyên cần thiết để xây dựng một khung cảnh 3D như mesh, animated mesh, texture 2D, cubemap…Module này được bạn Hoàng Tuấn Hưng trình bày trong khóa luận “Xây dựng Game Engine đa nền tảng – Quản lý tài nguyền và chuyển động đối tượng ”. - Quản lý khung cảnh là module thực hiện việc tổ chức và kiểm soát các đối tượng tồn tại trong một khung cảnh 3D, từ đó thực hiện quá trình render toàn bộ khung cảnh đó tạo nên hình ảnh 2D tại vị trí nhìn. Module này được trình bày chi tiết trong các chương sau của tài liệu này. -Hiệu ứng ánh sáng và vật liệu là module mở rộng các thành phần của Quản lý khung cảnh để tạo các hiệu ứng về ánh sáng, vật liệu, và đổ bóng. Module này được bạn Bùi Hoàng Khánh trình bày trong khóa luận “Xây dựng Game Engine đa nền tảng – Hiệu ứng ánh sáng và vật liệu”. 10 -Mô phỏng tự nhiên là module mở rộng các thành phần của Quản lý khung cảnh để mô phỏng các yếu tố tự nhiên cần có trong game như nước, địa hình, lửa, khói… Module này được bạn Trần Thái Dương trình bày trong khóa luận “Xây dựng Game Engine đa nền tảng –Mô phỏng tự nhiên”. - Chuyển động của đối tượng là module mở rộng các thành phần của Quản lý hung cảnh, thực hiện quá trình nội suy trong các mô hình chuyển động ( thường là các nhân vật trong game ) thông qua hai kĩ thuật thông dụng là keyframe và skinning. Module này được bạn Hoàng Tuấn Hưng trình bày trong khóa luận “Xây dựng Game Engine đa nền tảng – Quản lý tài nguyền và chuyển động đối tượng”. 2.4. Các thành phần còn lại. Các thành phần Mạng, Trí tuệ nhân tạo, Tính toán vật lí, Âm thanh chưa được triển khai nên chúng tôi không đề cập đến trong tài liệu này. 11 Chương 3. Quản lý khung cảnh 3.1. Khái niệm khung cảnh và cách tổ chức khung cảnh Khung cảnh có thể hiểu giống như một trường quay phim. Nó bao gồm tất cả các đối tượng tham gia vào quá trình tạo nên hình ảnh, ví dụ như các camera, các nhân vật, các vật thể, các nguồn chiếu sáng… Dĩ nhiên trong một chương trình máy tính, khung cảnh được dữ liệu hóa và chúng tôi định nghĩa nó là tổng hợp tất cả dữ liệu mô tả các đối tượng trong một không gian 3D. Khung cảnh là rất nhiều dữ liệu, vì vậy một yêu cầu bắt buộc phải tổ chức nó một cách hợp l ý để tiện sử dụng trong quá trình render. Ở đây, chúng tôi tổ chức nó thành một cây quan hệ về không gian và đồng thời là Bounding Volume Hierachies (BVHs). 3.1.1. Cây quan hệ về không gian Cây quan hệ về không gian là một cây mà trong đó, node con nằm trong không gian của node cha. Nghĩa là khi không gian của node cha thay đổi sẽ làm node con thay đổi theo. Việc tổ chức khung cảnh thành cây quan hệ về không gian sẽ giúp mô tả mối quan hệ giữa các đối tượng một cách dễ dàng. Ví dụ như trong khung cảnh có một chiếc ôtô và 2 nhân vật ngồi trong đó, khi đó 2 nhân vật sẽ là 2 node con của node cha ôtô, khi ôtô di chuyển, do bị ràng buộc về không gian nên 2 nhân vật cũng sẽ di chuyển theo. 3.1.2. Bounding Volume Hierachies. a. Khái niệm Bounding Volume: Để đơn giản hóa một số giai đoạn tính toán trong quá trình render SceneGraph, chúng ta sử dụng một số hình đơn giản hơn bao bọc quanh các đối tượng.Các hình đó được gọi là bounding volume. Ở đây chúng tôi sử dụng 2 loại bounding volume là : + Axis Aligned Bounding Box. + Bounding Sphere. 12 Hình 7: Axis Aligned Bounding Box và Bounding Sphere trong GEM. b. Khái niệm Bounding Volume Hierachies (BVHs): BVHs có thể hiểu là một cây bounding volume, trong đó bounding volume của node cha sẽ chứa tất cả bounding volume của node con. Việc sử dụng BVHs giúp giảm độ phức tạp của quá trình cắt theo khung hình (View Frustum Culling) Hình 8: Ví dụ cây khung cảnh và BHVs tương ứng. Trong hình trên, sơ đồ bên phải là cây khung cảnh, bên trái là ví trí các node trong không gian và bounding volume của nó. Ta có thể thấy bounding 13 volume của node A là tổng bounding volume của 2 node con, bounding volume của root là tổng bounding volume của tất cả các node con. 3.2. Thiết kế cấu trúc Hình 9: Biều đồ lớp của module Quản lý khung cảnh. SceneGraphManager : lớp đóng vai trò là gốc của cây khung cảnh, chứa các phương thức thực thi quá trình render cây khung cảnh. SceneNode : là lớp cơ sở để tạo thành cây khung cảnh. SceneNode bao gồm các dữ liệu mà mọi đối tượng trong không gian 3D đều cần phải có. Các loại node khác sẽ thừa kế từ lớp này. CameraSceneNode, SolidMeshSceneNode, SkyBoxSceneNode ... : là các loại node được triển khai từ lớp cơ sở SceneNode, một loại node ứng với một loại đối tượng cụ thể. RenderList : là tập hợp các node có chung một tập các trạng thái render. Các node trong cây khung cảnh sẽ được đưa về các render list rồi sau đó mới thực hiện 14 việc render các render list. Việc làm này sẽ hạn chế tối đa việc chuyển các trạng thái render, năng hiệu suất của hệ thống. RenderContext : Là tập hợp các trạng thái render. Animation : Là lớp cơ sở cho mọi loại animation