Chủ Nhật, 9 tháng 2, 2014
Xây dựng game engine đa nền tảng - hiệu ứng ánh sáng và vật liệu
iii
MỤC LỤC
LỜI CẢM ƠN i
TÓM TẮT ii
MỤC LỤC iii
BẢNG CÁC TỪ VIẾT TẮT v
DANH MỤC HÌNH VẼ vi
DANH MỤC BẢNG BIỂU viii
MỞ ĐẦU 1
Chương 1: TỔNG QUAN VỀ GEM 3
1.1. Khái niệm Game Engine 3
1.2. Mô hình của GEM 3
1.2.1. Các đặc điểm của GEM 3
1.2.2. Kiến trúc tổng thể 4
1.2.2.1. Thành phần Cấu trúc dữ liệu cơ bản 5
1.2.2.2. Thành phần Giao tiếp với Hệ điều hành 6
1.2.2.3. Thành phần Render Engine 7
1.2.2.4. Các thành phần còn lại 8
Chương 2: CƠ SỞ LÝ THUYẾT 9
2.1. Ánh sáng trong đồ họa máy tính 9
2.1.1. Các thành phần của ánh sáng 9
2.1.2. Các mô hình tạo bóng 11
2.2. Đổ bóng 12
2.2.1. Bóng của đối tượng trong khung cảnh 12
2.2.2. Phương pháp đổ bóng 12
2.3. Đối tượng có bề mặt phức tạp 13
2.3.1. Đối tượng với mạng lưới nhiều đa giác 13
2.3.2. Kỹ thuật sử dụng bản đồ vector pháp tuyến 13
2.3.3. Không gian Texture 14
iv
Chương 3: MÔ HÌNH ĐỀ XUẤT 16
3.1. Các yêu cầu chung của mô đun 16
3.2. Các thành phần trong mô đun 17
Chương 4: THIẾT KẾ CHI TIẾT 19
4.1. Chiếu sáng 19
4.1.1. Vật liệu 19
4.1.2. Chiếu sáng bằng mô hình OpenGL cung cấp 20
4.1.3. Chiếu sáng bằng mô hình tự định nghĩa 22
4.1.3.1. Lớp DLightSceneNode 22
4.1.3.2. Sử dụng DLightSceneNode 25
4.2. Hiệu ứng đổ bóng 27
4.3. Hiệu ứng Bump 30
Chương 5: THỰC NGHIỆM 34
5.1. Thực nghiệm chương trình 34
5.1.1. Phương pháp đánh giá 34
5.1.2. Kết quả đánh giá 34
5.2. Demo chương trình 35
KẾT LUẬN 37
Kết luận 37
Hướng phát triển 37
PHỤ LỤC 38
TÀI LIỆU THAM KHẢO a
v
BẢNG CÁC TỪ VIẾT TẮT
Ký hiệu Từ tiếng Anh Giải thích
CPU Central processing unit Đơn vị xử lý trung tâm
GPU Graphics processing unit Đơn vị xử lý đồ họa
MMORPG
Massively multiplayer online
role-playing game
Trò chơi nhập vai trực tuyến
nhiều người chơi
SL Shading language Ngôn ngữ tạo bóng
SV Shadow volume Vùng giới hạn bóng
vi
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ể của GEM 4
Hình 3: Biểu đồ 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 sự kiện 6
Hình 5: Kiến trúc phân tầng của Render Engine 7
Hình 6: Tác động của Ánh sáng trong đồ họa 3D 9
Hình 7: Vẽ vật thể với áng sáng Ambient 10
Hình 8: Vẽ vật thể với thành phần Diffuse 10
Hình 9: Vẽ vật thể với thành phần Specular 11
Hình 10: Kết quả của một số mô hình tạo bóng 11
Hình 11: Kết quả của cùng một mô hình ánh sáng trên Vertex và Pixel 12
Hình 12: Mô hình của SV 13
Hình 13: So sánh giữa sử dụng bản đồ pháp tuyến và thiết kế mô hình 14
Hình 14: Mô hình liên kết với các thành phần khác bên ngoài 16
Hình 15: Các thành phần của mô đun Hiệu ứng ánh sáng và vật liệu 17
Hình 16: Quá trình Chiếu sáng 19
Hình 17: Lớp Material 20
Hình 18: Lớp LightSceneNode 20
Hình 19: Sơ đồ “bật” nguồn sáng 21
Hình 20: Lớp DLightSceneNode 22
Hình 21: Sơ đô trạng thái “bật” nguồn sáng động 23
Hình 22: Lớp DLightEffect 24
Hình 23: Ví dụ về một lớp sử dụng DLightSceneNode 25
Hình 24: Quá trình chiếu sáng bằng hệ thống ánh sáng động 26
vii
Hình 25: Lớp Shadow 27
Hình 26: Sơ đồ trạng thái vẽ bóng 27
Hình 27: Lớp ShadowEffect 28
Hình 28: Cấu trúc dữ liệu tính toán Vùng đổ bóng 29
Hình 29: Sơ đồ hoạt động của renderShadow() 30
Hình 30: Lớp BumpSceneNode 30
Hình 31: Tính ma trận chuyển từ không gian World sang không gian Texture 31
Hình 32: Sơ đồ lớp BumpEffect 32
Hình 33: Sơ đồ hoạt động của phương thức render() của BumpSceneNode 33
Hình 34: Hình hộp sử dụng hiệu ứng bump 36
Hình 35: Trò chơi cờ vua 36
Hình 36: Khung cảnh bên trong một ngôi nhà 36
viii
DANH MỤC BẢNG BIỂU
Bảng 1: Dòng card đồ họa được GEM hỗ trợ 4
Bảng 2: Bảng đánh giá Thực nghiệm 1 34
Bảng 3: Bảng đánh giá Thực nghiệm 2 35
Bảng 4: Bảng đánh giá Thực nghiệm 3 35
1
MỞ ĐẦU
Với xu hướng phát triển mạnh mẽ của công nghệ phần cứng (cụ thể là các phần
cứng xử lý đồ họa lập trình được và các ngôn ngữ lập trình trên phần cứng này) và
công nghệ mô phỏng và giải trí, các ứng dụng đồ họa và trò chơi 3D được xây dựng và
phát triển ngày càng nhiều. Cách đây 20 năm, các ứng dụng này 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, với tính năng
xử lý đồ họa và tương tác ấn tượng thường được phát triển bởi một đội ngũ đông đảo
gồm nhà thiết kế, lập trình viên… trong khoảng thời gian liên tục từ một đến ba năm.
Để đảm bảo các yêu cầu: hỗ trợ một dải phần cứng và phần mềm (hệ điều hành) lớn,
có khả năng lựa chọn API đồ họa mức thấp (OpenGL, OpenGL ES hay DirectX), dễ
dàng quản lý và phát triển các tài nguyên, và có khả năng tái sử dụng mã nguồn cao;
các ứng dụng này thường được phát triển lên từ một game engine thay vì phát triển từ
nguyên thủy.
Ở Việt Nam hiện nay, các trò chơi trực tuyến mới chỉ thực sự thâm nhập vào thị
trường cách đây 06 năm; chỉ trong khoảng thời gian ít ỏi đó, chúng ta đã hình thành
hàng chục các nhà phát hành, và số trò chơi trực tuyến được phát hành cũng tương ứng
với số lượng đó. Nhưng một thực trạng đáng buồn là gần như hầu hết các trò chơi trực
tuyến đang được phát hành 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ố trò chơi nhỏ chơi trên nền web như đánh bài, đánh cờ…). Một câu
hỏi mà có lẽ tất cả người chơi đều trăn trở là “bao giờ mới được chơi game Việt
Nam?”.
Từ thực tế đó, chúng tôi chọn đề tài này không có tham vọng quá lớn, mà chỉ
muốn đi những bước 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.
Khóa luận nghiên này cứu xây dựng một hệ thống Game Engine đa nền tảng
(được đặt tên là GEM) (trước mắt sẽ hỗ trợ Window PC và Linux PC) và nhắm đến thị
trường trò chơi nhập vai trực tuyến. Đây là mục tiêu dài hạn, còn hiện tại, do hạn chế
về thời gian (khoảng 5 tháng) nên chúng tôi chỉ tập trung hoàn thiện thành phần
Render Engine trong Game Engine. Để giải quyết vấn đề này, khóa luận tập trung
nghiên cứu và phân tích môi trường phát triển đồ họa 3D (gồm cả phần cứng và phần
2
mềm), các công nghệ đã được triển khai trong một số game engine khác hiện có trên
thị trường. Từ đó khóa luận đưa ra phương pháp và xây dựng hệ thống tổ chức và quản
lý bộ nhớ, cũng như các đối tượng trong khung cảnh 3D.
Ngoài ra, khóa luận cũng nghiên cứu và triển khai các hiệu ứng (ánh sáng, nước,
lửa…), các mô phỏng vật lý (hệ thống hạt, trường lực…), các tối ưu về bộ nhớ, tốc độ
xử lý và thiết kế mô hình đối tượng trong khung cảnh 3D.
Bố cục của khóa luận bao gồm phần mở đầu, phần kết luận và 5 chương nội dung
được tổ chức như sau:
Chương 1: Trình bày các khái niệm về Game Engine, cách tiếp cận và phương
pháp sử dụng để triển khai hệ thống Game Engine đa nền tảng. Ch ương này cũng trình
bày mô hình chung của một Game Engine và một số thành phần cơ bản khác của hệ
thống.
Chương 2: Trình bày các cơ sở lý thuyết để xây dựng nên mô đun Hiệu ứng ánh
sáng và vật liệu. Trong đó chương này trọng tâm vào trình bày một cách tổng quan
nhất về các lý thuyết được áp dụng để thiết kế và cài đặt mô đun này.
Chương 3: Trình bày mô hình tổng quan của mô đun Hiệu ứng ánh sáng và vật
liệu. Đó là đưa ra quan hệ giữa mô đun này với các mô đun khác trong hệ thống, cũng
như quan hệ giữa các thành phần trong cùng mô đun.
Chương 4: Trình bày chi tiết việc cài đặt các thành phần cơ bản của mô đun
Hiệu ứng ánh sáng và vật liệu. Đó là cấu trúc lớp để quản lý các thành phần của hệ
thống, và các luồng điều khiển thực thi.
Chương 5: Trình bày các đánh giá thực nghiệm và các demo tính năng mà mô
đun Hiệu ứng ánh sáng và vật liệu thực hiện được.
3
Chương 1: TỔNG QUAN VỀ GEM
1.1. Khái niệm Game Engine
Game Engine là một công cụ hỗ trợ, một lớp trung gian ở giữa các ứng dụng
game và nền tảng bên dưới, các thư viện lập trình cấp thấp. Game Engine giúp phát
triển ứng dụng game một cách nhanh chóng và đơn giả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 ứng dụng từ một game engine.
Hình 1: Kiến trúc phân tầng của GEM
GEM là một game engine nên dĩ nhiên nó cũng tuân theo mô hình này (Hình 1).
1.2. Mô hình của GEM
1.2.1. Các đặc điểm của GEM
Như đã giới thiệu, GEM hỗ trợ đa nền (Window PC và Linux PC) và nhắm đến
thị trường phát triển game nhập vai trực tuyến, nên GEM có các đặc điểm sau:
Đầu tiên là khả năng chạy đa nền. Để đạt được điều này, GEM sử dụng các bản
build khác nhau 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 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 ảo – vì việc nằm sẽ làm giảm đáng kể hiệu
suất chương trình [4][5]. Cũng vì lí do này 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; và sử dụng Cg Shading Language làm ngôn ngữ tạo bóng.
Thứ hai, 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.
4
Cuối cùng, do GEM nhắm đến thị trường phát triển game nhập vai trực tuyến,
nên sẽ được thiết kế để tương thích với một phạm vi rộng cấu hình phần cứng, dự kiến
sẽ hỗ trợ các card đồ họa hỗ trợ OpenGL 1.4 và Shader 1.0 trở lên (Bảng 1).
Bảng 1: Dòng card đồ họa được GEM hỗ trợ
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
1.2.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ể của GEM
Đăng ký:
Đăng Nhận xét (Atom)
Không có nhận xét nào:
Đăng nhận xét