Khóa luận Xây dựng game engine đa nền tảng mô phỏng tự nhiên

ĐẠI HC QUC GIA HÀ NI  
TRƯỜNG ĐI HC CÔNG NGHỆ  
Trần Thái Dương  
XÂY DNG GAME ENGINE ĐA NỀN TNG  
MÔ PHNG TNHIÊN  
KHÓA LUN TT NGHIỆP ĐẠI HC HCHÍNH QUY  
Ngành: Công nghthông tin  
HÀ NI - 2009  
ĐẠI HC QUC GIA HÀ NI  
TRƯỜNG ĐI HC CÔNG NGHỆ  
Trần Thái Dương  
XÂY DỰNG GAME ENGINE ĐA NỀN TNG  
MÔ PHNG TNHIÊN  
KHOÁ LUN TT NGHIỆP ĐẠI HC HCHÍNH QUY  
Ngành: Công nghthông tin  
Cán bộ hướng dn: ThS. Vũ Quang Dũng  
HÀ NI - 2009  
LI CẢM ƠN  
Trước hết tôi xin gi li cảm ơn chân thành tới Thc sĩ Vũ Quang Dũng người  
trc tiếp hưng dẫn và giúp đỡ tôi trong sut quá trình hoàn thành khóa lun này.  
Tôi xin bày tlòng biết ơn sâu sắc đến các thầy cô đã ging dy tôi trong sut  
bn năm học vừa qua, đã cung cp cho tôi nhng kiến thc quý báu và phương pháp tư  
duy đúng đắn để tôi có thể có được nn tng vng chắc bước đi trên con đường ca  
mình.  
Tôi xin gi li cảm ơn tới các bn trong nhóm làm khóa luận đã giúp đỡ tôi thc  
hin khóa lun này. Tôi cũng xin cảm ơn phòng thí nghiệm Toshiba đã giúp đỡ vào to  
cho tôi môi trường làm vic và hc tp trong quá trình thc hin khóa lun ca mình.  
Và li cui cùng, tôi xin tlòng biết ơn sâu sắc đến gia đình, bn bè và nhng  
người thân đã luôn bên cạnh động viên, ng htô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 tp cũng như trong cuộc sng.  
Nội, ngày 22 tháng 05 năm 2009  
Sinh viên  
Trần Thái Dương  
TÓM TT  
Ngày nay, Game Engine là thành phn không ththiếu trong bt cmt quy trình  
phát trin trò chơi điện tnào. Sc mnh ca trò chơi phụ thuc chính vào sc mnh  
của Game Engine được sdụng để phát trin nó.  
Trong khóa lun này, tôi sgii thiệu sơ lược kiến trúc chung ca Game Engine  
đang được phát trin nm trong dán “Xây dựng Game Engine đa nền tng” trong  
chương 1 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 sdụng để cung cp khả năng mô phỏng các hiện tượng tự  
nhiên cho Game Engine, da trên mô hình qun lí khung cảnh 3D được trình bày trong  
khóa lun ca 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 lun ca bn Hoàng Tuấn Hưng.  
Cui khóa lun sẽ đưa ra một sthông tin chy thca các ng dng demo cho  
các kĩ thuật đã được triển khai. Qua đó đánh giá bước đầu vhiu quả ứng dng ca  
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  
lun này.  
MC LC  
Chương 1. Đặt vấn đề ..................................................................................................2  
1.1. Bi cnh nghiên cu .........................................................................................2  
1.2. Mc tiêu ...........................................................................................................2  
1.3. Gii thiu chung...............................................................................................3  
Chương 2. Kiến trúc tng th.......................................................................................4  
2.1. Thành phn Các kiu dliệu cơ bản .................................................................5  
2.2. Thành phn Giao tiếp vi hệ điu hành.............................................................6  
2.3. Thành phn Render Engine...............................................................................7  
2.3.1. Khái quát vRender Engine ......................................................................7  
2.3.2. Kiến trúc ca Render Engine .....................................................................8  
2.4. Các thành phn còn li......................................................................................9  
Chương 3. Mô phỏng Tnhiên..................................................................................10  
3.1. Khái Quát .......................................................................................................10  
3.2. Mô phng mặt nưc........................................................................................ 11  
3.2.1. Thiết kế cơ bn........................................................................................ 11  
3.2.2. Thiết kế chức năng...................................................................................14  
3.2.3. Trin khai lớp đề xut:.............................................................................21  
3.3. Hthng ht ...................................................................................................24  
3.3.1. Thiết kế cơ bn........................................................................................25  
3.3.2. Thiết kế chức năng...................................................................................26  
3.3.3. Trin khai lớp đề xut..............................................................................28  
3.4. Địa hình..........................................................................................................31  
3.4.1. Thiết kế cơ bn........................................................................................33  
3.4.2. Thiết kế chức năng...................................................................................34  
3.4.3. Trin khai lớp đề xut..............................................................................38  
Chương 4. Kết lun....................................................................................................42  
4.1. Kết qu...........................................................................................................42  
4.1.1. Mô phng mặt nưc.................................................................................42  
4.1.2. Hthng ht ............................................................................................43  
4.1.3. Địa hình...................................................................................................44  
4.2. Hưng phát trin.............................................................................................44  
Danh Mc Hình Vẽ  
Hình 1: Kiến trúc phân tng ca GEM.........................................................................3  
Hình 2: Kiến trúc tng th...........................................................................................4  
Hình 3: Sơ đồ lp ca thành phn Các kiu dliệu cơ bản ..........................................5  
Hình 4: Quá trình điều phi event................................................................................7  
Hình 5: Kiến trúc phân tng ca Render Engine...........................................................8  
Hình 6: Biểu đồ gói ca Render Engine. ......................................................................8  
Hình 7: Sơ đồ lớp cơ bản ca package Mô phng Mặt Nưc .....................................12  
Hình 8: Quá trình hoạt đng ca package Mô Phng Mặt Nưc.................................13  
Hình 9: Sơ đồ lung thc hin chc năng Tiền khi to.............................................14  
Hình 10: Sơ đồ lung thc hin vic khi tạo đối tượng WaterSceneNode.................16  
Hình 11: Sơ đồ to hiu ứng tăng giảm cường độ sóng theo thi 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ơ đồ lp WaterParameters .........................................................................21  
Hình 15: Sơ đồ trin khai lp WaterEffect .................................................................22  
Hình 16: Sơ đồ trin khai lp WaterSceneNode .........................................................23  
Hình 17: Thiết kế lớp cơ bản ca hthng ht ...........................................................25  
Hình 18: Sơ đồ thc hin chức năng Khởi tạo đối tượng ParticleSystemSceneNode ..26  
Hình 19: Sơ đồ cp nht vtrí ht...............................................................................27  
Hình 20: Sơ đồ hoạt đng ca chức năng Render Hệ thng ht..................................28  
Hình 21: Sơ đồ trin khai Lp ParticleParameters......................................................28  
Hình 22: Sơ đồ trin khai lp ParticleEffect...............................................................29  
Hình 23: Sơ đồ quan hLớp mô đun Hệ thng ht.....................................................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: Lung thc hin chức năng khởi to............................................................35  
Hình 27: Sơ đồ hoạt đng ca chức năng Cập nht Clipmap......................................36  
Hình 28: Sơ đồ hoạt động chương trình Render Block...............................................37  
Hình 29: Trin khai Lp TerrainParameters ...............................................................38  
Hình 30: Lp TerrainEffect........................................................................................39  
Hình 31: Sơ đồ lp TerrainSceneNode và các lp thành phn. ...................................40  
Hình 32: Hình nh demo hthng ht........................................................................43  
Hình 33: Hình ảnh chương trình demo Mô phng mặt nưc ......................................45  
Bng thut ngvà các kí hiu viết tt (nếu có)  
Thut ngữ  
Ý nghĩa  
Viết tt  
Animated Mesh  
Bounding box  
Bounding Sphere  
clip space  
Là một mesh được dùng để mô tả các đối  
tượng chuyển đng.  
Hình hp bé nht cha trn vẹn đối tượng  
3D  
Hình cu bé nht cha trn vẹn đối tượng  
3D  
không gian tọa độ vertex được chiếu lên bi  
camera  
clipmap  
là phương pháp lưu trữ tm thi mt bộ  
phn ca ngun dliệu có kích thước ln  
Cube Map  
Là tp hợp 6 texture 2D được xếp liên tc  
trong 6 mt ca hình hp  
Environment Map  
texture lưu trữ thông tin vánh sáng  
phn xtừ môi trường. Thường có dng  
cubemap  
event  
Là đơn vị truyn thông liên tiến trình được  
gửi đến bi Hệ điu hành  
fragment program  
Graphic Processor Unit  
chương trình shader xlí các biến đổi đối  
vi mi pixel.  
Đơn vị xử lí đha, có nhim vrender ra GPU  
màn hình hình nh 3D  
heightfield  
heightmap  
mảng lưu trữ giá trị độ cao  
texture lưu trữ giá trị độ cao ca bmặt đa  
hình  
local space  
không gian riêng của đối tượng 3D.  
Massively Multiplayer  
Trò chơi nhập vai trc tuyến nhiều người  
MMORPG  
Online Role-Playing Game chơi  
Mesh  
Mạng lưới các đa giác dùng để mô thình  
dng ca vt thtrong không gian 3 chiu.  
Message System  
normal map  
Occlusion culling  
Là hthng quản lí các thông điệp trao đổi  
gia các tiến trình ca Hệ điu hành  
texture lưu giữ các giá trcác vector pháp  
tuyến trên bmt  
Thc hin ct bỏ các đối tượng bchn bi  
một đối tượng khác trong vùng quan sát  
offscreen render  
Render  
render nhưng hình ảnh được to ra không  
được vlên màn hình  
Tái to hình nh phn chiếu 2D của đi  
tượng 3D trong camera.  
shader  
Là tp các chlệnh cho GPU được dùng để  
render các hiu ng  
shading language  
Texture  
ngôn ngữ được dùng để trin khai shader  
cho GPU  
Các bc ả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 xlí các biến đổi đối  
vi vertex.  
View Frustum  
Trường quan sát ca camera  
View frustum culling  
Thc hin ct bỏ các đối tượng nm ngoài  
vùng quan sát ca camera  
world space  
không gian thế gii trong OpenGL  
Mở đầu  
Hin nay, cùng vi sphát trin ca ngành công nghip phn mm, quy trình  
phát trin game cũng đã thay đổi rt nhiu. Thay vì phát trin các game da trên các  
giao din lp trình đồ ha 3D cp thấp, người ta thường phát triển Game Engine như là  
mt hthng phn mm trung gian cho quy trình phát trin game.  
Thc tế, ngành công nghip phát trin game không chỉ đem lại li ích ln vkinh  
tế cho các công ty phát hành game mà nó còn thúc đẩy sphát trin ca phn mm  
cũng như phần cứng máy tính. Đặc biệt là nó thúc đẩy sphát trin ca các kĩ thut xử  
lí tái to thc ti o trnên chân thực hơn và được ng dng rng rãi trong các lĩnh  
vc khác của đời sng xã hội như giáo dục, y tế...  
Vit Nam hiện nay, MMORPG đang bùng nổ mnh mvi số lượng người  
chơi đông đảo và thu hút người chơi ở nhiều đối tượng, la tui 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 trin bi các công ty  
nước ngoài. Vì vậy nhóm chúng tôi đã bắt đầu thc hin vic tìm hiu và xây dng  
mt Game Engine dành cho vic phát trin MMORPG vi mc tiêu mong mun dn  
làm chủ đưc công nghxây dng và phát trin game.  
Để mô phng khung cnh ngoài tri ca game, Game Engine phi cung cp khả  
năng mô phỏng li các hiện tượng tự nhiên đáp ứng thi gian thc. Vì đòi hỏi đó, tôi  
đã thc hin khóa lun này vi mục đích xây dựng mô đun Mô phng Tnhiên trong  
dán “Xây dựng Game Engine đa nền tng”.  
Tuy nhiên, vì gii hn vthi gian và kiến thc, hin ti trong khóa lun này tôi  
schdin 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à hthng ht. Vi các chức năng đó, ta có thể tạo ra được khung cnh 3D ngoài tri  
đơn giản từ  
Hai chương đầu ca khóa luận dành để gii thiu chung vGame Engine và kiến  
trúc tng thca nó. Nội dung chính phương pháp triển khai các kĩ thuật trong mô đun  
Mô phng Tnhiên sẽ đưc trình bày chi tiết trong chương 3 của khóa lun này.  
1
Chương 2. Đặt vấn đề  
2.1. Bi cnh nghiên cu  
Ngành công nghip phát trin 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à chcn một người hoc mt nhóm nhỏ người  
phát triển nhưng ngày nay, các game hiện đại với đồ ha và khả năng tương tác ấn  
tượng thường được phát trin bi một đội ngũ đông đảo người thiết kế game, lp trình  
viên, nghsĩ… trong thời gian ròng rã tmột đến ba năm. Chính việc game ngày càng  
trnên phc tạp như vậy nên hiện nay, các game thương mại không còn phát trin từ  
nguyên thy nữa mà được phát trin lên tgame engine. Game engine htrvic xây  
dng game một cách nhanh chóng, đơn giản hơn đồng thi cung cp khả năng tái sử  
dng code cao do có thphát trin nhiu game tmt game engine.  
Vit Nam, Game online mi chthc sthâm nhp vào thị trường cách đây 6  
năm nhưng chỉ trong khong thi gian ít ỏi đó, chúng ta đã có mt số lượng nhà phát  
hành game lên ti con shàng chc, số game được phát hành cũng tương ứng vi 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 nhp khu từ nước ngoài, chyếu là Trung Quc  
và Hàn Quc ( trmt sgame nhỏ chơi trên web như đánh bài, đánh c..) Mt câu  
hi mà có ltt cnhững người chơi game đều trăn trở là “bao gimới được chơi  
game Vit Nam?”.  
Chúng tôi chọn đề tài này làm khóa lun tt nghip không phi vi mt tham  
vng quá ln, chlà muốn đi những bước chân chp chững đầu tiên vào thế gii phát  
trin game rng lớn, để thu lượm kiến thc vlĩnh vực khó khăn nhưng đầy thú vnày  
và hi vng một tương lai không xa, chúng tôi có thể góp mt phn sc lc giái đáp  
trăn trca cộng đồng người chơi game Việt Nam.  
2.2. Mc tiêu  
Xây dng một Game Engine đa nền có thchy trên nhiu hệ điều hành khác  
nhau, hướng đến phân khúc phát trin game nhp vai trc tuyến (MMORPG). Game  
Engine này được đặt tên là GEM. Đây là mục tiêu dài hn, còn hin ti, do thi gian  
làm luận văn chỉ khong 5 tháng nên nhóm chúng tôi chtp trung hoàn thin thành  
phn Render Engine trong Game Engine (Xem chi tiết ở chương 2).  
2
2.3. Gii thiu chung  
Như đã gii thiu trên, Game Engine là mt lp trung gian gia game và nn  
tảng bên dưới, các thư viện lp trình cp thp. GEM là mt game engine nên dĩ nhiên  
Hình 1:  
Ki
ế
n trúc phân t
ng c
a GEM  
nó cũng tuân thủ theo nguyên tc này.  
Đặc điểm đầu tiên ca GEM là khả năng chạy đa nền. Để đạt được điều đó, GEM  
sdng các bn build trên các nn tng khác nhau (không sdng thông dch). Các  
đoạn code phthuc nn tng sẽ được phân chia bng vic sdng các ctin biên  
dch, hn chế tối đa việc sdng các lp abstract – vì vic này slàm gim hiu sut  
chương trình đáng kể Error! Reference source not found.. Cũng vì lí đo chạy đa nền  
nên hin ti chúng tôi sdng openGL làm giao din lp trình đồ ha 3D cp thp cho  
GEM, do chun openGL là chun mvà không bphthuc vào hệ điu hành.  
GEM được thiết kế hướng đối tượng và yêu cu vhiệu năng chạy cao nên chúng  
tôi sdng ngôn ngC++ - 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ế gii hiện nay đều được phát trin bng ngôn ngC++.  
Chúng tôi thiết kế GEM nhắm đến phân khúc phát trin MMORPG, nên khả năng  
tương thích với mt phm vi rng cu hình phn cng là một điều kin quan trng.  
Mc tiêu thiết kế GEM là hoạt động được trên các GPU htropenGL 1.4 và shader  
1.0 trlên.  
Bng 1: Bng GPU ti thiểu đưc htrợ  
Hãng sãn xut  
GPU htrợ  
nVidia  
TGeForce4 Ti trlên  
3
ATI  
TRadeon 9500 trlên  
Intel ( card tích hp )  
TIntel® GMA 3100 ( chipset G31,Q33) trlên  
Chương 3. Kiến trúc tng thể  
GEM là được chia thành nhiu thành phần để tin cho vic phát trin và bo trì.  
CthGEM gm các thành phần như sau:  
Hình 2: Kiến trúc tng thể  
Ghi chú : Do thi gian làm luận văn có hạn, chúng tôi mi chhoàn thành nhng  
thành phn sau: Giao tiếp vi hệ điu hành, Các kiu dliệu cơ bản, Render Engine.  
Nhng thành phần này đủ để htrợ người sdng to ra các khung cảnh 3D và tương  
4
tác vi chúng.  
3.1. Thành phn Các kiu dliệu cơ bản  
Hình 3: Sơ đồ lp ca thành phn Các kiu dliệu cơ bản  
Các kiu dliệu cơ bản là thành phn bao gm các cu trúc dliệu cơ bản như  
mảng động, vector, ma trn…, các phép toán trên các kiu dliệu đó cung cấp cho  
thành phn khác sdng.  
Các kiu dliu này có thchia thành 2 nhóm chính:  
1. Các yếu tkhông gian 3D  
Vector2, Vector, Vector4 : các loi vector biu din tọa độ 2 chiu, 3  
chiu và tọa độ đồng nht.  
5
Aabb (Axis aligned bounding box) : hình hp chnht có các cnh dc  
theo 3 trục xyz, được mô tbằng 2 điểm (xmin, ymin, zmin ), ( xmax, ymax,  
zmax  
)
Sphere : hình cầu, đưc mô tbi tọa độ tâm và bán kính.  
LineSequent, Line, Ray : đoạn thẳng, đường thng, tia.  
Matrix : ma trn sdụng để thc hin các phép biến đổi trong không  
gian 3 chiu.  
Plane : mt phẳng được mô tbng các hscủa phương trình: ax +  
by + cz + d = 0.  
Frustum : là hình chóp ct biu din khung nhìn của camera, được mô  
tbng 6 mt phng to nên nó.  
2. Các kiểu đối tượng lưu trữ  
String : lớp lưu trdliu kiu xâu kí t.  
Array : mảng động vi hsmrng có thtùy biến.  
GemAllocator : sdng bi các lớp khác để thc thi vic cp phát và  
gii phóng bnh.  
List : danh sách liên kết 2 chiu.  
Stack : ngăn xếp.  
3.2. Thành phn Giao tiếp vi hệ điều hành  
Giao tiếp vi hệ điu hành là thành phn thc thi các công vic cn giao tiếp vi  
hệ điu hành như điều phối event, đọc ghi file, ly thi gian hthống… Trong đó quan  
trng nht là quá trình điều phi event:  
GEM ly event tMessage System ca hệ điều hành, từ đó lấy các thông tin cn  
thiết to ra GemEvent - lý do cn tạo ra GemEvent là để tránh bphthuc vào hệ  
điều hành. Sau đó, GemEvent sẽ được gi lần lượt đến các thành phn có khả năng  
nhn và xlý event (Hình 4).  
6
Hình 4: Quá trình điều phi event.  
3.3. Thành phn Render Engine  
3.3.1. Khái quát vRender Engine  
Render Engine là thành phn ct lõi ca mt Game Engine. Nó htrợ người lp  
trình game các công vic thiết yếu để to ra mt khung cảnh 3D. Người dùng skhông  
cn biết nhiều đến nhng công vic tng thấp như quá trình đọc file tài nguyên, sử  
dng 3D Graphic API, trin khai các hiu ng trên GPU… mà chcn dùng giao din  
do Render Engine cung cp.  
Render Engine là thành phn duy nht trong Game Engine giao tiếp với các thư  
viện đồ ha cp thp (cthể ở đây là openGL và Cg - Hình 5).  
7
Hình 5:  
Ki
ế
n trúc phân t
ng c
a Render Engine.  
3.3.2. Kiến trúc ca Render Engine  
Render engine được chia thành các mô đun sau (Hình 6):  
Hình 6: Biểu đồ gói ca Render Engine.  
Graphic Driver là mô đun duy nht trc tiếp sdng 3D Graphic API  
(openGL), cung cấp cho các mô đun khác một giao diện đơn giản hơn để  
tương tác với thiết bxử lí đha.  
Qun lý tài nguyên là mô đun quản lý các tài nguyên cn thiết để xây dng  
8
mt khung cnh 3D như mesh, animated mesh, texture 2D, cubemap… Mô  
đun này được bn Hoàng Tuấn Hưng trình bày trong khóa lun “Xây dng  
Game Engine đa nền tng – Qun lý tài Nguyên và Chuyển động đối tưng”.  
Qun lý khung cnh là mô đun thực hin vic tchc và kim soát các đối  
tượng tn ti trong mt khung cnh 3D, từ đó thực hin quá trình render toàn  
bkhung cảnh đó tạo nên hình nh 2D ti vtrí nhìn. Mô đun này được bn  
Trương Đức Phương trình bày chi tiết trong khóa lun “Xây dng Game  
Engine đa nền tng – Qun lí khung cnh”.  
Hiu ng ánh sáng và vt liu là mô đun mở rng các thành phn ca  
Qun lý khung cảnh để to các hiu ng vánh sáng, vt liệu, và đổ bóng.  
Mô đun này được bn Bùi Hoàng Khánh trình bày chi tiết trong khóa lun  
“Xây dựng Game Engine đa nền tng – Hiu ng ánh sáng và vt liu”.  
Mô phng tnhiên là mô đun mở rng các thành phn ca Qun lý khung  
cảnh đmô phng các yếu ttnhiên cần có trong game như nước, địa hình,  
lửa, khói… Mô đun này sẽ được trình bày chi tiết trong chương 3 ca khóa  
lun này.  
Chuyển động của đối tượng là mô đun mở rng các thành phn ca Qun  
lý khung cnh, thc hin quá trình ni suy trong các mô hình chuyển động  
(thưng là các nhân vt trong game) thông qua hai kĩ thuật thông dng là  
keyframe và skinning. Mô đun này được trình bày chi tiết trong khóa lun  
“Xây dựng Game Engine đa nền tng – Qun lý tài nguyên và chuyển động  
đối tượng” ca Hoàng Tuấn Hưng.  
3.4. Các thành phn còn li  
Các thành phn Mng, Trí tunhân to, Tính toán vt lí, Âm thanh chưa được  
trin khai nên chúng tôi không đề cập đến trong tài liu này.  
9
Chương 4. Mô phng Tnhiên  
4.1. Khái Quát  
Mô phng tnhiên là mt nhim vhết sức cơ bản và cũng đóng vai trò rt quan  
trng trong các trò chơi 3D hiện nay. Nhim vcủa mô đun này là hỗ trvic to ra  
các đối tượng đc bit trong khung cnh 3D – các đối tượng tự nhiên như là nước, la,  
khói, bụi, mưa, địa hình, cây cỏ … Các đối tượng này thường xut hin trong các  
khung cnh ngoài tri. Vì vậy đây là phần không ththiếu được trong bt kì mt game  
3D nào có khung cnh ngoài tri. Vì thi gian không cho phép nên mục tiêu ban đầu  
ca chúng tôi là trin khai kĩ thuật mô phng mặt nước, địa hình và hthng ht – hệ  
thống cơ bản được sdụng để mô phỏng mưa, bụi, khói, la,.... Vi nhng hiu ng  
cơ bản này ta đã có thto ra đưc mt khung cnh 3D ngoài trời đơn giản.  
Hiu ứng cho các đối tượng ở đây được trin khai chyếu sthc thi bng GPU  
để gim gánh nặng cho CPU, nơi mà các công việc ca nhng phn sau này ca hệ  
thng vn stn rt nhiều tài nguyên CPU ( đặc bit quá trình tính toán và xlí vt lí  
). Vì vy, để trin khai nó chúng ta cn phi la chn mt ngôn nglp trình thích hp  
cho GPU. Các tiêu chí được đưa ra để la chn là:  
ngôn nglp trình bc cao, dhiu và trin khai hiu quả  
htrlp trình đa nn  
htrợ các tính năng của các card đồ ha thế hthứ tư ( từ 2002 đến nay )  
Dựa trên các tiêu chí trên, chúng tôi đã la chn Cg Shading Language. Chi tiết  
vngôn ngữ là hưng dn lp trình có ththam kho sách “The Cg Tutorial” Error!  
Reference source not found..  
Như đã nói ở trên mô đun này hiện tại có 3 mô đun con độc lp:  
Mô phng mặt nước: trin khai kĩ thuật mô phng mặt nước tmô hình vt  
Error! Reference source not found..  
Hthng ht: mô phng các hiện tượng như mưa, lửa, vn, pháo hoa,  
khói, tuyết,... hay các hiu ng thị giác như phép thuật.  
Địa hình: render địa hình ng dng kĩ thut LOD.  
10  
4.2. Mô phng mặt nước  
Mô phng mặt nước là mt trong các công vic phc tạp và khó khăn nhất hin  
nay trong lĩnh vực đồ ha 3D bi tính phc tp và khối lưng phép toán cn thc hin.  
Do đó việc thc hin mô phng mặt nước động thi gian thc trên máy tính cá nhân  
trước đây là rất khó khăn. Với sphát trin của các phương pháp xử lí stín hiệu, đặc  
bit là biến đi Fourier nhanh (FFT) khả năng mô phng mặt nước thi gian thc bng  
máy tính cá nhân, với điều kiện kích thước vùng nước không quá ln Error!  
Reference source not found.. Tuy nhiên để trin khai vic mô phng mặt nước trong  
Game Engine, ta cn có kĩ thuật đơn giản để có thtrin khai trên GPU. Vì vi ng  
dng mô phng lớn như các trò chơi 3D, thì ngoài vic mô phỏng được hình nh 3D  
bn còn phi cn thc hin rt nhiều tính toán khác như xử lí vt lí, trí tunhân to...  
Các thành phần này đã chiếm một lưng ln tài nguyên ca CPU và bnhmáy tính.  
Vì vậy mô đun này sẽ thc hin vic trin khai kĩ thuật mô phng mặt nước từ  
mô hình vật lí được gii thiu chi tiết trong tài liu Error! Reference source not  
found.. Tư tưng chính ca kĩ thut này là sdng mô hình vt lí là:  
Tính toán các sóng lan truyn trên bmặt theo điều kin thi tiết (gió)  
Tng hợp các sóng để tính độ cao ca bmt và normal map.  
Tính độ trong suốt nước phthuộc vào độ sâu nước và ánh sáng phn xtừ  
environment map.  
Như vậy, sau khi render ta có được hình ảnh sóng nước trên bmt chuyển động  
phthuộc vào điều kin thi tiết và tính cht của vùng nước (nông, sâu) và môi trường  
xung quanh.  
4.2.1. Thiết kế cơ bản  
Mô đun sẽ được trin khai thành 3 class ( xem Hình 7 ):  
WaterEffect: lp trc tiếp qun lí và có nhim vlà tng giao tiếp vi các  
chương trình Cg ca hiu ng mặt nước. Tha kế tlp Effect, các đối  
tượng ca lp sẽ được lưu trữ và qun lí bi EffectBank thuc package  
Qun Lí Tài Nguyên( Chi tiết vcách thức lưu trữ và qun lí xem trong tài  
liu Qun Lí Tài Nguyên – Hoàng Tuấn Hưng).  
WaterParameters: lớp này lưu trữ các tham ssẽ được truyn cho các  
11  
chương trình Cg. Các tham snày quyết định tính cht mặt nước sẽ được  
render bởi chương trình Cg. Ví dụ như khoảng bước sóng, tlcủa bước  
sóng và biên độ, độ dc ca sóng, tính phn xánh sáng...  
WaterSceneNode: lp mrng ca lp SceneNode để được gn vào  
scenegraph ca hthng RenderEngine. Lp này scha một đối tượng  
WaterParameters để lưu trữ các tham số đầu vào cho chương trình Cg.  
(Thông tin chi tiết vSceneNode và SceneGraphManager có thxem trong  
tài liu Qun Lí Khung Cnh – Trương Đức Phương).  
Hình 7: Sơ đồ lớp cơ bản ca package Mô phng Mặt Nưc  
Thêm na, chúng ta phi triển khai 2 chương trình Cg:  
NormProg: chương trình render normalmap ca mặt nước. Các hàm sóng  
truyền cho chương trình là các hàm sóng riêng và độc lp so vi các hàm  
sóng to nên chuyển động sóng trong chương trình WaterSim.  
WaterSim: chương trình render mặt nước da trên bn hàm sóng và  
normalmap đã được tính trước ca bmt. Các hàm sóng truyền cho chương  
trình đã được to ngẫu nhiên trước bi CPU trong lp WaterEffect da trên  
12  
nhng ràng buc vtính cht ca mặt nước như khoảng bước sóng, độ dc,  
mức độ phn xánh sáng,... Các ràng buộc này được thiết lập cho đối tượng  
WaterSceneNode và lưu trữ trong đối tượng WaterParameters.  
Vi mô hình như trên, mô đun sẽ hoạt động cơ bản như sau:  
Bước 1: to ra RenderContext cho  
renderList ca WaterSceneNode và  
WaterEffect. Mọi đối tượng  
WaterSceneNode đều được gn vào  
renderList này và sdng  
WaterEffect để render vi tham số  
ca mình.  
Bước 2: khi tạo đối tượng  
WaterSceneNode. Trong đó nhiệm  
vchyếu là gắn đối tượng vào  
renderList và khi to tham scho  
ràng buc cho WaterEffect.  
Bước 3: To ngu nhiên các hàm  
sóng da trên các tham sràng  
buc. Song song vi vic to sóng,  
Hình 8: Quá trình hoạt đng ca  
package Mô Phng Mặt Nưc.  
ta cũng phải trit tiêu dn các hàm  
sóng theo thi gian. Ri tái to li  
sóng mi khi mt sóng btrit tiêu hoàn toàn.  
Bước 4: render normal map ra texture với các hàm sóng đã to bởi chương  
trình Cg NormProg.  
Bước 5: render mặt nước vi các hàm sóng và normalmap texture đã to.  
Quá trình render được thc hin bởi chương trình WaterSim viết bng Cg.  
Quay lại bưc 3.  
Như vậy sau khi kết thúc bước 5, ta có mt hình nh mặt nước ti mt thời điểm.  
Quá trình lp từ bước 3 đến bước 5 scho ta mt hình nh mặt nước động vi các tính  
chất đã được xác định ban đầu.  
13  
4.2.2. Thiết kế chức năng  
Da trên mô hình cơ bản trên, ta cn thiết kế các chức năng sau:  
Tin khi to: to RenderContext và WaterEffect.  
Khi to: khi tạo đối tượng WaterSceneNode và đặt các tham scho  
WaterEffect.  
To sóng: to các ngu nhiên sóng tcác tham sràng buc.  
Render normalmap: render normalmap ra texture.  
Render mặt nước: render mặt nước vi thông svề sóng, và normal map đã  
tính trước.  
Tin khi to  
Chức năng này được thiết kế thực thi theo sơ đồ luồng như sau:  
Hình 9: Sơ đồ lung thc hin chức năng Tiền khi to  
Theo sơ đồ trong Hình 9, bước đầu tiên ta phi tạo ra rendercontext và đặt các cờ  
trng thái thích hp cho quá trình render đối tượng WaterSceneNode. Vic tiếp theo là  
tạo ra WaterEffect để render WaterSceneNode. Sau đó gắn effect này vào effectBank  
trong scenegraphmanager. Việc lưu trữ và quản lí effect hoàn toàn được kim soát bi  
effectBank (mô đun Quản lí Tài Nguyên). Do đó ta chỉ cần lưu lại ID của effect để có  
14  
thtruy cp khi cn. Sau cùng, ta phi gắn RenderContext đã to vào render list trong  
scenegraphmanager. Việc render list nào được gán sẽ được quyết định bởi người lp  
trình khi viết chương trình 3D. Đồng thi chscủa render list đó.  
Chú ý, vì tt cả các đối tượng WaterSceneNode đều sdng chung một đối tượng  
RenderContext và WaterEffect nên việc lưu trữ chsca render list hay WaterEffect ở  
trong mỗi đối tượng WaterSceneNode là không cn thiết. Ta có thể đưa các thuộc tính  
này trthành thành phn thuc lp thay vì thuc tính riêng ca từng đối tượng. Do đó  
hàm thc hin chức năng này cũng thuộc lp và cần được gọi trước khi tạo ra các đối  
tượng WaterSceneNode thc s.  
Khi to  
Các bước chính để khi to một đối tượng WaterSceneNode là:  
Bước 1: gắn node vào water render list được xác định trong quá trình tin  
khi to.  
Bước 2: khi tạo đối tượng WaterParameters vi các tham smặc đnh.  
Bước 3: khi to các sóng tcác tham smặc đnh. Và bắt đu quá trình cp  
nht các tham sca sóng theo thi gian.  
Ngoài các bước chính như phân tích trên, trong sơ đồ (Hình 10) ta có thêm mt  
số bưc sau:  
Gán node vào danh sách node con ca node cha ca nó trong scenegraph.  
Đây một chức năng của mi SceneNode.  
Tạo ra texture lưu trữ giá trị cosine và noise để truyền cho chương trình  
NormProg nhm gim các phép tính phc tạp cho chương trình Cg thc hin  
bi GPU. BiasNoise là các sngẫu nhiên được to trong khoảng [0..1] để  
tăng mức chi tiết cho các gn sóng. CosineLUT là một texture lưu trữ các giá  
trị tương ứng ca hàm (sin(2u)*0.5 + 0.5)*cos(2u). Trong đó, u là tọa độ  
ca các pixel trong htọa độ ca texture.  
Khi tạo các texture để thc hin offscreen render – dùng trong render  
normal map.  
15  
Hình 10: Sơ đồ lung thc hin vic khi tạo đối tượng WaterSceneNode  
Như vậy, sau khi to xong một đối tượng WaterSceneNode. Thì đối tượng đó đã  
sẵn sàng để được render trong khung cnh 3D.  
To sóng  
Đây là chức năng tạo ra các hàm sóng ngu nhiên theo các ràng buc là các tham  
strong WaterParameters. Ngoài ra nó còn đảm nhn vic trit tiêu dn các sóng theo  
thi gian và to li sóng mi khi một sóng đã hết thi gian sng và btrit tiêu hoàn  
toàn. Sóng mới được to ra vn phải được tuân theo ràng buộc như các tham số ban  
đầu.  
Trng thái mt sóng có thể được đặc tbi các thông ssau:  
Pha (  
Biên đ(A)  
Bước sóng (L)  
Tn s(f)  
Phương truyền (D)  
Cường độ sóng (F)  
16  
Để to ra các sóng ngu nhiên, trong các tham scho hiu ng thay vì lưu trữ các  
giá trchính xác của sóng, ta lưu trữ các tham sràng buc min giá trị như bước sóng  
ln nht (Lmax) và bước sóng nhnht (Lmin).  
Để tạo ra các sóng khác nhau nhưng có cùng dáng điệu ta sthhin biên độ ca  
sóng theo mt hstlcố định giữa biên độ và bước sóng.  
Ngoài ra để to ra skhác bit về phương truyền sóng, ta còn lưu trữ thêm mt  
tham số lưu trữ góc lch tối đa so với hướng gió.  
V
i các  
tham  
số như  
trên ta  
có thể  
tính ra  
tt cả  
các  
thông  
số  
trng  
thái  
ca  
sóng  
vi hệ  
sngu  
nhiên  
được  
sinh  
trong  
Hình 11: Sơ đồ to hiu ứng tăng giảm cường độ sóng theo thi gian  
khong  
t[0..1] vi mi ln to sóng. Thêm nữa để to hiu ứng sóng tăng dần khi mới được  
sinh ra ri btrit tiêu dần khi đạt đến mc cao nht. Ta có thông svề cường độ sóng  
F đưc khi to vi giá trị 0, sóng đạt cực đại khi F = 1. Và mt tham số đặc trưng cho  
tốc độ thay đổi cường độ sóng sau mi khung hình, kí hiu là T. Ngoài ra, ta còn thêm  
17  
mt tham số là Idx xác định chsố sóng đang thay đổi. Vì ta sẽ thay đổi lần lượt cường  
độ tng sóng. Quá trình thc hin xem Hình 11.  
Render normalmap  
Được thc hin bởi chương trình viết bng ngôn ngCg và xlí qua GPU.  
Nhim vca nó là render normal map tcác tham số đầu vào và hai texture là  
BiasNoise và CosineLUT.  
CosineLUT là texture lưu trữ giá trị tính trước ca  
k1  
sin 2 u  
cos 2 u  
hàm số  
. Việc tính trước giá trhàm  
snày stiết kim rt nhiều phép tính trong các chương  
trình Cg. Nơi mà mỗi mt phép tính tha skhiến chương  
trình chy chậm đi rất nhiu do, mỗi chương trình xlí  
pixel được gi n ln vi n là spixel cần được render. Hơn  
nữa đây chỉ là chương trình render normalmap, mục đích  
chính là tính ra vector normal vi mi khung hình. Cho nên  
cn phi gim thi gian xử lí đtính ra vector normal nhanh  
nht có thể. Để cung cấp vector normal cho chương trình  
render chính sdng.  
BiasNoise là texture lưu trữ các giá trngu nhiên  
trong khong [0..1]. Các giá trị này được cng thêm vào  
vector normal để to ra bc nh không quá láng mn. Nó có  
thể tăng thêm độ chi tiết và đem lại cm giác thật hơn.  
Theo kĩ thuật được gii thiu trong sách GPU  
GemsError! Reference source not found. ta ssdng 16 sóng cho  
texture vì để tối ưu cho tính toán ta sẽ quá trình xlí ca  
chương trình Cg làm 5 giai đoạn. Bốn giai đoạn đầu, mi  
giai đoạn xử lí 4 sóng. Để cng gp giá trtính toán ta xử  
Hình 12: Quá trình  
render normal map  
dụng phương pháp trộn màu giữa các giai đoạn. Giai đoạn cui là cng giá trnoise.  
(xem Hình 12).  
Lưu ý là, chương trình render normal skhông render hình nh vector normal mà  
nó render ra một texture. Texture này được sdụng như là tham số đầu vào và được  
truy cp bởi chương trình vmặt nưc.  
18  
Render mặt nước  
Đây là chức năng chính có nhiệm vrender ra màn hình hình nh 3D ca mt  
nước. Chức năng này cũng được thc hin bởi chương trình Cg chy trong GPU. So  
với chương trình render normalmap thì chương trình này schchy mt ln vì số  
sóng được sdụng để tng hợp là ít hơn chỉ có 4 sóng. Các dliu có thể được gói  
chung vào trong các vector-4 chiều, để li dng các phép toán vector được htrbi  
GPU.  
Chương trình xlí vertex phi thc hin nhng vic sau (xem Hình 13):  
Chuyn tọa độ vertex tlocal space sang world space. Vì các tính toán trong  
chương trình đều tính trong world space.  
Tính tọa độ texture uv ca normal texture.  
Tính hslọc theo độ sâu. Hsố này được dùng để lc hay gim bt biên  
độ sóng ở vùng nước nông.  
Tính li tọa độ vertex bng cách ly tng ca các hàm sóng.  
Tính vector nhìn – vector tmắt đến vertex. Vector này được truyn cho  
fragment program để nh tia sáng đến.  
Tính ma trn chuyn vector normal sang không gian world. Vì vector  
normal đã tính ở bưc trên là tọa độ trong không gian uv ca texture.  
Tính tọa độ cui cùng ca vertex ( trong không gian Clip ).  
Tính lại màu nước theo độ sâu và truyn cho fragment program.  
19  
Vertex Program  
Fragment Program  
Hình 13
: Sơ đồ
ho
ạt đ
ng c
ủa chương tr
ình Render m
ặt nư
c  
Phn vic còn li của chương trình xlí pixel là ly vector normal ttexture.  
Chuyn normal sang không gian World bng ma trn chuyển đổi. Tính tia sáng ti  
vertex bng vector nhìn và vector pháp tuyến. Ly màu phn xcủa môi trường ttia  
ti và environment map. Trộn màu nước và màu phn xạ ta đưc màu cui cùng.  
20  
4.2.3. Trin khai lớp đxut:  
WaterParameters  
Hình 14: Sơ đồ lp WaterParameters  
Lớp WaterParameters lưu trữ đối 2 đối tượng ca 2 lp con là GeoWaveParams  
và TexWaveParams. Trong đó:  
World2Clip, Local2World là các ma trn biến đi gia các htọa đ.  
NormalMap, EnvMap, CosineLUT, BiasNoise là các ID ca các texture  
tương ứng.  
Chop : là hsố xác định độ dc ca sóng.  
MinLength, MaxLength là các tham sràng buc min giá trcủa bước  
sóng.  
AmpOverLen xác định tlgiữa bước sóng và biên độ.  
WindDir và AngleDeviation: xác định hướng gió và góc lch tối đa của  
phương truyền sóng so với hướng gió.  
WaterLevel xác định độ cao ca mặt nưc trong không gian World.  
21  
TransIdx và TransDel xác định sóng đang bị biến đổi và tốc đổ biến đổi  
cường độ sóng.  
RippleScale xác định hstlca gợn sóng. Được dùng để to ra texture  
có thxếp liên tiếp.  
WaterEffect  
L
p  
Water  
Effect  
được  
trin  
khai  
theo  
sơ đồ  
trên  
(Hình  
15).  
Lp  
được  
tha  
kế từ  
lp  
Hình 15: Sơ đồ trin khai lp WaterEffect  
Effect, và triển khai các phương thc thc hin các chức năng sau:  
updateParameters() thc hin update các tham số cho chương trình Cg vi  
các tham sràng buộc được truyền vào lưu trữ trong đối tượng ca lp  
WaterParameters.  
initWaves() : khi to các sóng trong danh sách sóng theo các ràng buc  
được truyn vào.  
updateWaves() : cp nht các sóng theo thi gian.  
Ngoài ra lp có khai báo các lớp con để tin sdng:  
22  

Tải về để xem bản đầy đủ

pdf 55 trang yennguyen 09/05/2025 70
Bạn đang xem 30 trang mẫu của tài liệu "Khóa luận Xây dựng game engine đa nền tảng mô phỏng tự nhiên", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfkhoa_luan_xay_dung_game_engine_da_nen_tang_mo_phong_tu_nhien.pdf