Ngày nay, ngành công nghiệp Game đang trên đà phát triển nhanh chóng song
song với việc phát triển phần cứng. Game engine sẽlà một công cụhữu ích cho việc
phát triển Game, nếu như các nhà phát triển mỗi khi bắt tay vào làm một Game nào đó
từđầu thì sẽrất vất vảvà mất nhiều công sức. Với một Game engine thì công việc đó
trởnên đơn giản và nhanh hơn nhiều, nó sẽcung cấp các API cho người phát triển
Game có thểsửdụng và tạo ra những hiệu ứng một cách nhanh chóng.
Khóa luậnsẽtrình bày tổng quan kiến trúc vềGame engine mà chúng tôiđang
xây dựng và đi chi tiết vào hai thành phần là quản lí tài nguyên trong Game và các
chuyển động của đối tượng.
Phần đầu sẽ giới thiệu một cách tổng quan nhất vềhệthống, các thành phần sẽcó
trong Game engine, và thiết kếcho các thành phần đó.
Phần thứhai khóa luận dành đểgiới thiệu vềcác tàinguyên sẽcó trong Game
engine, tầm quan trọng của việc quản lí tài nguyên cho một hệthống. Đặc biệt khóa
luận sẽtrình bày cách tổchức và quản lí tài nguyên một cách hiệu quảnhất.
Phần thứba của khóa luận sẽgiới thiệu vềcác chuyển động của các đối tượng
trong Game, các kỹthuật đểcó thểtạo ra được các loại chuyển động cho đối tượngvà
cách triển khai các kỹthuật vào trong Game engine.
Phần cuối cùng sẽlà tổng kết những kết quảđã đạt đượccủa khóa luận, những
vấn đềcòn tồn tại và hướng phát triển tiếp theo của đềtài.
52 trang |
Chia sẻ: nhungnt | Lượt xem: 1885 | Lượt tải: 0
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ý tài nguyên và chuyển động của các đối tượng, để 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Ệ
Hoàng Tuấn Hưng
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
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
1
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Hoàng Tuấn Hưng
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
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
i
Lời cảm ơn
Tôi xin gửi lời cảm ơn tới các thầy cô trong khoa Công nghệ Thông tin trường
Đại học Công Nghệ, Đại học Quốc Gia Hà Nội, đặc biệt là các thầy cô ở Bộ môn Công
nghệ Phần mềm đã giúp đỡ tôi trưởng thành trong những năm học tập và rèn luyện ở
môi trường đại học.
Xin chân thành cảm ơn thầy Nguyễn Việt Hà, thầy Vũ Quang Dũng và phòng thí
nghiệm TOSHIBA-COLTECH đã tạo điều kiện cho tôi tìm hiểu, nghiên cứu và học
hỏi những kinh nghiệm trong quá trình nghiên cứu và làm khoá luận.
Tôi xin gửi lời cảm ơn tới các bạn trong lớp K50CD, K50CNPM đã ủng hộ,
khuyến khích tôi trong suốt quá trình học tập tại trường.
Và lời cuối cùng, tôi xin bày tỏ lòng chân thành và biết ơn vô hạn tới cha mẹ, và
người thân, những người luôn ở bên cạnh tôi những lúc tôi khó khăn nhất, giúp tôi
vượt qua khó khăn trong học tập cũng như trong cuộc sống.
Hà Nội, ngày 10 tháng 05 năm 2009
Sinh viên
Hoàng Tuấn Hưng
ii
TÓM TẮT
Ngày nay, ngành công nghiệp Game đang trên đà phát triển nhanh chóng song
song với việc phát triển phần cứng. Game engine sẽ là một công cụ hữu ích cho việc
phát triển Game, nếu như các nhà phát triển mỗi khi bắt tay vào làm một Game nào đó
từ đầu thì sẽ rất vất vả và mất nhiều công sức. Với một Game engine thì công việc đó
trở nên đơn giản và nhanh hơn nhiều, nó sẽ cung cấp các API cho người phát triển
Game có thể sử dụng và tạo ra những hiệu ứng một cách nhanh chóng.
Khóa luận sẽ trình bày tổng quan kiến trúc về Game engine mà chúng tôi đang
xây dựng và đi chi tiết vào hai thành phần là quản lí tài nguyên trong Game và các
chuyển động của đối tượng.
Phần đầu sẽ giới thiệu một cách tổng quan nhất về hệ thống, các thành phần sẽ có
trong Game engine, và thiết kế cho các thành phần đó.
Phần thứ hai khóa luận dành để giới thiệu về các tài nguyên sẽ có trong Game
engine, tầm quan trọng của việc quản lí tài nguyên cho một hệ thống. Đặc biệt khóa
luận sẽ trình bày cách tổ chức và quản lí tài nguyên một cách hiệu quả nhất.
Phần thứ ba của khóa luận sẽ giới thiệu về các chuyển động của các đối tượng
trong Game, các kỹ thuật để có thể tạo ra được các loại chuyển động cho đối tượng và
cách triển khai các kỹ thuật vào trong Game engine.
Phần cuối cùng sẽ là tổng kết những kết quả đã đạt được của khóa luận, những
vấn đề còn tồn tại và hướng phát triển tiếp theo của đề tài.
iii
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................................................................................................................... 3
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 ............................................................................................13
3.4. Các thành phần trong Resource Manager........................................................................14
3.5. Biểu đồ lớp ..........................................................................................................................15
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 ..................................................................................23
4.3.1.Kỹ thuật nội suy Key-Frame.........................................................................................23
4.3.1.1. Giới thiệu..................................................................................................................24
4.3.1.2. Nội suy bậc 1 ............................................................................................................24
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 ..........................................................................................................27
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
iv
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...................................................................................................................37
Chương 6.KẾT LUẬN............................................................................................39
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
v
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
vi
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 .....................................................................11
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
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
1
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.
2
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.
3
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).
1.3.Giới thiệu chung
4
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ở
5
lên
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
6
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.
7
2.1.Các 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)
8
Sphere: hình cầu, đ