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

ĐẠI HỌC QUỐC GIA HÀ NỘI  
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ  
Bùi Hoàng Khánh  
XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG -  
HIỆU ỨNG ÁNH SÁNG VÀ VẬT LIỆU  
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  
ĐẠI HỌC QUỐC GIA HÀ NỘI  
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ  
Bùi Hoàng Khánh  
XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG -  
HIỆU ỨNG ÁNH SÁNG VÀ VẬT LIỆU  
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  
Lời đầu tiên tôi xin bày tỏ lòng biết ơn chân thành tới các thầy cô giáo Trường  
Đại học Công Nghệ, Đại học Quốc Gia nói chung và các thầy cô bộ môn công nghệ  
Phần mềm nói riêng. Trong suốt thời gian tôi học tại trường, các thầy cô đã luôn tận  
tình dạy dỗ, chỉ bảo để tôi có được kết quả như ngày hôm nay.  
Đặc biệt, tôi xin chân thành cảm ơn giảng viên, thạc sĩ Vũ Quang Dũng. Cảm ơn  
thầy vì những định hướng, nhận xét quý báu và động viên kịp thời của thầy đã giúp tôi  
hoàn thành khóa luận này. Tôi cũng xin cảm ơn phòng thí nghiệm Toshiba – Coltech  
đã tạo điều kiện cho tôi có môi trường làm việc trong quá trình thực hiện khóa luận  
này.  
Cuối cùng tôi xin bày tỏ lòng biết ơn sâu sắc tới gia đình và bạn bè, những người  
đã luôn động viên, giúp đỡ tôi cả về vật chất lẫn tinh thần trong suốt những năm tháng  
qua.  
Hà Nội, ngày 19 tháng 05 năm 2009  
Sinh viên  
Bùi Hoàng Khánh  
i
TÓM TẮT  
Sự phát triển của công nghệ mô phỏng và giải trí, ngày càng có nhiều ứng dụng  
đồ họa và trò chơi 3D được xây dựng nhằm phục vụ mục đích nghiên cứu, mô phỏng  
và giải trí… Cùng với đó, công nghệ phần cứng cũng phát triển rất nhanh, đặc biệt là  
các phần cứng xử lý đồ họa có thể lập trình được và các ngôn ngữ lập trình trên các  
phần cứng này. Tuy nhiên, để xây dựng một ứng dụng đồ họa và trò chơi 3D đảm bảo  
các yêu cầu: hỗ trợ một dải phần cứng và phần mềm (cụ thể là 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; các ứng dụng này được xây dựng từ một game  
engine, chứ không phát triển từ nguyên thủy.  
Xuất phát từ thực tế đó, khóa luận tập trung nghiên cứu xây dựng một hệ thống  
Game Engine hỗ trợ xây dựng ứng dụng đồ họa và trò chơi 3D trên nhiều nền tảng  
khác nhau. Hệ thống Game Engine được xây dựng sẽ cung cấp giao diện lập trình ở  
mức cao. Khi phát triển các ứng dụng đồ họa 3D, người lập trình không cần phải quan  
tâm đến quá trình quản lý tài nguyên, cũng như xử lý đồ họa ở mức thấp bên dưới.  
Thay vào đó, họ chỉ cần tập trung vào quản lý ở mức lôgíc các thành phần của ứng  
dụng, hoặc thêm mới các thành phần dựa trên thành phần cơ sở do hệ thống cung cấp.  
Nội dung của khóa luận này tập trung nghiên cứu các vấn đề sau:  
- Môi trường phát triển hệ thống Game Engine ứng dụng đồ họa và trò chơi 3D,  
gồm nền tảng phần cứng, phần mềm, và các công nghệ đồ họa ở mức thấp (như  
OpenGL, OpenGL ES, DirectX).  
- Thiết kế và xây dựng một hệ thống đồ họa có cấu trúc và tương tác với người  
dùng.  
- Nghiên cứu và triển khai các kỹ thuật tạo hiệu ứng về ánh sáng trong khung  
cảnh 3D.  
ii  
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  
iii  
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  
iv  
BẢNG CÁC TỪ VIẾT TẮT  
Ký hiệu  
Từ tiếng Anh  
Giải thích  
CPU  
Central processing unit  
Graphics processing unit  
Đơn vị xử lý trung tâm  
Đơn vị xử lý đồ họa  
GPU  
MMORPG  
SL  
Massively multiplayer online  
role-playing game  
Trò chơi nhập vai trực tuyến  
nhiều người chơi  
Shading language  
Shadow volume  
Ngôn ngữ tạo bóng  
Vùng giới hạn bóng  
SV  
v
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  
vi  
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  
vii  
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  
viii  
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  
1
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.  
2
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.  
3
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  
nVIDIA  
Dòng card hỗ trợ  
Từ GeForce4 Ti trở lên  
ATI  
Từ Radeon 9500 trở lên  
Intel (card tích hợp)  
1.2.2. Kiến trúc tổng thể  
Từ Intel® GMA 3100 (chipset G31,Q33) trở lên  
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  
4
Do giới hạn về thời gian, nên phạm vi của luận văn này chúng tôi tập trung hoàn  
thành các 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.  
1.2.2.1. Thành phần Cấu trú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…, và 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 02 nhóm chính:  
- Các yếu tố trong không gian 3D:  
o Vector2, Vector, Vector4: các loại vector biểu diễn tọa độ 2 chiều, 3  
chiều và đồng nhất.  
o Aabb: hình hộp chữ nhật có các cạnh dọc theo các trục xyz, được mô  
tả bằng 2 điểm (xmin, ymin, zmin ), (xmax, ymax, zmax).  
5
o Sphere: hình cầu được mô tả bởi tọa độ tâm và bán kính.  
o LineSequent, Line, Ray: mô tả đoạn thẳng, đường thẳng, và tia.  
o Matrix: ma trận sử dụng để biểu diễn các phép biến đổi: dịch, xoay, co  
giãn trong không gian 3 chiều.  
o Plane: mặt phẳng được mô tả bởi phương trình ax + by + cz + d = 0.  
o 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ó.  
- Các kiểu đối tượng lưu trữ:  
o String: lưu trữ xâu kí tự.  
o Array: mảng động có thể tùy biến với hệ số mở rộng.  
o GemAllocator: thực thi cấp phát và giải phóng bộ nhớ.  
o List: Danh sách liên kết hai chiều.  
o Stack: đặc tả ngăn xếp.  
1.2.2.2. Thành phần Giao tiếp với Hệ điều hành  
Hình 4: Quá trình điều phối sự kiện  
6
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 sự kiện, đọ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 sự kiện (Hình 4).  
GEM lấy sự kiện 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 một đối tượng 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ý sự kiện này.  
1.2.2.3. Thành phần Render Engine  
Render Engine là thành phần cốt lõi của một Game Engine. Nó hỗ trợ người  
dùng 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  
các API đồ họa 3D, tạo các hiệu ứng… mà quản lý logic các đối tượng bằng các giao  
diện do Render Engine cung cấp.  
Đây là thành phần duy nhất trong GEM giao tiếp với phần cứng đồ họa thông  
qua thư viện đồ họa 3D cấp thấp, cụ thể ở đây là OpenGL và Cg.  
Hình 5: Kiến trúc phân tầng của Render Engine  
Thành phần này được thiết kế làm các mô đun sau:  
- Graphic Driver là mô đun trực tiếp sử dụng các API đồ họa 3D (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 card  
đồ họa.  
7
- Quản lý tài nguyên là mô đun quản lý các tài nguyên cần thiết để xây dựng một  
khung cảnh 3D như mạng lưới, texture 2D, cubemap… 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 nhân vật - Hoàng Tuấn Hưng.  
- Quản lý khung cảnh là mô đun thực hiện việc tổ chức và kiểm soát các đối  
tượng tồn tại trong một khung cảnh 3D, từ đó thực hiện quá trình chuyển toàn bộ  
khung cảnh đó tạo nên hình ảnh 2D tại vị trí nhìn. 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ý khung  
cảnh” - Trương Đức Phương.  
- Hiệu ứng ánh sáng và vật liệu là mô đun mở rộng các thành phần của Quản lý  
khung cảnh để tạo các hiệu ứng về ánh sáng, và vật liệu. Mô đun này được trình  
bày chi tiết ở phần sau của khóa luận này.  
- 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 được trình bày chi tiết trong khóa luận “Xây dựng Game  
Engine đa nền tảng – Mô phỏng tự nhiên” - Trần Thái Dương.  
- 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ý  
hung 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 nhân vật” - Hoàng  
Tuấn Hưng.  
1.2.2.4. Các thành phần còn lại  
Phát hiện va chạm và Tính toán vật lý là thành phần tính toán mô phỏng vật lí,  
phát hiện va chạm giữa các vật thể và phản hồi.  
Network là thành phần thực hiện việc truyền thông qua mạng TCP/IP.  
Trí thông minh nhân tạo là thành phần xử lí các công việc cần trí thông minh  
nhân tạo như dò đường, xử lí tình huống…  
Âm thanh là thành phần xử lí âm thanh.  
Các thành phần này chưa được triển khai nên chúng tôi không đề cập chi tiết  
trong tài liệu này.  
8
Chương 2: CƠ SỞ LÝ THUYẾT  
2.1. Ánh sáng trong đồ họa máy tính  
Đồ họa 3D ngoài việc sử dụng các thuật toán giống với đồ họa 2D như: đồ họa  
vectơ trong mô hình khung dây (wire frame model) và đồ họa mành (raster graphics)  
trong giai đoạn hiển thị cuối cùng. Bên cạnh đó, đồ họa 3D còn thực hiện chiếu sáng  
bằng các mô hình tạo bóng, dựa vào các thông tin về nguồn sáng và nguyên liệu cấu  
tạo nên bề mặt đối tượng, để tính toán màu sắc của đối tượng trong khung cảnh; tạo ra  
hình ảnh gần với thực tế hơn (khoảng cách xa gần giữa các đối tượng, vật liệu tạo nên  
đối tượng…).  
Hình 6: Tác động của Ánh sáng trong đồ họa 3D  
2.1.1. Các thành phần của ánh sáng  
Mỗi nguồn sáng được chia làm ba thành phần sáng cơ bản [7][12]:  
Thành phần Ambient  
Thành phần ánh sáng bao quanh vật thể, và đến từ mọi hướng. Vì thế nó không  
phụ thuộc vào vị trí của nguồn sáng mà phụ thuộc vào độ phản xạ ánh sáng của vật thể  
và màu sắc của nguồn sáng.  
9
Hình 7: Vẽ vật thể với áng sáng Ambient  
Thành phần Diffuse  
Thành phần ánh sáng đến từ một nguồn sáng cụ thể, sau đó phản xạ tại bề mặt vật  
thể theo nhiều hướng. Màu sắc của vật thể được chiếu sáng bởi thành phần này phụ  
thuộc vào vị trí, hướng, màu sắc của nguồn sáng và độ phản xạ của vật thể.  
Hình 8: Vẽ vật thể với thành phần Diffuse  
Thành phần Specular  
Thành phần ánh sáng này cũng đến từ một nguồn sáng cụ thể, nhưng khác với  
thành phần diffuse là nó phản xạ theo một hướng theo đúng định luật phản xạ gương.  
10  
Quá trình chiếu sáng ngoài phụ thuộc vào vị trí, hướng, màu sắc của nguồn sáng; độ  
phản xạ ánh sáng của vật thể, còn phụ thuộc vào hướng nhìn của mắt.  
Hình 9: Vẽ vật thể với thành phần Specular  
Ngoài ra, mỗi nguồn sáng còn có một số đặc trưng riêng, mô tả cho các loại  
nguồn sáng khác nhau, như: hướng ánh sáng, vị trí nguồn sáng, cường độ ánh sáng và  
vùng giới hạn chiếu sáng…  
2.1.2. Các mô hình tạo bóng  
Mô hình tạo bóng định nghĩa cách tính toán màu sắc dựa vào thông tin về nguồn  
sáng và đối tượng được chiếu sáng [7][12].  
Các mô hình tạo bóng khác nhau, thì triển khai tính toán các thành phần ánh sáng  
khác nhau; tạo ra các hình ảnh khác nhau với cùng một thông tin đầu vào của nguồn  
sáng và đối tượng được chiếu sáng.  
Hình 10: Kết quả của một số mô hình tạo bóng  
11  
Bên cạnh đó, việc triển khai mô hình tạo bóng dựa vào vertex hay fragment (hay  
pixel) cũng tạo ra kết quả khác nhau. Với cùng một vật thể, cùng một mô hình tạo  
bóng, nhưng mô hình này triển khai theo chương trình pixel thì cho kết quả tốt hơn.  
Các triển khai của OpenGL đều triển khai mô hình ánh sáng Phong, và thực thi trên  
chương trình vertex.  
Hình 11: Kết quả của cùng một mô hình ánh sáng trên Vertex và Pixel  
2.2. Đổ bóng  
2.2.1. Bóng của đối tượng trong khung cảnh  
Các đối tượng trong khung cảnh 3D, ngoài sự khác nhau về màu sắc của các bề  
mặt so với nguồn sáng, còn có các vùng tối mà ánh sáng không chiếu đến được. Vùng  
tối này gọi là bóng của vật thể.  
Quá trình chiếu sáng dựa vào thực thi của OpenGL không tạo ra bóng, nên quá  
trình vẽ bóng của vật thể được tính toán như một đối tượng độc lập dựa vào thông tin  
về vị trí, cấu trúc (các đỉnh, cạnh và mặt của vật thể tạo bóng).  
2.2.2. Phương pháp đổ bóng  
Có nhiều phương pháp tạo bóng khác nhau như: bản đồ độ sâu (depth map), vùng  
đổ bóng (shadow volume) …  
Đổ bóng trong GEM triển khai kĩ thuật vùng đổ bóng [1][2][6].  
Vùng đổ bóng (SV) là một model gồm:  
12  
- Mặt nhận sáng (Light Cap): tập các đa giác có pháp tuyến hướng về phía nguồn  
sáng.  
- Mặt tối (Dark Cap): tập các đa giác có pháp tuyến hướng ra xa nguồn sáng.  
- Cạnh bên (Shadow side): là mặt đa giác chứa hai đỉnh v0, v1 của cạnh nằm giữa  
mặt nhận ánh sáng và một mặt tối; và hai đỉnh này được đưa ra vô cực.  
Hình 12: Mô hình của SV  
Bóng của vật thể được xác định bằng những điểm nằm trong vùng SV. Xác định  
các điểm P này bằng cách tính số giao điểm của tia nhìn hướng đến P với các cạnh của  
vùng đổ bóng [6].  
2.3. Đối tượng có bề mặt phức tạp  
2.3.1. Đối tượng với mạng lưới nhiều đa giác  
Các đối tượng trong đồ họa máy tính 3D được xấp xỉ theo các mô hình có mạng  
lưới (mesh) gồm nhiều đa. Mức độ chi tiết của đối tượng các cao thì số lượng đa giác  
càng lớn. Điều đó đồng nghĩa với chi phí thiết kế, lưu trữ và vẽ đối tượng tăng.  
Về cơ bản, các chi tiết khác nhau chỉ được nhận thấy khi vật thể được chiếu sáng,  
do vector pháp tuyến của từng mặt đa giác khác nhau.  
2.3.2. Kỹ thuật sử dụng bản đồ vector pháp tuyến  
Quá trình chiếu sáng bề mặt vật thể dựa vào bản đồ vector pháp tuyến được lưu  
trong một ảnh bitmap, hay còn gọi là kỹ thuật bump [7][10]. Kỹ thuật này cho phép  
tạo ra:  
13  
- Bề mặt phức tạp mà không cần nhiều đa giác tạo nên vật thể dựa vào hiệu ứng  
phản xạ của ánh sáng.  
- Áp dụng nhiều loại bề mặt cho cùng một mô hình mà không phải thiết kế  
nhiều mô hình khác nhau  
Hình 13: So sánh giữa sử dụng bản đồ pháp tuyến và thiết kế mô hình  
Mỗi vector pháp tuyến ứng với một pixel trong ảnh bitmap. Vector pháp tuyến là  
vector ba chiều <x,y,z> và khoảng giá trị của mỗi thành phần nằm trong khoảng [-1,1].  
Trong khi đó, mỗi pixel trên ảnh bitmap là một bộ gồm ba thành phần <r, g, b> và  
khoảng giá trị của các thành phần trong khoảng [0, 1]. Vì vậy, cần phải chuyển đổi qua  
lại giữa các giá trị trong hai khoảng trên [7]:  
- Công thức chuyển đổi từ vector pháp tuyến sang màu của pixel  
colorComponent = 0.5 * normalComponent + 0.5  
- Công thức chuyển đổi ngược lại  
normalComponent = 2 * (colorComponent - 0.5)  
2.3.3. Không gian Texture  
Để triển khai kỹ thuật bump, bản đồ pháp tuyến thường được tạo ra và lưu theo  
dạng bản đồ độ cao (height map) – pháp tuyến tại một điểm được tính thông qua độ  
cao của các đỉnh xung quanh và bản đồ này được lưu trong không gian Texture [7].  
14  
Do đó, cần phải chuyển đổi qua lại từ không gian Texture và không gian World  
[9]. Ma trận chuyển đổi TBN được định nghĩa như sau:  
Tx Ty Tz  
TBN = Bx By Bz  
Nx Ny Nz  
Với T = (Tx Ty Tz) là thành phần tiếp tuyến, B = (Bx By Bz) là thành phần phó pháp  
tuyến, N = (Nx Ny Nz) là thành phần pháp tuyến.  
15  
Chương 3: MÔ HÌNH ĐỀ XUẤT  
3.1. Các yêu cầu chung của mô đun  
Các thành phần của mô đun được thiết kế để đảm bảo:  
- Các nút được tổ chức và quản lý theo dạng cây của đồ thị khung cảnh 3D  
scenegraph, tức là các nút này được quản lý bởi mô đun Quản lý khung cảnh.  
- Toàn bộ tài nguyên gồm dữ liệu về vật liệu, mạng lưới đa giác và các chương  
trình tạo bóng bằng ngôn ngữ Cg được quản lý bởi mô đun Quản lý tài  
nguyên.  
- Các hiệu ứng về ánh sáng được triển khai bằng ngôn ngữ tạo bóng Cg, được  
lưu vào file với phần mở rộng .cgfx .cgh. Các nút xử lý cùng một hiệu ứng  
thì được gắn với một triển khai này (tham chiếu đến định danh của hiệu ứng).  
Các chương trình tạo bóng này được biên dịch trong thời điểm thực thi  
(runtime) nhờ các API của thư viện Cg (Cg lib).  
Hình 14: Mô hình liên kết với các thành phần khác bên ngoài  
Bên cạnh đó, mô đun này còn xây dựng một hệ thống chiếu sáng có cơ chế hoạt  
động giống với cơ chế chiếu sáng của OpenGL cung cấp, nhưng có tính khả chuyển  
cao giữa các mô hình tạo bóng.  
16  
3.2. Các thành phần trong mô đun  
Hình 15: Các thành phần của mô đun Hiệu ứng ánh sáng và vật liệu  
Để đảm bảo các yêu cầu đặt ra, mô đun chia các thành phần thành ba nhóm cơ  
bản:  
- Nhóm thứ nhất bao gồm các thành phần đóng vai trò là các nút trong cây đồ  
thị khung cảnh scenegraph như các lớp LightSceneNode, DLightSceneNode,  
BumpSceneNode, và SolidSceneNode được dẫn xuất từ lớp SceneNode; và  
lớp Shadow. Đây là các lớp định nghĩa đối tượng trong khung cảnh 3D.  
Trong đó, lớp LightSceneNode và DLightSceneNode là các đối tượng trừu  
tượng, có nhiệm vụ lưu thông tin về nguồn sáng. Các lớp còn lại là các đối  
tượng được hiển thị trực quan trên màn hình.  
- Nhóm thứ hai gồm các lớp dẫn xuất từ lớp Parameter: ShadowParameter,  
DLightParameter, và BumpParameter. Các lớp này lưu thông tin cần thiết  
tương ứng với các thông tin lưu trong các nút, phục vụ cho quá trình cập nhật  
tham số cho chương trình tạo bóng trong thời điểm thực thi.  
17  
- Nhóm thứ ba gồm các lớp dẫn xuất từ lớp Effect: DLightEffect,  
ShadowEffect, và BumpEffect. Đây là các lớp gắn với một triển khai hiệu  
ứng trên ngôn ngữ Cg, và chứa các điều khiển cập nhật thông tin cho chương  
trình tạo bóng này.  
Chi tiết cài đặt chức năng của các lớp này được trình bày ở chương sau.  
18  
Chương 4: THIẾT KẾ CHI TIẾT  
4.1. Chiếu sáng  
Quá trình chiếu sáng trong đồ họa máy tính được thực hiện giống với quá trình  
hoạt động của đèn ở thế giới thực. Các bước thực hiện như sau (Hình 16):  
- Bật nguồn sáng: thiết lập các thông số về nguồn sáng như vị trí, hướng, vùng  
chiếu sáng và thuộc tính của các thành phần sáng.  
- Vẽ các đối tượng: Mỗi đối tượng được gắn với một Render Context (Xem  
Mô đun Quản lý Khung cảnh) và chỉ những đối tượng nào đăng ký được  
chiếu sáng thì mới được chiếu sáng.  
- Tắt nguồn sáng: hủy bỏ các thông số đã thiết lập cho từng nguồn sáng.  
Hình 16: Quá trình Chiếu sáng  
Nguồn sáng ở trong GEM là một đối tượng trừu tượng - chỉ lưu thông tin mà  
không hiển thị trực quan trong khung cảnh 3D; tuy nhiên, nó lại được quản lý như một  
nút trong cây khung cảnh scenegraph.  
4.1.1. Vật liệu  
Vật liệu định nghĩa tính chất phản xạ ánh sáng của bề mặt vật thể, bao gồm các  
thành phần cấu thành sau: illum mô tả mô hình tạo bóng được sử dụng; Ka, Kd, Ks lần  
19  
lượt mô tả các tính chất phản xạ các thành phần ánh sáng đã nêu ở chương trước của  
bề mặt; và Ni mô tả độ bóng của bề mặt khi tính độ phản xạ specular.  
Hình 17: Lớp Material  
Các tính chất vật liệu này được thiết kế trước cho từng mạng lưới của mô hình  
vật thể và được tải vào thông qua phương thức loadFromMtl() (Xem chi tiết ở Mô đun  
Quản lý tài nguyên). Trong quá trình vẽ đối tượng, vật liệu được thiết lập trước.  
4.1.2. Chiếu sáng bằng mô hình OpenGL cung cấp  
OpenGL cung cấp các API để định nghĩa nguồn sáng, thiết lập thông số về vật  
liệu cho các đối tượng được chiếu sáng bởi nguồn sáng.  
Hình 18: Lớp LightSceneNode  
Mỗi nguồn sáng cũng được coi là một nút, tức là lớp LightSceneNode dẫn xuất  
từ lớp SceneNode. Ngoài những thông tin được lưu ở SceneNode, lớp  
LightSceneNode lưu thông tin về Loại nguồn sáng (type), hướng (direction), cường độ  
các thành phần ánh sáng (Ka, Kd, Ks), góc giới hạn vùng chiếu sáng (outerCone), và  
sự thay đổi cường độ sáng theo khoảng cách (kC, kL, kQ). Phương thức render() được  
lớp LightSceneNode triển khai quá trình “bật” nguồn sáng bằng các câu lệnh OpenGL.  
Như đã giới thiệu, ngoài ba thành phần sáng cơ bản, nguồn sáng còn có những  
tính chất riêng đặc tả sự khác nhau giữa các nguồn sáng. Dựa vào các tính chất này,  
GEM chia các nguồn sáng được chia làm 04 loại sau:  
20  

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

pdf 51 trang yennguyen 29/06/2025 90
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 - Hiệu ứng ánh sáng và vật liệu", để 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_hieu_ung_anh_sang.pdf