Ngày nay, Game Engine là thành phần không thểthiếu trong bất cứmột quy trình
phát triển trò chơi điện tửnào. Sức mạnh của trò chơi phụthuộc chính vào sức mạnh
của Game Engine được sửdụng đểphát triển nó.
Trong khóa luận này, tôi sẽgiới thiệu sơ lược kiến trúc chung của Game Engine
đang được phát triển nằm trong dựán “Xây dựng Game Engine đa nền tảng” trong
chương 1và chương 2. Chương 3, sẽđược dành đểtrình bày các phương pháp triển
khai các kĩ thuật được sửdụng đểcung cấp khảnăng mô phỏng các hiện tượng tự
nhiên cho Game Engine, dựatrên mô hình quản lí khung cảnh 3D được trình bày trong
khóa luận của bạn Trương Đức Phương và mô hình quản lí tài nguyên được trình bày
trong khóa luận của bạn Hoàng Tuấn Hưng.
Cuối khóa luận sẽđưa ra một sốthông tin chạy thửcủa các ứng dụng demo cho
các kĩ thuật đã được triển khai. Qua đó đánh giá bước đầu vềhiệu quả ứng dụng của
các kĩ thuật đó. Cuối cùng tôi sẽđưa ra định hướng tiếp theo sau khi hoàn thành khóa
luận này.
55 trang |
Chia sẻ: nhungnt | Lượt xem: 1830 | 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 mô phỏng tự nhiên, để 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ần Thái Dương
XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG
MÔ PHỎNG TỰ NHIÊN
KHÓA 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ần Thái Dương
XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG
MÔ PHỎNG TỰ NHIÊN
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: ThS. Vũ Quang Dũng
HÀ NỘI - 2009
LỜI CẢM ƠN
Trước hết tôi xin gửi lời cảm ơn chân thành tới Thạc sĩ Vũ Quang Dũng người
trực tiếp hướng dẫn và giúp đỡ tôi trong suốt quá trình hoàn thành khóa luận này.
Tôi xin bày tỏ lòng biết ơn sâu sắc đến các thầy cô đã giảng dạy tôi trong suốt
bốn năm học vừa qua, đã cung cấp cho tôi những kiến thức quý báu và phương pháp tư
duy đúng đắn để tôi có thể có được nền tảng vững chắc bước đi trên con đường của
mình.
Tôi xin gửi lời cảm ơn tới các bạn trong nhóm làm khóa luận đã giúp đỡ tôi thực
hiện khóa luận này. Tôi cũng xin cảm ơn phòng thí nghiệm Toshiba đã giúp đỡ vào tạo
cho tôi môi trường làm việc và học tập trong quá trình thực hiện khóa luận của mình.
Và lời cuối cùng, tôi xin tỏ lòng biết ơn sâu sắc đến gia đình, bạn bè và những
người thân đã luôn ở bên cạnh động viên, ủng hộ tôi trong những lúc khó khăn nhất,
giúp tôi vượt qua được nhưng khó khăn trong học tập cũng như trong cuộc sống.
Hà Nội, ngày 22 tháng 05 năm 2009
Sinh viên
Trần Thái Dương
TÓM TẮT
Ngày nay, Game Engine là thành phần không thể thiếu trong bất cứ một quy trình
phát triển trò chơi điện tử nào. Sức mạnh của trò chơi phụ thuộc chính vào sức mạnh
của Game Engine được sử dụng để phát triển nó.
Trong khóa luận này, tôi sẽ giới thiệu sơ lược kiến trúc chung của Game Engine
đang được phát triển nằm trong dự án “Xây dựng Game Engine đa nền tảng” trong
chương 1 và chương 2. Chương 3, sẽ được dành để trình bày các phương pháp triển
khai các kĩ thuật được sử dụng để cung cấp khả năng mô phỏng các hiện tượng tự
nhiên cho Game Engine, dựa trên mô hình quản lí khung cảnh 3D được trình bày trong
khóa luận của bạn Trương Đức Phương và mô hình quản lí tài nguyên được trình bày
trong khóa luận của bạn Hoàng Tuấn Hưng.
Cuối khóa luận sẽ đưa ra một số thông tin chạy thử của các ứng dụng demo cho
các kĩ thuật đã được triển khai. Qua đó đánh giá bước đầu về hiệu quả ứng dụng của
các kĩ thuật đó. Cuối cùng tôi sẽ đưa ra định hướng tiếp theo sau khi hoàn thành khóa
luận này.
MỤC LỤC
Chương 1. Đặt vấn đề ..................................................................................................2
1.1. Bối cảnh nghiên cứu .........................................................................................2
1.2. Mục tiêu ...........................................................................................................2
1.3. Giới thiệu chung ...............................................................................................3
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.............................................................6
2.3. Thành phần Render Engine ...............................................................................7
2.3.1. Khái quát về Render Engine ......................................................................7
2.3.2. Kiến trúc của Render Engine .....................................................................8
2.4. Các thành phần còn lại......................................................................................9
Chương 3. Mô phỏng Tự nhiên .................................................................................. 10
3.1. Khái Quát ....................................................................................................... 10
3.2. Mô phỏng mặt nước........................................................................................ 11
3.2.1. Thiết kế cơ bản ........................................................................................ 11
3.2.2. Thiết kế chức năng................................................................................... 14
3.2.3. Triển khai lớp đề xuất: ............................................................................. 21
3.3. Hệ thống hạt ................................................................................................... 24
3.3.1. Thiết kế cơ bản ........................................................................................ 25
3.3.2. Thiết kế chức năng................................................................................... 26
3.3.3. Triển khai lớp đề xuất .............................................................................. 28
3.4. Địa hình.......................................................................................................... 31
3.4.1. Thiết kế cơ bản ........................................................................................ 33
3.4.2. Thiết kế chức năng................................................................................... 34
3.4.3. Triển khai lớp đề xuất .............................................................................. 38
Chương 4. Kết luận.................................................................................................... 42
4.1. Kết quả ........................................................................................................... 42
4.1.1. Mô phỏng mặt nước................................................................................. 42
4.1.2. Hệ thống hạt ............................................................................................ 43
4.1.3. Địa hình................................................................................................... 44
4.2. Hướng phát triển............................................................................................. 44
Danh Mục Hình Vẽ
Hình 1: Kiến trúc phân tầng của GEM .........................................................................3
Hình 2: Kiến trúc tổng thể...........................................................................................4
Hình 3: Sơ đồ 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. ......................................................................8
Hình 7: Sơ đồ lớp cơ bản của package Mô phỏng Mặt Nước ..................................... 12
Hình 8: Quá trình hoạt động của package Mô Phỏng Mặt Nước................................. 13
Hình 9: Sơ đồ luồng thực hiện chức năng Tiền khởi tạo............................................. 14
Hình 10: Sơ đồ luồng thực hiện việc khởi tạo đối tượng WaterSceneNode................. 16
Hình 11: Sơ đồ tạo hiệu ứng tăng giảm cường độ sóng theo thời gian ........................ 17
Hình 12: Quá trình render normal map....................................................................... 18
Hình 13: Sơ đồ hoạt động của chương trình Render mặt nước ................................... 20
Hình 14: Sơ đồ lớp WaterParameters ......................................................................... 21
Hình 15: Sơ đồ triển khai lớp WaterEffect ................................................................. 22
Hình 16: Sơ đồ triển khai lớp WaterSceneNode ......................................................... 23
Hình 17: Thiết kế lớp cơ bản của hệ thống hạt ........................................................... 25
Hình 18: Sơ đồ thực hiện chức năng Khởi tạo đối tượng ParticleSystemSceneNode ..26
Hình 19: Sơ đồ cập nhật vị trí hạt............................................................................... 27
Hình 20: Sơ đồ hoạt động của chức năng Render Hệ thống hạt .................................. 28
Hình 21: Sơ đồ triển khai Lớp ParticleParameters...................................................... 28
Hình 22: Sơ đồ triển khai lớp ParticleEffect............................................................... 29
Hình 23: Sơ đồ quan hệ Lớp mô đun Hệ thống hạt..................................................... 31
Hình 24: Kiến trúc cơ bản của mô đun Địa hình ........................................................ 33
Hình 25: Sơ đồ hoạt động của mô đun Địa hình......................................................... 34
Hình 26: Luồng thực hiện chức năng khởi tạo............................................................ 35
Hình 27: Sơ đồ hoạt động của chức năng Cập nhật Clipmap...................................... 36
Hình 28: Sơ đồ hoạt động chương trình Render Block ............................................... 37
Hình 29: Triển khai Lớp TerrainParameters ............................................................... 38
Hình 30: Lớp TerrainEffect ........................................................................................ 39
Hình 31: Sơ đồ lớp TerrainSceneNode và các lớp thành phần. ................................... 40
Hình 32: Hình ảnh demo hệ thống hạt........................................................................ 43
Hình 33: Hình ảnh chương trình demo Mô phỏng mặt nước ...................................... 45
Bảng thuật ngữ và các kí hiệu viết tắt (nếu có)
Thuật ngữ Ý nghĩa Viết tắt
Animated Mesh Là một mesh được dùng để mô tả các đối
tượng chuyển động.
Bounding box Hình hộp bé nhất chứa trọn vẹn đối tượng
3D
Bounding Sphere Hình cầu bé nhất chứa trọn vẹn đối tượng
3D
clip space không gian tọa độ vertex được chiếu lên bởi
camera
clipmap là phương pháp lưu trữ tạm thời một bộ
phận của nguồn dữ liệu có kích thước lớn
Cube Map Là tập hợp 6 texture 2D được xếp liên tục
trong 6 mặt của hình hộp
Environment Map Là texture lưu trữ thông tin về ánh sáng
phản xạ từ môi trường. Thường có dạng
cubemap
event Là đơn vị truyền thông liên tiến trình được
gửi đến bởi Hệ điều hành
fragment program chương trình shader xử lí các biến đổi đối
với mỗi pixel.
Graphic Processor Unit Đơn vị xử lí đồ họa, có nhiệm vụ render ra
màn hình hình ảnh 3D
GPU
heightfield mảng lưu trữ giá trị độ cao
heightmap texture lưu trữ giá trị độ cao của bề mặt địa
hình
local space không gian riêng của đối tượng 3D.
Massively Multiplayer
Online Role-Playing Game
Trò chơi nhập vai trực tuyến nhiều người
chơi
MMORPG
Mesh 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.
Message System Là hệ thống quản lí các thông điệp trao đổi
giữa các tiến trình của Hệ điều hành
normal map texture lưu giữ các giá trị các vector pháp
tuyến trên bề mặt
Occlusion culling Thực hiện cắt bỏ các đối tượng bị chắn bởi
một đối tượng khác trong vùng quan sát
offscreen render render nhưng hình ảnh được tạo ra không
được vẽ lên màn hình
Render Tái tạo hình ảnh phản chiếu 2D của đối
tượng 3D trong camera.
shader Là tập các chỉ lệnh cho GPU được dùng để
render các hiệu ứng
shading language ngôn ngữ được dùng để triển khai shader
cho GPU
Texture Các bức ảnh được dùng để dán lên các đối
tượng 3D nhằm làm tăng độ chi tiết cho đối
tượng
Vertex Đỉnh trong không gian 3D
vertex program chương trình shader xử lí các biến đổi đối
với vertex.
View Frustum Trường quan sát của camera
View frustum culling Thực hiện cắt bỏ các đối tượng nằm ngoài
vùng quan sát của camera
world space không gian thế giới trong OpenGL
1
Mở đầu
Hiện nay, cùng với sự phát triển của ngành công nghiệp phần mềm, quy trình
phát triển game cũng đã thay đổi rất nhiều. Thay vì phát triển các game dựa trên các
giao diện lập trình đồ họa 3D cấp thấp, người ta thường phát triển Game Engine như là
một hệ thống phần mềm trung gian cho quy trình phát triển game.
Thực tế, ngành công nghiệp phát triển game không chỉ đem lại lợi ích lớn về kinh
tế cho các công ty phát hành game mà nó còn thúc đẩy sự phát triển của phần mềm
cũng như phần cứng máy tính. Đặc biệt là nó thúc đẩy sự phát triển của các kĩ thuật xử
lí tái tạo thực tại ảo trở nên chân thực hơn và được ứng dụng rộng rãi trong các lĩnh
vực khác của đời sống xã hội như giáo dục, y tế...
Ở Việt Nam hiện nay, MMORPG đang bùng nổ mạnh mẽ với số lượng người
chơi đông đảo và thu hút người chơi ở nhiều đối tượng, lứa tuổi khác nhau. Tuy nhiên,
người chơi vẫn thường phải chơi game được phát hành bởi các công ty nước ngoài
hoặc game được phát hành bởi các công ty trong nước được phát triển bởi các công ty
nước ngoài. Vì vậy nhóm chúng tôi đã bắt đầu thực hiện việc tìm hiểu và xây dựng
một Game Engine dành cho việc phát triển MMORPG với mục tiêu mong muốn dần
làm chủ được công nghệ xây dựng và phát triển game.
Để mô phỏng khung cảnh ngoài trời của game, Game Engine phải cung cấp khả
năng mô phỏng lại các hiện tượng tự nhiên đáp ứng thời gian thực. Vì đòi hỏi đó, tôi
đã thực hiện khóa luận này với mục đích xây dựng mô đun Mô phỏng Tự nhiên trong
dự án “Xây dựng Game Engine đa nền tảng”.
Tuy nhiên, vì giới hạn về thời gian và kiến thức, hiện tại trong khóa luận này tôi
sẽ chỉ diễn giải các phương pháp triển khai các kĩ thuật mô phỏng địa hình, mặt nước
và hệ thống hạt. Với các chức năng đó, ta có thể tạo ra được khung cảnh 3D ngoài trời
đơn giản từ
Hai chương đầu của khóa luận dành để giới thiệu chung về Game Engine và kiến
trúc tổng thể của nó. Nội dung chính phương pháp triển khai các kĩ thuật trong mô đun
Mô phỏng Tự nhiên sẽ được trình bày chi tiết trong chương 3 của khóa luận này.
2
Chương 2. Đặt vấn đề
2.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.
2.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).
3
2.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.
Đặ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 (không 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ể Error! Reference source not found.. Cũng vì lí đo chạy đa nền
nên hiện tại chúng tôi sử dụng 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 MMORPG, 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.
Mục tiêu thiết kế GEM là hoạt động được trên các GPU hỗ trợ openGL 1.4 và shader
1.0 trở lên.
Bảng 1: Bảng GPU tối thiểu được hỗ trợ
Hãng sãn xuất GPU hỗ trợ
nVidia Từ GeForce4 Ti trở lên
Hình 1:
Kiến trúc phân tầng của GEM
4
ATI Từ Radeon 9500 trở lên
Intel ( card tích hợp ) Từ Intel® GMA 3100 ( chipset G31,Q33) trở lên
Chương 3. 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:
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
Hình 2: Kiến trúc tổng thể
5
tác với chúng.
3.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.
Các kiểu dữ liệu này có thể chia thành 2 nhóm chính:
1. Các yếu tố 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.
Hình 3: Sơ đồ lớp của thành phần Các kiểu dữ liệu cơ bản
6
‒ 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.
‒ LineSequent, Line, Ray : đoạn thẳng, đường thẳng, tia.
‒ Matrix : ma trận sử dụng để thực hiện các phép biến đổi 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ó.
2. Các kiểu đối tượng lưu trữ
‒ String : lớp lưu trữ dữ liệu kiểu xâu kí tự.
‒ 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 : danh sách liên kết 2 chiều.
‒ Stack : ngăn xếp.
3.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:
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