Thứ Năm, 27 tháng 2, 2014

XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG QUẢN LÝ TÀI NGUYÊN VÀ CHUYỂN ĐỘNG CỦA CÁC ĐỐI TƯỢNG

MỤC LỤC
MỞ ĐẦU 1
Chương 1.ĐẶT VẤN ĐỀ 3
1.1.Bối cảnh nghiên cứu 3
1.2.Mục tiêu 3
1.3.Giới thiệu chung 4
Chương 2.KIẾN TRÚC TỔNG THỂ 6
2.1.Các dữ liệu cơ bản 7
2.2.Giao tiếp với hệ điều hành 8
2.3.Render Engine 9
2.3.1.Khái quát về Render Engine 9
2.3.2.Kiến trúc của Render Engine 10
2.4. Các thành phần còn lại 11
Chương 3.QUẢN LÝ TÀI NGUYÊN 12
3.1.Giới thiệu 12
3.2. Quản lý tài nguyên trong GEM 12
3.3. Liên kết giữa các thành phần 14
3.4. Các thành phần trong Resource Manager 15
3.5. Biểu đồ lớp 16
3.5.1.Quản lý Mesh 16
3.5.2.Quản lý Texture 17
3.5.3.Quản lý Effect 19
3.5.4.Quản lý AnimatedMesh 20
3.5.5.Quản lý Material 21
Chương 4.CHUYỂN ĐỘNG CỦA CÁC ĐỐI TƯỢNG 23
4.1.Giới thiệu 23
4.2.Khái quát về animation 23
4.3.Kỹ thuật tạo chuyển động nhân vật 24
4.3.1.Kỹ thuật nội suy Key-Frame 24
4.3.1.1. Giới thiệu 24
4.3.1.2. Nội suy bậc 1 25
4.3.1.3. Nội suy bậc 2 25
4.3.1.4.Triển khai kỹ thuật key-frame 25
4.3.2.Kỹ thuật skinning 28
4.3.2.1.Giới thiệu 28
4.3.2.2. Kỹ thuật Skeletal Subspace Deformation 29
4.3.2.3. Kỹ thuật Animation Space 31
iii
4.3.2.4. Kỹ thuật Multi-Weight Enveloping 32
4.3.2.5.Triển khai skinning 33
Chương 5.THỰC NGHIỆM 35
5.1. Demo key-frame 35
5.2. Demo Skinning 38
6.1.Kết quả đạt được 39
6.2.Định hướng tương lai 39
PHỤ LỤC 40
TÀI LIỆU THAM KHẢO 44
iv
BẢNG CÁC CHỮ VIẾT TẮT
API Application Programming Interface
CPU Central Processing Unit
GPU graphics processing unit
LBS Linear Blend Skinning
MWE Multi-Weight Enveloping
SBS Spherical Blend Skinning
SSD Skeletal Subspace Deformation
v
DANH MỤC CÁC HÌNH VẼ BẢNG BIỂU
Hình 1. Kiến trúc phân tầng của GEM 4
Hình 2. Kiến trúc tổng thể 6
Hình 3. Biểu đồ lớp của thành phần các kiểu dữ liệu cơ bản 7
Hình 4. Quá trình điều phối event 9
Hình 5. Kiến trúc phân tầng của Render Engine 10
Hình 6. Biểu đồ gói của Render Engine 10
Hình 7. Mô hình quan hệ với các thành phần khác 12
Hình 8.Ví dụ Mesh Bank 13
Hình 9. Mô hình liên kết với các thành phần khác 14
Hình 10. Các thành phần trong Resource manager 15
Hình 11. Biểu đồ lớp Mesh và MeshBank 16
Hình 12. Biểu đồ lớp Texture và TextureBank 17
Hình 13. Biểu đồ lớp Effect và EffectBank 19
Hình 14. Biểu đồ lớp AnimatedMesh và AnimatedMeshBank 20
Hình 15. Biểu đồ lớp Material 21
Hình 16. Ví dụ key-frame 24
Hình 17. Nội suy bậc 1 và bậc 2 25
Hình 18. Mô hình tổ chức các loại animation 26
Hình 19. Biểu đồ lớp KeyFrame 27
Hình 20.Ví dụ Skinning 28
Hình 21. Thành phần trong một nhân vật 29
Hình 22. Hạn chế kỹ thuật SSD 30
Hình 23. Sử dụng kỹ thuật SSD 31
Hình 24. Sử dụng kỹ thuật SBS 31
Hình 25. Sơ đồ chuyển trục tọa độ 32
vi
Hình 26. Mô hình tổ chức khung xương 34
Hình 27. Demo key-frame 37
Hình 28. Demo Skinning 38
vii
MỞ ĐẦU
Trong thời đại công nghệ thông tin như hiện nay, sản phẩm công nghệ ngày càng
chịu sự đánh giá khắt khe hơn từ phía những người dùng, đặc biệt là về sản phẩm Game
được nhận rất nhiều sự đánh giá từ phía các game thủ, hay chỉ là những người chơi bình
thường. Ngành công nghiệp game hiện nay có thể nói là bùng nổ, với tốc độ phát triển
đến chóng mặt, rất nhiều những game hay và hấp dẫn đã được ra đời trong thời gian
qua. Đằng sau những Game phát triển và nổi tiếng như vậy đều có một Game Engine.
Game engine là một công cụ hỗ trợ, một middleware giúp người phát triển viết 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 mã
nguồn cao do có thể phát triển nhiều game từ một game engine. Tại Việt Nam, ngành
công nghiệp Game mới chỉ đang phát triển đa số vẫn là phát hành Game là chủ yếu, còn
việc xây dựng một Game Engine vẫn gần như chưa có. Đây là một lĩnh vực tiềm năng,
hứa hẹn sẽ phát triển nhanh ở Việt Nam trong thời gian sắp tới.
Từ những xu hướng phát triển trên, khóa luận tập trung nghiên cứu xây dựng một
Game engine để phát triển tại Việt Nam. Hiện nay những Game engine nổi tiếng cũng
khá nhiều, tuy nhiên giá thành một Game engine như vậy không phải là nhỏ, vì vậy
nhóm phát triển muốn xây dựng một Game engine phục vụ cho những người đam mê về
làm Game nhưng không đủ tài chính để có thể mua được một Game engine thương mại.
Khóa luận sẽ tập trung đi sâu vào hai thành phần trong Game engine đó là: quản lí
tài nguyên và các chuyển động của đối tượng.
Trong các phần mềm, việc quản lí tài nguyên luôn được xem xét và cân nhắc cẩn
thận để làm sao có thể quản lí một cách hiệu quả nhất, đặc biệt trong Game thì vấn đề
này càng cấp thiết hơn bao giờ hết. Một Game muốn được phát triển sẽ phải quản lí tài
nguyên tốt, hạn chế tới mức tối đa sử dụng tài nguyên của máy tính người chơi và cũng
để tăng tốc cho chương trình. Cần có cơ chế cấp phát và giải phóng bộ nhớ một cách
hiệu quả.
Trong Game bao giờ cũng phải có các đối tượng chuyển động, vì vậy cần có cách
thức phương pháp để quản lí và tạo ra được các nhân vật có chuyển động. Khóa luận sẽ
tập trung vào nghiên cứu các kỹ thuật để tạo ra các chuyển động cho nhân vật để cho
các chuyển động ngày càng giống với chuyển động của con người, tạo được hiệu ứng
tốt cho Game.
1
Ngoài phần mở đầu kết cấu khóa luận bao gồm 6 chương:
• Chương 1, 2: Đặt vấn đề và tổng quan về hệ thống Game engine của cả
nhóm.
• Chương 3: Giới thiệu về quản lí tài nguyên và cách tổ chức tài nguyên trong
hệ thống.
• Chương 4: Giới thiệu về chuyển động cho các đối tượng, đi vào các kỹ thuật
tạo chuyển động.
• Chương 5: Thực nghiệm các kỹ thuật được nêu ở chương 4
• Chương 6: Kết luận, thực hiện đánh giá kết quả đã đạt được, hướng phát
triển sắp tới.
2
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 (MMO). 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).
3
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
Đặc đ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 mã nguồn 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ể [10]. 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ẽ hỗ trợ các card đồ họa hỗ trợ openGL 1.4 và shader 1.0 trở lên
4
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
5

Không có nhận xét nào:

Đăng nhận xét