LUẬN VĂN: XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG MÔ PHỎNG TỰ NHIÊN - Pdf 15


ĐẠ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

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

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

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


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

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

‒ 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
nhận và xử lý event (Hình 4).
7
3.3. Thành phần Render Engine
3.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 lập
trình game 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, triển khai các hiệu ứng trên GPU… 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ư

Mô đun này được bạn Bùi Hoàng Khánh trình bày chi tiết 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”.
‒ Mô phỏng tự nhiên là mô đun 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… Mô đun này sẽ được trình bày chi tiết trong chương 3 của khóa
luận này.
‒ Chuyển động của đối tượng là mô đun mở rộng các thành phần của Quản
lý khung 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. Mô đun này được trình bày chi tiết 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” của Hoàng Tuấn Hưng.
3.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.
10
Chương 4. Mô phỏng Tự nhiên
4.1. Khái Quát
Mô phỏng tự nhiên là một nhiệm vụ hết sức cơ bản và cũng đóng vai trò rất quan
trọng trong các trò chơi 3D hiện nay. Nhiệm vụ của mô đun này là hỗ trợ việc tạo ra
các đối tượng đặc biệt trong khung cảnh 3D – các đối tượng tự nhiên như là nước, lửa,
khói, bụi, mưa, địa hình, cây cỏ … Các đối tượng này thường xuất hiện trong các
khung cảnh ngoài trời. Vì vậy đây là phần không thể thiếu được trong bất kì một game
3D nào có khung cảnh ngoài trời. Vì thời gian không cho phép nên mục tiêu ban đầu
của chúng tôi là triển khai kĩ thuật mô phỏng mặt nước, địa hình và hệ thống hạt – hệ
thống cơ bản được sử dụng để mô phỏng mưa, bụi, khói, lửa, Với những hiệu ứng
cơ bản này ta đã có thể tạo ra được một khung cảnh 3D ngoài trời đơn giản.
Hiệu ứng cho các đối tượng ở đây được triển khai chủ yếu sẽ thực thi bằng GPU
để giảm gánh nặng cho CPU, nơi mà các công việc của những phần sau này của hệ
thống vốn sẽ tốn rất nhiều tài nguyên CPU ( đặc biệt quá trình tính toán và xử lí vật lí

‒ Tính toán các sóng lan truyền trên bề mặt theo điều kiện thời tiết (gió)
‒ Tổng hợp các sóng để tính độ cao của bề mặt và normal map.
‒ Tính độ trong suốt nước phụ thuộc vào độ sâu nước và ánh sáng phản xạ từ
environment map.
Như vậy, sau khi render ta có được hình ảnh sóng nước trên bề mặt chuyển động
phụ thuộc vào điều kiện thời tiết và tính chất 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 triển khai thành 3 class ( xem Hình 7 ):
‒ WaterEffect: lớp trực tiếp quản lí và có nhiệm vụ là tầng giao tiếp với các
chương trình Cg của hiệu ứng mặt nước. Thừa kế từ lớp Effect, các đối
tượng của lớp sẽ được lưu trữ và quản lí bởi EffectBank thuộc package
Quản Lí Tài Nguyên( Chi tiết về cách thức lưu trữ và quản lí xem trong tài
liệu Quản Lí Tài Nguyên – Hoàng Tuấn Hưng).
‒ WaterParameters: lớp này lưu trữ các tham số sẽ được truyền cho các
12
chương trình Cg. Các tham số này quyết định tính chất mặt nước sẽ được
render bởi chương trình Cg. Ví dụ như khoảng bước sóng, tỉ lệ của bước
sóng và biên độ, độ dốc của sóng, tính phản xạ ánh sáng
‒ WaterSceneNode: lớp mở rộng của lớp SceneNode để được gắn vào
scenegraph của hệ thống RenderEngine. Lớp này sẽ chứa 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 về SceneNode và SceneGraphManager có thể xem trong
tài liệu Quản Lí Khung Cảnh – Trương Đức Phương).
Thêm nữa, chúng ta phải triển khai 2 chương trình Cg:
‒ NormProg: chương trình render normalmap của 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 lập so với các hàm
sóng tạo nên chuyển động sóng trong chương trình WaterSim.
‒ WaterSim: chương trình render mặt nước dựa trên bốn hàm sóng và
normalmap đã được tính trước của bề mặt. Các hàm sóng truyền cho chương

Quay lại bước 3.
Như vậy sau khi kết thúc bước 5, ta có một hình ảnh mặt nước tại một thời điểm.
Quá trình lặp từ bước 3 đến bước 5 sẽ cho ta một hình ảnh mặt nước động với các tính
chất đã được xác định ban đầu.
Hình 8: Quá trình hoạt động của
package Mô Phỏng Mặt Nước.
14
4.2.2. Thiết kế chức năng
Dựa trên mô hình cơ bản ở trên, ta cần thiết kế các chức năng sau:
‒ Tiền khởi tạo: tạo RenderContext và WaterEffect.
‒ Khởi tạo: khởi tạo đối tượng WaterSceneNode và đặt các tham số cho
WaterEffect.
‒ Tạo sóng: tạo các ngẫu nhiên sóng từ các tham số ràng buộc.
‒ Render normalmap: render normalmap ra texture.
‒ Render mặt nước: render mặt nước với thông số về sóng, và normal map đã
tính trước.
Tiền khởi tạo
Chức năng này được thiết kế thực thi theo sơ đồ luồng như sau:
Theo sơ đồ trong Hình 9, bước đầu tiên ta phải tạo ra rendercontext và đặt các cờ
trạng thái thích hợp cho quá trình render đối tượng WaterSceneNode. Việc 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 kiểm soát bởi
effectBank (mô đun Quản lí Tài Nguyên). Do đó ta chỉ cần lưu lại ID của effect để có
Hình 9: Sơ đồ luồng thực hiện chức năng Tiền khởi tạo
15
thể truy cập khi cần. Sau cùng, ta phải gắn RenderContext đã tạo vào render list trong
scenegraphmanager. Việc render list nào được gán sẽ được quyết định bởi người lập
trình khi viết chương trình 3D. Đồng thời chỉ số của render list đó.
Chú ý, vì tất cả các đối tượng WaterSceneNode đều sử dụng chung một đối tượng
RenderContext và WaterEffect nên việc lưu trữ chỉ số của render list hay WaterEffect ở

toàn. Sóng mới được tạo ra vẫn phải được tuân theo ràng buộc như các tham số ban
đầu.
Trạng thái một sóng có thể được đặc tả bởi các thông số sau:
‒ Pha (
‒ Biên độ (A)
‒ Bước sóng (L)
‒ Tần số (f)
‒ Phương truyền (D)
‒ Cường độ sóng (F)
Hình 10: Sơ đồ luồng thực hiện việc khởi tạo đối tượng WaterSceneNode
17
Để tạo ra các sóng ngẫu nhiên, trong các tham số cho hiệu ứng thay vì lưu trữ các
giá trị chính xác của sóng, ta lưu trữ các tham số ràng buộc miền giá trị như bước sóng
lớn nhất (L
max
) và bước sóng nhỏ nhất (L
min
).
Để tạo ra các sóng khác nhau nhưng có cùng dáng điệu ta sẽ thể hiện biên độ của
sóng theo một hệ số tỉ lệ cố định giữa biên độ và bước sóng.
Ngoài ra để tạo ra sự khác biệt về phương truyền sóng, ta còn lưu trữ thêm một
tham số lưu trữ góc lệch tối đa so với hướng gió.
V
ới các
tham
số như
trên ta
có thể
tính ra
tất cả


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status