Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 46 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
46
Dung lượng
1,46 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trương Đức Phương XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG QUẢN LÝ KHUNG CẢNH 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trương Đức Phương XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG QUẢN LÝ KHUNG CẢNH KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Cơng nghệ thơng tin Cán hướng dẫn: TS Nguyễn Việt Hà Cán đồng hướng dẫn : ThS Vũ Quang Dũng HÀ NỘI - 2009 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lời cảm ơn Tôi xin chân thành cảm ơn Tiến sĩ Nguyễn Việt Hà, Thạc sĩ Vũ Quang Dũng người trực tiếp, nhiệt tình hướng dẫn tơi hồn thành khóa luận tốt nghiệp Tơi xin gửi lời cảm ơn phịng thí nghiệm Toshiba-Coltech tạo mơi trường làm việc để nhóm chúng tơi tập trung nghiên cứu Tơi xin gửi lời cảm ơn tới tồn thể thầy giáo, cô giáo Trường Đại học Công Nghệ - Đai học Quốc gia Hà Nội người hết lịng dạy cho tơi kiến thức bổ ích năm học qua Xin cảm ơn gia đình người bạn dành cho tơi tình thương u hỗ trợ tốt Hà nội, ngày 22 tháng 05 năm 2009 Sinh viên Trương Đức Phương LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Tóm tắt nội dung Khái niệm Game Engine xuất thập kỉ 90 ngày trở thành thành phần quan trọng quy trình phát triển trò chơi điện tử Sự đời phát triển Game Engine mang đến cho game đại bước tiến nhảy vọt mặt : đồ họa, khả tương tác, độ chân thực… Khóa luận đề cập đến phương pháp triển khai module “Quản lý khung cảnh” dự án “Xây dựng Game Engine đa tảng” Cụ thể, chương chương mang đến cho người đọc nhìn tổng thể kiến trúc hệ thống Game Engine Sau đó, chương trình bày chi tiết module “Quản lý khung cảnh”, sâu vào cách tổ chức khung cảnh giai đoạn trình render khung cảnh Cuối thông tin kiểm thử thực nghiệm hiệu kỹ thuật triển khai hướng phát triển tương lai LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mục lục Tóm tắt nội dung Bảng thuật ngữ Danh mục hình vẽ Chương Đặt vấn đề 1.1 Bối cảnh nghiên cứu 1.2 Mục tiêu 1.3 Giới thiệu chung Chương Kiến trúc tổng thể .4 2.1 Thành phần Các kiểu liệu 2.2 Thành phần Giao tiếp với hệ điều hành 2.3 Thành phần Render Engine 2.4 Các thành phần lại 10 Chương Quản lý khung cảnh 11 3.1 Khái niệm khung cảnh cách tổ chức khung cảnh 11 3.2 Thiết kế cấu trúc 13 3.3 Thiết kế chức 21 Chương Tổng kết 34 4.1 Kết 34 4.2 Hướng phát triển 37 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Bảng thuật ngữ Thuật ngữ Axis aligned bounding box Ý nghĩa Là loại bounding volume có dạng hình hộp, cạnh dọc theo trục xyz Bounding Sphere Là loại bounding volume có dạng hình cầu Bounding Volume Là danh từ chung loại hình học đơn giản sử dụng để mơ tả khơng gian bao bọc hồn tồn vật thể Event Đơn vị truyền thơng liên tiến trình gửi đến Hệ điều hành Game Engine Middleware cung cấp giao diện đơn giản để phát triển game Mesh Là mạng lưới đa giác dùng để mơ tả hình dạng vật thể không gian chiều OpenGL Một chuẩn 3d graphic API Render Là việc từ liệu khung cảnh, đối tượng 3D, ta thực phép biến đổi, tính tốn để đưa hình ảnh 2D thu vị trí nhìn ( giống trình mắt người hay camera thu hình ảnh 2D từ mơi trường ) Texture Là một loạt ảnh dùng để tăng độ chi tiết cho đối tượng View Frustum Hình chóp cụt xác định khung nhìn camera LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Danh mục hình vẽ Hình 1: Kiến trúc phân tầng GEM Hình 2: Kiến trúc tổng thể Hình 3: Biểu đồ lớp thành phần Các kiểu liệu .5 Hình 4: Quá trình điều phối event Hình 5: Kiến trúc phân tầng Render Engine Hình 6: Biểu đồ gói Render Engine Hình 7: Axis Aligned Bounding Box Bounding Sphere GEM 12 Hình 8: Ví dụ khung cảnh BHVs tương ứng 12 Hình 9: Biều đồ lớp module Quản lý khung cảnh 13 Hình 10: Lớp SceneNode .14 Hình 11: Lớp SolidMeshSceneNode 16 Hình 12: Hình ảnh Bàn cờ quân cờ dùng SolidMeshNode 17 Hình 13: Lớp CameraSceneNode 18 Hình 14: Lớp SkyboxSceneNode 19 Hình 15: Skybox 20 Hình 16: Lớp SceneGraphManager 20 Hình 17: Lớp RenderList RenderContext 21 Hình 18: Biều đồ hoạt động giai đoạn prepare-render 23 Hình 19: Biều đồ hoạt động giai đoạn Tính lại BVHs 25 Hình 20: Ví dụ minh họa khung hình 27 Hình 21: Biều đồ hoạt động giai đoạn view frustum culling 28 Hình 22: Ví dụ Bounding Sphere có d > R 29 Hình 23: Biều đồ hoạt động giai đoạn render render-list 32 Hình 24: Ví dụ minh họa vật thể bị chắn hoàn toàn .33 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Chương Đặt vấn đề 1.1 Bối cảnh nghiên cứu Ngành công nghiệp phát triển game giới phát triển vũ bão Cách 20 năm, game đơn giản cần người nhóm nhỏ người phát triển ngày nay, game đại với đồ họa khả tương tác ấn tượng thường phát triển đội ngũ đông đảo người thiết kế game, lập trình viên, nghệ sĩ… thời gian rịng rã từ đến ba năm Chính việc game ngày trở nên phức tạp nên nay, game thương mại khơng cịn phát triển từ ngun thủy mà phát triển lên từ game engine Game engine hỗ trợ việc xây dựng game cách nhanh chóng, đơn giản đồng thời cung cấp khả tái sử dụng code cao phát triển nhiều game từ game engine Ở Việt Nam, Game online thực thâm nhập vào thị trường cách năm khoảng thời gian ỏi đó, có số lượng nhà phát hành game lên tới số hàng chục, số game phát hành tương ứng với số lượng Nhưng theo chúng tơi biết, gần tất game online phát hành Việt Nam nhập từ nước ngoài, chủ yếu Trung Quốc Hàn Quốc ( trừ số game nhỏ chơi web đánh bài, đánh cờ ) Một câu hỏi mà có lẽ tất người chơi game trăn trở “bao chơi game Việt Nam?” Chúng chọn đề tài làm khóa luận tốt nghiệp khơng phải với tham vọng lớn, muốn bước chân chập chững vào giới phát triển game rộng lớn, để thu lượm kiến thức lĩnh vực khó khăn đầy thú vị hi vọng tương lai không xa, góp phần sức lực giái đáp trăn trở cộng đồng người chơi game Việt Nam 1.2 Mục tiêu Xây dựng Game Engine đa chạy nhiều hệ điều hành khác nhau, hướng đến phân khúc phát triên game nhập vai trực tuyến (MMORPG) Game Engine đặt tên GEM Đây mục tiêu dài hạn, tại, thời gian làm luận văn khoảng tháng nên nhóm chúng tơi tập trung hồn thiện thành phần Render Engine Game Engine ( Xem chi tiết chương 2) LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 1.3 Giới thiệu chung Như giới thiệu trên, Game Engine lớp trung gian game tảng bên dưới, thư viện lập trình cấp thấp GEM game engine nên dĩ nhiên tuân thủ theo nguyên tắc Hình 1: Kiến trúc phân tầng GEM Đặt điểm GEM khả chạy đa nền.Để đặt điều đó, GEM sử dụng build tảng khác ( sử dụng thông dịch ) Các đoạn code phụ thuộc tảng phân chia việc sử dụng cờ tiền biên dịch, hạn chế tối đa việc sử dụng lớp abstract – việc làm giảm hiệu suất chương trình đáng kể [1] Cũng lí đo chạy đa nên lựa chọn openGL làm giao diện lập trình đồ họa 3D cấp thấp cho GEM, chuẩn openGL chuẩn mở không bị phụ thuộc vào hệ điều hành GEM thiết kế hướng đối tượng yêu cầu hiệu chạy cao nên sử dụng ngôn ngữ C++ - ngơn ngữ đáp ứng hồn hảo điều kiện Đa số Game Engine giới phát triển ngôn ngữ C++ Chúng thiết kế GEM nhắm đến phân khúc phát triển game nhập vai trực tuyến, nên khả tương thích với phạm vi rộng cấu hình phần cứng điều kiện quan trọng, dự kiến support card đồ họa hỗ trợ openGL 1.4 shader 1.0 trở lên LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Bảng cấu hình tối thiểu dự kiến : 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com volume q trình Tính lại BVHs ( xem chi tiết phần b chương ) 3.3.2 Tính lại BVHs Hình 19: Biều đồ hoạt động giai đoạn Tính lại BVHs Q trình tính lại BVHs sau : duyệt Scene Graph theo thứ tự sau ( phải có tree bounding volume node tính tree bounding volume node cha ) : - Tại node, kiểm tra cờ UPDATE_TREE_BOUNDING_VOLUME Cờ bật node bị biến đổi không gian thêm bớt node ( so với khung hình trước ) - Nếu cờ bật, tính lại tree bounding volume node theo công thức : tree BV = tổng ( tree BV tất node ) + BV node 25 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 3.3.3 Tính lại ma trận biến đổi Camera tính khung nhìn a.Các ma trận biến đổi camera Camera đối tượng mô mắt người Scene Graph Tức thu hình ảnh vị trí đặt camera Camera lưu trữ tính tốn ma trận biến đổi view matrix project matrix : + View matrix : ma trận biến đổi không gian giới sang khơng gian nhìn + Project matrix : ma trận biến đổi từ khơng gian nhìn sang khơng gian chiếu b.Q trình tính lại view matrix project matrix Trước tiên, ta kiểm tra cờ trạng thái active camera để xác định xem có cần tính lại ma trận biến đổi hay không : + Nếu cờ UPDATE_VIEW_MATRIX PARENT_MATRIX_CHANGE bật : tính lại view matrix từ vị trí đặt, vector up hướng nhìn camera + Nếu cờ UPDATE_PROJECTION_MATRIX bật : tính lại projection matrix từ thuộc tính m_Near,m_Far, m_Bottom, m_Top, m_Right, m_Left camera ( Xem lại lớp Camera 4.2.1.d.Các loại node ) c.Tính khung nhìn Khái niệm khung nhìn : khơng gian mà đối tượng nằm ( phần nằm ) nhìn thấy camera Ở camera hoạt động theo phép chiếu phối cảnh nên khung nhìn hình chop cụt mặt phẳng ghép lại : near, far, top, bottom, right, left 26 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Hình 20: Ví dụ minh họa khung hình Chúng tơi sử dụng phương pháp tính mặt phẳng tạo nên khung nhìn từ view matrix projection matrix theo [2] 3.3.4 View frustum culling a Khái niệm view frustum culling Ta biết vật thể nằm ( phần nằm ) khung nhìn nhìn thấy Như vậy, xác định node nằm bên view frustum, ta loại khỏi q trình render Để đơn giản hóa việc kiểm tra xem node có nằm ngồi khung nhìn hay khơng, ta sử dụng Bounding Volume để kiểm tra ( Bounding Volume có hình dạng đơn giản nhiều so với thân vật thể) View frustum culling việc phát node nằm bên frustum đựa vào BVHs loại chúng khỏi trình render 27 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com b Quá trình thực view frustum culling Hình 21: Biều đồ hoạt động giai đoạn view frustum culling Thực view frustum culling sau : Duyệt khung cảnh theo chiều sâu - Tại node, kiểm tra vị trí tree bounding sphere so với khung nhìn ( tree bounding sphere hai loại tree BV SceneNode ) : + Nếu nằm : toàn nhánh với gốc node nằm khung nhìn, khơng cần duyệt node thuộc nhánh + Nếu nằm : toàn nhánh với gốc node nằm ngồi khung nhìn, toàn node nhánh nằm bị bật cờ trạng thái FRUSTUM_CULLED ( đánh dấu bị cắt ) không cần duyệt đến node thuộc nhánh + Nếu giao : kiểm tra vị trí tree bounding box so với khung nhìn ( bounding box bó sát vật thể nhiều so với bounding sphere ) 28 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com # Nằm : toàn nhánh với gốc node nằm khung nhìn, khơng cần duyệt node thuộc nhánh # Nằm : toàn nhánh với gốc node nằm ngồi khung nhìn, tồn node nhánh nằm bị bật cờ trạng thái FRUSTUM_CULLED ( đánh dấu bị cắt ) không cần duyệt đến node thuộc nhánh # Giao : khơng kết luận gì, đến node c Thuật toán kiểm tra vị trí bounding sphere so với khung nhìn Để kiểm tra ví trị bounding sphere so với frustum, ta thực sau : Với mặt phẳng Frustum : + Tính khoảng cách d từ tâm đến mặt phẳng + Nếu d < -R Kết luận: bounding sphere nằm bên frustum + Nếu R > d > -R Kết luận: bounding sphere giao với frustum Ngược lại, kết luận bounding sphere nằm bên Frustum ( R bán kính bounding sphere ) Hình 22: Ví dụ Bounding Sphere có d > R 29 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com d Thuật tốn kiểm tra vị trí bounding box với khung nhìn Thuật tốn để kiểm tra ví trí bounding box với frustum kiểm tra vị trí đỉnh bounding box so với khung nhìn : - Nếu tất đỉnh nằm kết luận bounding box nằm - Nếu tất đỉnh nằm ngồi kết luận bounding box nằm ngồi - Các trường hợp cịn lại kết luận bounding box giao với khung nhìn Có nhiều tối ưu cho thuật tốn chúng tơi triển khai tối ưu [3] 3.3.5 Render render-list a Khái niệm render-list Một render-list tập hợp Scene Node có chung trạng thái render Các trạng thái render trạng thái openGL số trạng thái khác GEM Việc tập trung Scene Node thành render list hạn chế tối đa việc chuyển trạng thái render, giúp tăng hiệu suất hệ thống Một Scene Node lúc nhiều render-list b Các render list GEM Trong GEM có 16 render list sau : - ERL_SKY_BOX : Render list đặc biệt dành cho SkyboxSceneNode, loại node phải đặt số trạng thái render đặc biệt - ERL_LIGHT : Render list đặc biệt dành cho nguồn chiếu sáng (LightSceneNode DLightSceneNode ) - ERL_SOLID : Render list mặc định dành cho loại node có dạng đặc ( khơng nhìn xun qua ) - ERL_TRANLUCENT : Render list mặc định dành cho loại node có dạng suốt ( hình xuyên qua ) 30 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com - ERL_USER_DEFINE0 -> : 10 Render list dành sẵn cho người sử dụng tùy biến - ERL_SHADOW_VOLUME : Render list đặc biệt dành để render bóng vật thể - ERL_OCCLUSION_TEST : Render list dùng trình occlusion culling c Biểu đồ hoạt động 31 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Hình 23: Biều đồ hoạt động giai đoạn render render-list Quá trình render render list sau : - Bước 1: Đi đến list 32 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com - Bước : bật trạng thái render cần thiết lưu render context list ( gọi hàm pushState() RenderContext ) - Bước 3: Sắp xếp list theo khoảng cách đến camera theo thứ tự từ xa đến gần ngược lại ( render context có trạng thái yêu cầu xếp node ) - Bước : Loại bỏ node có cờ FRUSTUM_CULLED bật ( node nằm ngồi khung nhìn ) - Bước : Kiểm tra xem list có thực occlusion culling hay không : + Nếu không : render tồn node list + Nếu có : thực thuật toán occlusion culling/ + Bước : Phục hồi toàn trạng thái render bật bước ( gọi hàm popState() RenderContext ) e.Occlusion culling Occlusion culling việc phát vật thể bị chắn hoàn toàn vật thể khác loại chúng khỏi trinh render Hình 24: Ví dụ minh họa vật thể bị chắn hồn tồn Chúng tơi triển khai thuật tốn occlusion culling trình bày [4] 33 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Chương Tổng kết 4.1 Kết Chúng xây dựng module quản lý khung cảnh hoạt động cách hiệu xác Cụ thể chung thu kết thực thi giai đoạn trình render khung cảnh sau : Cấu hình máy thử nghiệm : CPU : T7100 (1.8GHz x 2) RAM : GB Card đồ họa : NVIDIA GeForce 8400M GS OS : Window Vista Home Premium Bảng đánh giá thời gian thực thi giai đoạn prepare-render : Số lượng SceneNode 1000 Trường hợp Thời gian thực thi preparerender ( millisecond) Tất node đứng yên không biến đổi (TH1) ~0.4 Tất node biến đổi : dịch chuyển, xoay, co giãn ( TH2) ~1.4 TH1 ~0.5 TH2 ~2.2 TH1 ~2.2 TH2 ~8.3 2000 10000 34 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Bảng đánh giá thời gian thực thi giai đoạn Tính lại BVHs Số lượng SceneNode Trường hợp Thời gian thực thi Tính lại BVHs ( millisecond) TH1 ~0.0 TH2 ~0.4 TH1 ~0.0 TH2 ~0.7 TH1 ~0.0 TH2 ~4.2 1000 2000 10000 Thời gian thực thi giai đoạn Tính lại ma trận biến đổi Camera tính khung nhìn gần cố định ln ln có active camera, thời gian nhỏ ~0ms Bảng đánh giá thời gian thực thi giai đoạn View frustum culling : Số lượng SceneNode Thời gian thực thi View frustum culling ( millisecond) Trường hợp Tất node root ( nên chúng độc lập với ) ~0.5 ( TH1vfc) - Node thứ 10*n root 1000 - Node thứ 10*n+1 node 10*n ~0.4 n >= ( TH2vfc ) TH1vfc ~0.8 TH2vfc ~0.5 2000 35 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com TH1vfc ~1.4 TH2vfc ~0.9 10000 Thời gian thực thi giai đoạn Render render-list phụ thuộc chủ yếu vào thời gian render loại node nên không đưa đánh giá Hình ảnh khung cảnh nhà : Hình 25: Khung cảnh nhà render GEM 36 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 4.2 Hướng phát triển Như nêu phần trên, sử dụng 16 render-list tập trung node có chung trạng thái render, hạn chế tối đa việc chuyển trạng thái Việc làm giúp tăng hiệu suất lại làm giảm tính mềm dẻo hệ thống Một hướng phát triển tìm kiếm phương pháp đặt hiệu suất tương đương mang lại cho người sử dụng nhiều tự Ngoài ra, vấn đề nghiên cứu khác việc sử dụng thêm cấu trúc phân chia không gian (spatial partitioning) oct-tree hay quad-tree, cấu trúc giúp tăng tốc trình view-frustum-culling cho đối tượng tĩnh Còn hệ thống Game Engine, nhiều thành phần : âm thanh, kết nối mạng, tính tốn vật lí… cần triển khai để trở thành hệ thống hoàn chỉnh đáp ứng yêu cầu người phát triển game 37 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ lục Bảng kí hiệu UML Kí hiệu Tên Ý nghĩa Activity Thể hành động Aggregation Thể quan hệ kết tập Choice Điểm rẽ nhánh có điều kiện Class Thể lớp Composition Thể quan hệ hợp thành Control Flow Thể luồng điều khiển Dependency Thể quan hệ phụ thuộc Final state Điểm kết thúc Genaralization Thể quan hệ tổng quát hóa Initial state Điểm bắt đầu Class Thể lớp Package Thể gói LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Tài liệu tham khảo Tiếng Anh : [1] Karel Driesen and Urs Hölzle, The Direct Cost of Virtual Function Calls in C++, 1995 ACM [2] Gribb, Hartmann , Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix, June 2001 [3] Ulf Assarsson and Tomas Măoller, Optimized View Frustum Culling Algorithms for Bounding Boxes, February 2000 [4] Dean Sekulic, Croteam Chapter 29.”Efficient Occlusion Culling” in GPU Gems, Addison-Wesley Professional (April 1, 2004) LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... ? ?Quản lý khung cảnh? ?? dự án ? ?Xây dựng Game Engine đa tảng? ?? Cụ thể, chương chương mang đến cho người đọc nhìn tổng thể kiến trúc hệ thống Game Engine Sau đó, chương trình bày chi tiết module ? ?Quản. .. Quản lý tài nguyên module quản lý tài nguyên cần thiết để xây dựng khung cảnh 3D mesh, animated mesh, texture 2D, cubemap…Module bạn Hồng Tuấn Hưng trình bày khóa luận ? ?Xây dựng Game Engine đa. ..ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trương Đức Phương XÂY DỰNG GAME ENGINE ĐA NỀN TẢNG QUẢN LÝ KHUNG CẢNH KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Cơng nghệ thơng tin