1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu và xây dựng thử nghiệm với 3d engine

104 702 3
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên cứu và xây dựng thử nghiệm với 3d engine
Trường học Trường Trung Học Phổ Thông Kỹ Thuật Việt Trì
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đề tài thực tập
Năm xuất bản 2008
Thành phố Việt Trì
Định dạng
Số trang 104
Dung lượng 4,95 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nghiên cứu và xây dựng thử nghiệm với 3d engine

Trang 1

TÀI LIỆU THAM KHẢO

 directX 9.0 sdk Update Summer 2004, Microsoft, 2004.

 Jake Simpsom Game Engines Anatomy 101, April 12,

2002.

 Bendik Stang, Game Engines, IMMDTU, 2003.

 David H Rberrly, 3D Game Engine Design, Morrgan

Trang 2

 Evan Phipho, Focus on 3D Models, Premier Press Fame Development, 2003.

 Jim Adams, Programming Role Playing Game With DirextX Premier Press Game Development, 2002.

 maco monster, Doom3 Models, September, 2004.

Trang 3

CH ƯƠNG I: GIỚI THIỆU VỀ NƠI THỰC TẬP

Trường trung học phổ thông Kỹ Thuật Việt Trì được thành lập ngày 03/7/2003 Là một trường nằm trong hệ thống các trường trung học phổ thông công lập tỉnh Phú Thọ Những ngày thành lập trường mới có 18 cán bộ giáo viên công nhân viên với 180 học sinh, sau gần 4 năm đội ngũ cán bộ giáo viên công nhân viên của nhà trường đã phát triển mạnh mẽ về số lượng và chất lượng, năm 2007-2008 trường có 44 cán hộ giáo viên công nhân viên với gần

500 học sinh

Qua hai năm học 2006-2007, 2007-2008, trường có 12 lớp ( bao gồm 04 lớp khối 10, 04 lớp khối 11, 04 lớp khối 12) Tuy có nhiều khó khăn nhưng nhà trường đã tổ chức tốt việc dạy và học Kết quả có 12 học sinh giỏi cấp tỉnh các môn: ngữ văn, hoá học, vật

lý lịch sử, Tin học.

Được sự quan tâm của tỉnh uỷ hội đồng nhân dân tỉnh ,UBND tỉnh Phú Thọ của sở Giáo Dục Đào Tạo trường được cấp vốn xây dựng đợt một, dự kiến học kỳ hai năm học 2008-2009 sẽ có một ngôi trường công lập với quy mô 30 lớp hiện đại khang trang nhất trong cả nước tại thôn Thậm Thình xã Vân Phú Thực hiện chương trình thí đua thay đổi nội dung, phương pháp giảng dạy tiên tiến của khối trung học phổ thông Đáp ứng nhu cầu học tập ngày càng cao của học sinh khu vực phía bắc thành phố Việt Trì và các xã lân cận thuộc huyện Phù Ninh, Lâm Thao

Là một trường vừa dạy chương trình văn hoá phổ thông vừa dạy nghề với mục đích học sinh ra trường vừa có bằng trung học phổ thông hệ chính quy vừa có bằng tay nghề bậc 2/7 vì thế chương trình dạy nghề rất nhiều mà công nghệ thông tin là một trong những nghề được học sinh yêu thích và đăng ký nhiều nhất

Chương trình đào tạo nghề như sau:

lớp 10: 4 tiết /1 tuần.

lớp 11: 8 tiết /1 tuần.

Lớp 12: 5,5 tiết/1 tuần.

Trang 4

Vì sau khi ra trường học sinh chỉ nhận bằng tay nghề bậc 2/7, trong khi đó các công ty, các cơ sở tuyển dụng yêu cầu với tay nghề bậc 3/7 vì thế, nhà trường đã liên kết với các trường và trung tâm dạy nghề Đào tạo tiếp các em có nhu cầu sau khi tốt nghiệp cần học thêm để lấy tay nghề cao hơn phục vụ cho công việc sau này.

Trang 5

CHƯƠNG II: GIỚI THIỆU VỀ ĐỀ TÀI THỰC TẬP

2.1 Lý do chọn đề tài: “nghiên cứu và xây dựng thử

nghiệm với 3d engine”

Ngày nay, các sản phẩm giải trí mà đặc biệt là game đã mang lại một nguồn lợi nhuận to lớn cho ngành công nghiệp máy tính Do nhu cầu của thị trường tăng nhanh, các game ngày càng có chất lượng cao và thời gian xây dựng ngày càng được rút ngắn Các game 3d trên thị trường hiện nay rất đa dạng về nội dung và chủng loại nhưng cùng có điểm chung là xây dựng trên các game engine Chất lượng của game sẽ phụ thuộc vào chất lượng của game engine

mà nó sử dụng.

Game engine chính là phần cốt lõi để xây dựng game hiện nay

và 3d engine chính là phần quan trọng nhất của game engine Việc

sử dụng game engine để xây sựng game là một xu thế tất yếu để có những game chất lượng cao trong thời gian ngắn Tiếc thay Hiện nay ở nước ta việc xây dựng game 3d cũng như game engine vẫn còn là điều mới mẻ Chính vì vậy, em thực hiện đề tài “ nghiên cứu

và xây dựng thử nghiệm 3d engine” với mong muốn góp vào những viên gạch đầu tiên để xây dựng nên ngành công nghiệp game của nước nhà trong tương lai.

Thực hiện đề tài này em muốn giới thiệu với các thầy cô giáo trong trường trung học phổ thông kỹ thuật việt trì, cũng như các em học sinh một công nghệ làm game 3d mới Em hi vọng rằng sau khi xem song đề tài này những em học sinh trong trường sẽ có một cách nhìn khác về lập trình game và biết đâu trong số những học sinh đó

sẽ trở thành lập trình game chuyên nghiệp trong tương lai, đưa game việt nam có một vị trí tương đối trong làng game thế giới.

2.2 L ịch sử phát triển game engine

Game engine', thuật ngữ đã trở nên quá quen thuộc đối với những người mê game trong những năm gần đây, là một thành phần tối quan trọng không thể thiếu trong việc phát triển trò chơi ngày nay.

Với cấu trúc cồng kềnh và ngày càng trở nên tinh vi của các

Trang 6

trò chơi, nếu không có sự hỗ trợ của game engine, các nhà phát triển lẫn phát hành thường sẽ phải đối mặt với những thử thách nguy hiểm: thời gian phát triển game kéo dài, chi phí tăng vọt, chưa kể các rắc rối phát sinh Một ví dụ đơn cử: khi gas powered games thực hiện dungeon siege (ra mắt năm 2002), họ không có trong tay một game engine nào cả và để thực hiện được trò chơi này, mọi thứ (kể

cả việc xây dựng engine cho game) phải làm từ đầu, kết quả là hãng phát triển game của chris taylor phải mất ròng rã ba năm để hoàn tất trò chơi Trong khi đó, firaxis chỉ cần thuê engine gamebryo và họ tốn chưa tới hai năm để hoàn thành sid meier’s pirates.

Theo từ điển bách khoa toàn thư wikipedia, game engine là một bộ công cụ phần mềm, tập hợp của nhiều yếu tố như: cơ chế dựng hình (2d hoặc 3d), hệ thống vật lý, ai, âm thanh Cho phép trò chơi chạy trên nhiều nền tảng khác nhau, với việc sử dụng được đơn

Vào đầu thập niên 90 (và trước đó nữa), việc thực hiện trò chơi rất

dễ dàng, mau chóng bởi yêu cầu về hình họa và lối chơi vô cùng giản đơn Cũng chính vì quá đơn giản, nên phần lớn những nhà phát triển game thời bấy giờ chưa có được một khái niệm hay định hình

về “game engine” Tại sao phải phức tạp hóa một dự án game vốn chỉ cần vài người đảm trách cùng lúc nhiều vai trò khác nhau? Trò chơi nhập vai lừng danh một thuở của interplay, stonekeep, là điển hình của sự tư duy kiểu cũ này Theo dự tính, game chỉ cần 9 tháng

là hoàn thành, với ngân quỹ vào khoảng 50.000 usd và chỉ mất có Hai người để thực hiện.

Tuy nhiên, không ai ngờ tới khi công nghệ máy tính đột ngột chuyển mình mạnh mẽ trong giai đoạn 1992-1995, thị hiếu thị trường cũng thay đổi theo và điều tất yếu là sự phức tạp trong việc phát triển trò chơi tăng nhanh khó đoán Stonekeep, một “nạn nhân” của việc không phòng bị trước – chỉ có độc mỗi engine đồ họa thô

sơ, đã phải loay hoay nâng cấp dự án của mình: rót thêm 5 triệu usd kinh phí, nâng số nhân viên lên hơn 200 người và mất 5 năm mới ra mắt (vào năm 1995).

Trong khi đó ở cùng thời điểm, id software với khả năng “nhìn

Trang 7

thấu tương lai” đã chuẩn bị trước cho mình một bộ công cụ tích hợp

đủ tính năng, đáp ứng được nhu cầu thị trường lúc bấy giờ là wolfenstein 3d engine, và lẽ tất yếu thành công không nằm quá tầm tay họ Điều quan trọng nhất thời điểm đó là id software đã đặt nền tảng cho khái niệm một “game engine” đúng nghĩa: tập hợp nhiều thành phần cần thiết cho việc xây dựng một trò chơi, giảm tải chi phí, thời gian và nhân lực phát sinh.

Sau wolfenstein 3d (1992), một kỷ nguyên fps ra mắt, thúc đẩy thêm nhiều cải tiến vượt trội đối với game engine và bắt đầu lấn sân sang các thể loại game khác Giờ đây, tuy có nhiều kiểu game engine khác nhau, nhưng tựu trung khi nhắc đến cụm từ này, người

ta vẫn xem thể loại fps là một “biểu tượng” đặc trưng, thể hiện rõ nét nhất hai chữ: game engine.

Song song với giai đoạn hoàn thiện bản thân, thì game engine còn được khai thác ở một khía cạnh khác là kinh tế Chúng được thương mại hóa bằng cách cho thuê Việc cho thuê này sẽ giúp người đi thuê tiết kiệm được chi phí và thời gian làm game: họ chỉ việc lấy engine đó về và “đắp da, đắp thịt” cho phần nội dung game (đồ họa, nhân vật, vũ khí và màn chơi) dựa trên khung sườn có sẵn Với người cho thuê, có trong tay một số tiền sẽ giúp họ có kinh phí thực hiện các dự án khác hoặc nâng cấp cho engine hiện tại của mình Một engine có thể cho nhiều hãng phát triển game thuê cùng lúc và tùy theo nhu cầu, nó có thể được chỉnh sửa Giá cả thuê sẽ xê dịch khác nhau tùy theo chất lượng và tên tuổi của engine đó, chẳng hạn khi warcraft iii ra mắt thành công (2002), engine thực hiện game này đã được “hét giá” trên thị trường lúc đó vào khoảng 4 triệu usd.

Đi đầu và sớm nhất trong việc nắm bắt thị trường thuê game engine, có thể kể đến hai tên tuổi lẫy lừng: quake iii arena (id software) và unreal tournament (epic games) Cả hai gần như “thống trị” thị trường giai đoạn 1999 – 2002, phần lớn game ra mắt lúc đó thay phiên nhau sử dụng một trong hai engine này làm nền tảng Khi half-life 2 ra mắt vào năm 2004, giới thiệu engine source đến với mọi người thì cả hai engine kia đã bước sang thế hệ thứ hai, và thị

Trang 8

trường giai đoạn 2004 – 2006 chứng kiến thế chân vạc phân chia giữa id software, epic games và valve corporation.

Cuối thời điểm 2006, khi thế hệ console “next-gen” rộ lên thì cũng là lúc epic games đưa ra một quyết định táo bạo: tấn công vùng đất mới này! Kết quả là họ cho ra mắt engine unreal 3 – hỗ trợ nhiều công nghệ hiện đại, bao gồm cả directx 10, với sản phẩm đình đám gears of war (xbox 360) Thông qua cuộc bứt phá ngoạn mục này, epic đã bỏ rơi hai đối thủ đáng gờm lại phía sau một bước: valve thì vẫn giậm chân tại chỗ, không thêm thắt cải tiến, trong khi

id software lật đật nghiên cứu và trình làng thế hệ engine mới (id tech 5), dù chưa có sản phẩm ứng dụng nào có mặt trên thị trường Tính đến thời điểm này, hiện danh sách các game sử dụng engine unreal 3 đã vượt hơn con số 60 và sẽ còn tiếp tục được thêm vào, bỏ

xa source ở vị trí thứ nhì (tầm 30 game) và rất, rất xa so với engine doom 3 (id tech 4) chỉ chưa đầy chục game ứng dụng.

2.3 Các công cụ thiết kế game engine

2.3.1 Eng ine unreal 3

Để đạt đến thành công như ngày hôm nay, engine unreal 3 phải

có trong người “võ công” thuộc hàng thượng thừa trong giới Theo tương truyền thì unreal 3 có tới 17 bí kíp võ công khác nhau, nhưng tựu trung lại thì hướng vào ba ý chủ đạo, đó là:

- thiết kế mô hình hướng đối tượng với ngôn ngữ c++ làm nền, dễ dàng làm việc trên các hệ điều hành khác nhau, ở bất cứ nơi đâu.

- người sử dụng sẽ là đối tượng được phục vụ chính, với nhiều bộ công cụ và tiện ích hỗ trợ mạnh mẽ, có thể làm được bất cứ gì dựa trên ý tưởng sáng tạo của mình.

- có thể được sử dụng để phát triển game trên nhiều hệ máy khác nhau, dễ nâng cấp, thêm thắt các đoạn mã, plug-in khác nhau Những tính năng đáng chú ý của unreal 3

scripting (lập trình mã)

Unreal 3 sử dụng bộ mã riêng của mình để lập trình có tên là unrealscript Bộ mã này được xem là gần gũi do được viết trên ngôn ngữ c++, dễ dàng tương thích với các bộ mã nguồn khác nhau Có

Trang 9

thể tương tác với trình unrealed có sẵn để tạo nên lối chơi, thiết kế màn chơi của game một cách dễ dàng.

Ngoài ra, công cụ visual ai scripting tool còn giúp cho lập trình viên rất nhiều trong việc thiết kế nhiệm vụ, các sự kiện đặc biệt trong game và trí thông minh của máy

Physics (các hiệu ứng vật lý)

Engine hỗ trợ 4 cơ chế vật lý là basic physics (hiệu ứng vật lý

cơ bản), collision detection (phụ trách mảng va chạm, cháy nổ sẽ xảy ra trong game), rigid body (vật lý từng phần, phụ trách các hiệu ứng như rag-doll, tháo rời từng mảnh ) và vehicle physics (tương tác giữa nhân vật và các phương tiện cơ giới khác, a.i )

Texturing (vân bề mặt)

Hỗ trợ hầu hết các cơ chế phủ vân bề mặt tiên tiến như basic, multi-texturing, bumpmapping (tạo hiệu ứng bề mặt sần sùi), mipmapping, volumetric, projected, procedural.

Animation (chuyển động vật thể)

Trang 10

Với các cơ chế inverse kinematics, keyframe animation, skeletal animation, facial animation, animation blending Đặc biệt,

cơ chế dựng skeletal animation (chuyển động khung xương) được

hỗ trợ tốt với bốn khớp xương được thể hiện trong một vertex (đỉnh) Ngoài ra, engine còn tương thích với nhiều chương trình dựng hình nổi tiếng như 3d studio max, maya

Meshes (mô hình lưới)

Để dựng được một mô hình, bạn phải bắt đầu từ việc vẽ các điểm ảnh, sau đó nối các điểm ảnh này với nhau để tạo thành những mắt lưới Càng nhiều mắt lưới thì mô hình càng chi tiết Unreal 3 hỗ trợ các hiệu ứng như mesh loading, skinning, progressive,

Các mô hình thường được dựng trên hai lớp lưới: đó là realtime mesh (mô hình lưới thực), với hàng ngàn đa giác ảnh trên đó và detail mesh (mô hình lưới chi tiết) với hàng triệu đa giác.

Các hiệu ứng đặc biệt

Tập trung đủ các hiệu ứng thời thượng hiện nay như environment mapping, lens flares, billboarding, particle system, depth of field (tạo hiệu ứng chiều sâu tầm nhìn), motion blur (hiệu ứng nhòe hình khi vật chuyển động), sky, water, fire, explosion, decals (vết đạn dính trên vật thể), fog, weather, mirror (gương).

Terrain (địa hình)

Người sử dụng có thể dựng địa hình với nhiều lớp (layer) riêng biệt được xếp lên nhau, dễ dàng tạo nên những khung cảnh, môi trường rộng lớn với độ chi tiết cao Ngoài ra, engine còn cho phép thêm các hiệu ứng thời tiết, mùa màng vào địa hình như: cỏ cây, hoa lá dính trên đá, cánh đồng tuyết trắng xóa

Hệ thống mạng

Hỗ trợ trên nhiều hệ máy, nhiều hệ điều hành với số lượng người chơi ở mức 64 Dễ dàng cho người dùng chỉnh sửa và thêm thắt nhiều tiện ích khác nhau cho mục chơi mạng của game.

Âm thanh

Trang 11

Âm thanh nổi, vòm, 3d chất lượng cao, có sẵn bộ công cụ để biên tập và chỉnh sửa.

Trí thông minh nhân tạo

Với bốn cơ chế hỗ trợ là pathfinding (khả năng nhận biết đường đi), decision making (xử lý tình huống), finite state machines, scripted (tự chỉnh sửa và lập trình cho a.i).

Rendering (kết xuất đồ họa – dựng hình)

Hỗ trợ dựng hình high dynamic range trên cơ chế 64 bit với độ phân giải cao, hỗ trợ luôn cả các hiệu ứng post processing như: light blooms, lenticular halos, hay depth-of-field Dễ biên tập theo ý thích của người sử dụng.

2.3.1.1 Thể hiện ánh sáng rất hiệu quả

Nếu như trong rainbow six vegas, khung cảnh đa phần là những khu vực rực rỡ ánh sáng của mặt trời, của đèn điện đủ màu sắc chiếu rực cả một thành phố las vegas về đêm, thì ngược lại trong bioshock, khung cảnh lại là một thành phố dưới đáy biển tối tăm và

ẩm thấp Cả hai game đều thể hiện rất tốt các luồng ánh sáng, tạo nên những khung cảnh hài hòa, phù hợp với xu hướng chủ đạo của game Còn với “siêu phẩm điện ảnh” stranglehold của đạo diễn ngô

vũ sâm, dấu ấn ánh sáng cũng rất rõ nét với những cảnh trong nhà

và ngoài trời được dựng vô cùng chân thật, tạo nên một khung cảnh nền sống động với những cảnh phim “đẹp mê ly” hệt như trong các siêu phẩm anh hùng, ngọa hổ tàng long hay thập diện mai phục Trong khi đó, gears of war lại mang “hơi hướng” của những thước phim hành động phương tây với tông màu bàng bạc của khói và bụi.

Trang 12

Và cũng chính nhờ hiệu ứng ánh sáng, thể hiện mặt nước trở nên thật hơn, đặc biệt là trong bioshock Các hiệu ứng của nước được dựng rất công phu, thêm nữa là việc nhúng các hiệu ứng của directx 10 vào làm cho tương tác với mặt nước không còn chỉ là các vân (texture) đắp lên bề mặt nữa, mà giờ đây đã mềm mại hơn rất nhiều.

2.3.1.2 Khả năng tương tác vật lý rất tốt

Bioshock là một thí dụ điển hình cho khả năng này Với siêu năng lực, người chơi có thể tương tác với vô số các vật thể bằng nhiều cách khác nhau: từ di chuyển đến đốt cháy hay va đập đều thể hiện rất ấn tượng Hay như trong medal of honor: airborne, một điểm tiến bộ là phát đạn sượt qua đầu có thể “mượn tạm” cái mũ của kẻ thù Giờ đây cái nón không còn là một phần dính liền của vật thể hình ảnh, mà nó có thể dễ dàng tương tác được Cách giải quyết vật lý trong stranglehold lại cho thấy tính linh động của unreal 3 khi

có đến ba engine vật lý khác nhau được sử dụng: physx của ageia được tích hợp mặc định, havok để xử lý các tương tác vật lý thông thường, massived được midway dựng riêng phục vụ cho ý đồ phá hủy hàng loạt của trò chơi Giờ đây, những vật cản như cột bê tông, thùng gỗ, vách tường Không còn là nơi trú ẩn an toàn cho các game thủ Tất cả đều dễ dàng bị thổi tung mất dạng.

2.3.1.3 Phủ vân bề mặt tạo nên những mô hình cực kỳ

chi tiết.

Dễ thấy nhất là qua gears of war, khi mô hình các nhân vật vô cùng sống động đến từng đường nét khuôn mặt Bioshock cũng không hề kém cạnh khi thể hiện những big daddy nặng nề và chậm chạp, chi tiết đến từng chỗ rỉ sét trên bộ đồ lặn cũ kỹ.

2.3.1.4 Snap-to-cover

Một chức năng khá lý thú của phần nhiều các game sử dụng unreal 3 là “snap-to-cover” (khả năng ẩn nấp) Khi ẩn nấp, góc nhìn

Trang 13

chơi có tầm quan sát bao quát hơn và có thể thấy được độ chi tiết của nhân vật mình điều khiển

Bên cạnh những ưu điểm được thể hiện, các game sử dụng unreal 3 vẫn còn tồn tại khá nhiều khuyết điểm Việc phủ các vân bề mặt (texture) chi tiết cũng là một “con dao hai lưỡi” khiến cho việc

xử lý trở nên nặng nề hơn Với một số game như bioshock và medal

of honor: airborne, tốc độ nạp các texture không kịp sẽ gây ra hiện tượng mất vân bề mặt khi vừa nạp màn xong Hay tệ hơn nữa, trong bioshock có thể gây ra lỗi “kẹt” các texture, làm mất màu hoàn toàn hoặc một bộ phận nào đó của màn chơi.

Trong khi đó, với cơ chế vật lý “hạng nặng”, các game cũng đem lại những bất hợp lý Với rainbow six vegas, các mô hình nhân vật đều có thể tương tác vật lý được, tuy nhiên, sau khi bị bắn hạ thì lại mất hoàn toàn yếu tố vật lý, có thể nằm vắt vẻo Xuyên qua vật thể! Đối với medal of honor: airborne thì mọi việc còn tồi tệ hơn nữa: các mô hình nhân vật rất dễ biến dạng một cách kỳ quái Chẳng hạn, ở màn market garden thường xuất hiện các “quái vật cổ dài”, theo nguyên tắc vật lý của engine thì phần đầu khi bị bắn trúng phải đứt rời ra, nhưng giờ đây “dính lại”, tạo thành một hình ảnh hết sức khôi hài Hay một hiện tượng khác là việc các mô hình nhân vật bị

“thổi bay” một cách thái quá dưới sức ép của vụ nổ Dường như các nhân viên của ea đã “giảm cân” tối đa cho các nhân vật của mình, khiến chúng nhẹ tênh như giấy vậy.

Ánh sáng là một ưu thế của unreal 3 nhưng cũng lại mang khuyết điểm trong việc đổ bóng Nếu một người lính trong medal of honor: airborne đứng gần một bức tường, thì lập tức sẽ xuất hiện hai bóng trên bức tường và Phía bên kia tường Ngay cả trong bioshock cũng gặp phải lỗi tương tự.

Một nền tảng tốt

Nhưng cần phải trau chuốt Đặc điểm của các game thể hiện trên nền unreal 3 là có khá nhiều lỗi vụn vặt giống nhau như lỗi đổ bóng, lỗi thể hiện vật lý Cộng với một cơ chế cồng kềnh bất hợp

lý làm cho cấu hình đòi hỏi của các game khá nặng Tuy nhiên, thể hiện hiện tại của unreal 3 trên các game đã phát hành là rất ấn tượng! Sản phẩm đã tạo ra một môi trường làm việc rất tốt, tích hợp

Trang 14

đầy đủ các tính năng mạnh mẽ để những nhà phát triển tự do phát huy ý tưởng sáng tạo của mình Trong tương lai, có thể epic sẽ cho

ra đời hệ thống chỉnh sửa unreal tournament 3 như đã từng làm với phiên bản 2004, cho phép game thủ can thiệp sâu vào nội dung của game.

Với những ưu điểm nổi trội như vậy, sẽ không có gì đáng ngạc nhiên khi engine unreal 3 ngày càng trở nên thu hút sự quan tâm của giới phát triển trò chơi và ngày càng có nhiều game “đỉnh” ra mắt cộng đồng game thủ Có thể ví von engine này giống như những nguyên liệu tốt, rất cần thiết để chế biến ra một món ăn ngon, mặc

dù các đầu bếp tài hoa phải thật khéo tay để nhặt cho kỳ hết những hạt sạn còn tồn tại

Cạnh tranh với engine unreal 3 hiện nay trong thể loại fps là

vô số các engine của nhiều game khác nhau Tuy nhiên, để được gọi

là bộ engine “hoàn chỉnh” – tích hợp đầy đủ tính năng như unreal 3 thì chỉ đếm được vài con số trên đầu ngón tay Có thể kể vài engine tiêu biểu như:

2.3.2 Source engine

Ra đời vào 10/2004, được phát triển bởi valve corporation dựa trên engine goldsrc cũ (engine này được xem là một bản “mod” (hiệu chỉnh) từ engine quake của id software) Một đối thủ khá khó chịu của unreal 3 Nếu nói về những điểm mạnh của source thì có thể kể ra vô số Đầu tiên, một sự thật không ai có thể phủ nhận là khả năng hỗ trợ vật lý cực tốt (ví dụ cụ thể nhất là khẩu súng trọng lực của gordon freeman trong half-life 2), hỗ trợ hiệu ứng lip-sync cực chuẩn Kế đến là cấu hình yêu cầu đối với những tựa game sử dụng source khá nhẹ, điều kiện cần cho các game thi đấu Thứ ba, source rất dễ nâng cấp và sửa lỗi với nhiều tính năng, hiệu ứng mới

ở từng phiên bản một Đồng thời, khả năng hỗ trợ cộng đồng mod thuộc hàng thượng thừa Tuy nhiên, về khoản cháy nổ, máu me thì source thật khó mà so được với unreal 3!

Trang 15

Id tech có nhiều phiên bản Bắt đầu từ phiên bản đầu tiên có tên gọi là doom engine, xuất hiện cùng lúc với trò chơi doom nổi tiếng Sau đó, id tech 2 ra đời với tên quake engine, tất nhiên kèm theo đó là trò chơi quake của hãng Tiếp theo là id tech 3 xuất hiện trong quake iii arena Vào thời bấy giờ thì id tech 3 được xem là đối thủ trực tiếp với unreal engine Engine này cũng được sử dụng để thực hiện nhiều game khá nổi tiếng, trong đó có call of duty, medal

of honor: allied assault Id tech 4 (hay doom 3 engine) xuất hiện đồng thời với doom iii, mang nhiều tính năng và hiệu ứng đặc biệt, nổi trội như: ánh sáng, đổ bóng hoàn hảo, vân bề mặt với độ chi tiết cao, hỗ trợ chơi mạng tốt (điển hình là trò chơi quake iv) Tuy nhiên, engine chỉ thể hiện tốt những cảnh trong nhà, còn ngoại cảnh thì kém hơn rất nhiều Hiện nay, id tech 5 vẫn đang được id software phát triển, hứa hẹn nhiều cải tiến mới, và đặc biệt là hỗ trợ

2.3.4 Cryengine

Bắt đầu từ một bản demo quảng cáo công nghệ cho card màn hình nvidia, cryengine được crytek phát triển lên thành engine cho tựa game far cry của hãng Hiện nay, phiên bản cryengine 2 đang được crytek phát triển và dùng trong trò chơi crysis sắp ra mắt của

họ Qua nhiều đoạn trailer, hình ảnh ban đầu thì cryengine 2 thực sự tạo ấn tượng với người xem thông qua những hiệu ứng hình ảnh đẹp, với độ chi tiết sắc nét Tuy vậy, trong phiên bản thử nghiệm beta chơi mạng mới tung ra gần đây của crysis, theo nhận xét của nhiều người thì game đòi hỏi cấu hình quá nặng mà hiệu quả hình ảnh đem lại cũng không có nhiều ấn tượng, vô hình chung đã “giết chết” mục chơi mạng của game.

3 Lý thuyết về game engine và 3d engine

4 Lý thuyết về game engine và 3d engine

Cùng với sự du nhập của hàng loạt ngành nghề liên quan, ngành công nghiệp phát triển game (game development) đang thực

sự tạo nên một cơn “sốt” trong giới yêu game thích sáng tạo.

Nói rằng game development mới chỉ được các bạn trẻ yêu

Trang 16

game việt nam biết đến trong vài ba năm gần đây thì chưa hoàn toàn chính xác, vì thực ra đã có không ít người nghiên cứu và tìm hiểu về lĩnh vực này từ trước năm 2002 Chỉ có điều lúc bấy giờ định kiến

về tác hại của game rất nặng nề và nền tảng công nghệ thông tin – viễn thông trong nước còn non kém Cơ hội tiếp xúc với internet của đa phần giới trẻ còn là cái gì đó quá “xa xỉ” và mới lạ, nên tất cả vẫn chỉ dừng lại ở con số 0 tròn trĩnh.

Nhưng chỉ trong vài năm gần đây, từ khi game online thống lĩnh thị trường game trong nước và kéo theo nền công nghiệp game phát triển không ngừng, thì số lượng người chơi game ngày càng tăng, sự am hiểu về game ngày càng sâu sắc Và cùng với sự phát triển nhanh chóng của mạng lưới internet, những kiến thức về phát triển game du nhập vào việt nam là một tất yếu.

Phát triển game, nói một cách đơn giản là quá trình tạo ra trò chơi ngay lập tức thu hút sự quan tâm của một phần không nhỏ các bạn trẻ thích tìm hiểu Những diễn đàn game bắt đầu thành lập những khu thảo luận nhỏ như box game programming của gamevn.com, game thủ v vv Tất nhiên, ban đầu những bài viết xoay quanh vấn đề này còn lẻ tẻ, nhưng càng ngày số lượng người tham gia càng đông Và nếu như bạn đã từng theo dõi quá trình ấy, thì chắc chắn sẽ đồng ý với tôi rằng sự du nhập của 2 game engine rpg maker và game maker chính là những tác nhân đầu tiên thổi bùng lên niềm đam mê tạo game của các game thủ.

Đặc điểm của các game engine này là chúng rất đơn giản, sử dụng công nghệ 2d và hầu như ai cũng có thể dễ dàng tiếp cận sau một thời gian ngắn tìm hiểu Chính vì vậy, không lâu sau đó, hàng loạt “tác phẩm” đầu tay của những bạn trẻ không chuyên cũng đã xuất hiện trên mạng internet.

Không dừng lại ở những sản phẩm 2d đơn giản, cộng đồng phát triển game việt nam tiếp tục đi những bước tiếp theo, game 3d

“made in vn” Mặc dù nếu so sánh với những tựa game thương mại trên thế giới thì còn quá khập khiễng,

Game engine thực chất chỉ là 1 tập các các thư viện hàm độc

Trang 17

trò khác nhau về mặt chức năng nhằm đáp ứng 1 tính năng ứng dụng game yêu cầu Ví dụ, bạn nghĩ trong đầu, mình muốn làm 1 game 3d, có âm thanh, hiệu ứng vật lý, hỗ trợ chơi qua mạng Ở mức cực kỳ đơn giản mỗi chức năng đó bạn sẽ viết 1 hay 2 lớp để

xử lý chúng ( ví dụ crenderer, csound, cphysic Cnetwork v.v ) Nhưng thường thì nếu chỉ 1 vài tính năng sẽ không thể nào đáp ứng nổi yêu cầu ngày càng mở rộng của trò chơi, bạn phải phát triển 1 chức năng thành nhiều lớp, hàm Khi khối lượng 1 chức năng khá lớn người ta thường gói lại thành những bộ thư viện (.lib hay dll)

để dễ sử dụng ( lúc này bạn có renderer.dll, sound.dll, physic.dll, network.dll ) Và cứ như thế mở rộng ra 1 chức năng có thể bao gồm nhiều dll ( ví dụ renderer.dll -> renderer_dx9.dll, renderer_dx10.dll, renderer_gl.dll v.v ), mở rộng bao nhiêu dll thì

sẽ phụ thuộc và người thiết kế và cấu trúc của thư viện Các thư viện này thường được viết hết sức độc lập với game ( để có thể dùng để viết nhiều game khác nhau, ví dụ engine source dùng để viết hl2, vampire v.v ).

Mặt khác 1 game dùng khá nhiều loại dữ liệu ( dữ liệu mesh ,

dữ liệu va chạm vật lý, dữ liệu terrain, dữ liệu các vật thể trong thế giới 3d v.v ), người ta không thể dùng tay để tạo ra tất cả các loại

dữ liệu này được, nên thường họ sẽ phát triển các tool để sử dụng 1 cách trực quan hơn Ví dụ : mô hình 3d đã có tool 3ds max xuất ra nhưng engine ko đọc được file 3ds -> người ta phải viết 1 tool đề convert định dạng file 3ds sang định dạng file mà game sử dụng, cụ thằng doom 3 có tool chuyển từ file maya mb sang md5mesh hay md5anim

Thông thường thuật ngữ game engine dùng để chỉ tập hợp tất

cả các bộ thư viện + các tool này Tùy vào game engine mà hỗ trợ các thư viện và các tool khác nhau, có thể hỗ trợ cái này mà không

hỗ trợ cái kia v.v Còn các khái niệm về 3d engine hay physic engine là để ám chỉ các bộ thư viện con của game engine Thông thường 1 hãng game khó lòng sản xuất được 1 game engine có toàn

bộ tất cả tính năng ( 3d, sound, vật lý v.v ) nên họ thường mua lại các thư viện sẳn có của hãng thứ 3 ( ví dụ unreal engine mua thư viện vật lý novodex để hỗ trợ tính năng vật lý cho unreal game

Trang 18

engine ) Nói cách khác 3d engine hay physic engine mà bạn thường nghe là các thư viện con của game engine ( ví dụ thằng ogre chỉ được coi là 3d engine vì nó thiếu các tính năng khác như vật lý, network, sound, và cái thiếu nhất là các tool hỗ trợ ).

4.1.1 Game engine gồm các thành phần cơ bản sau:

• Hệ thống toán học ( math system ).

• Hệ thống xử lý tập tin dữ liệu ( file system).

• Hệ thống hiển thị đồ hoạ ( render system).

• Hệ thống quản lý diễn hoạt ( animation system ).

• Hệ thống xử lý nhập và xuất ( input and output system).

• Hệ thống xử lý các tương tác vật lý ( physics system ).

• Hệ thống xử lý mạng ( network system ).

• Hệ thống tạo hiệu ứng khác như khói lửa, âm thanh … (effect system ).

Trong các game khác nhau thì vai trò của các thành phần trên

sẽ khác nhau Thông thường xây dựng game ta chỉ cần một sổ trong các thành phần trên mà thôi Việc xây dựng và quản lý tất cả các thành phần trên của một game engine đòi hỏi một lượng lớn thời gian cũng như công sức và đôi khi đòi hỏi nhiều kỹ thuật và kiến thức của nhiều lĩnh vực khác nhau.

3d engine bao gồm một tập các hệ thống trong game engine nhằm giải quyết các vấn đề chính của đồ hoạ 3d engine nên em tập trung vào xây dựng hệ thống hiển thị và hệ thống quản lý tập tin.

Do 3d engine là một thành phần đặc trưng của game engine nên chúng ta sẽ tìm hiểu về 3d engine thông qua việc tìm hiểu về game engine.

4.1.2 Mối quan hệ giữa game engine và game

Trang 19

Game engine chính là thành phần cốt lõi làm nền móng xây dựng nên game Sự khác biệt giữa game engine và bản thân game tương tự như sự khác biệt giữa động cơ và chiếc xe Chúng ta có thể đem động cơ ra khỏi xe, chỉnh sửa và dùng lại Một game engine có thể được xem như là một phần không phụ thuộc vào game, nó cũng

có thể được thay đổi độc lập với game mà không làm thay đổi cấu trúc logic của game.

4.1.3 Phân loại game engine

Các game engine này thường được sử dụng trong các

Game chiến lược ( strategy ) và trong các thể loại game nhập vai ( rpg: role game play genre) Một số game được xây dựng trên isometric engine có thể kể đến như baldur’s gate 2, diablo 2 và warlords battle cry 2.

Isometric engine không phải là một game engine tốt cho việc xây dựng các game chuyên về đồ họa 3d engine mà chỉ có một số chức năng 3d.

Trang 20

4.1.5 3d fps ( first person shooter ) engine

Đây là game engine dùng nhiều nhất trong các 3d game hiện nay Với sự phát triển vượt bậc về công nghệ game trong vài thập niên gần đây thì người dùng mong muốn có những game bắt mắt nhất và loại game engine này đã đáp ứng được nhu cầu đó

Một số trong rất nhiều game được xây dựng trên các 3d fps engine như: doom, quake Half life, counter strike, unreal, duke nuke’m, deusex, … 3d fps engine đã tạo ra những thay đổi lớn lao trong các engine xây dựng thực tại ảo

Các game engine này thông thường còn kèm theo các công cụ

để tạo ra các sản phẩm mang tính nghệ thuật và tương tác cao Các ứng dụng tạo ra các mô hình 3d nổi tiếng như 3dsmax, maya và softimage đều có thể kết xuất (export) kết quả vào các game engine này Các đặc trưng cơ bản của các game engine này là nó hỗ trợ nhiều chức năng như tô bóng điểm ( pixel shader ), quản lý diễn hoạt (animation), mô phỏng vật lý, mô phỏng chuyển động của cậht nhỏ ( như bụi, lửa Khói), mô phỏng chất lỏng, áo quần, và cáchiệu ứngkhác mà ta hiếm khi được tấy ở các 2d engine

4.1.6 mmog ( massive multiplayer online game )

Hầu hết các mmog engine hiện nay đều tương thích và được tích hợp với một fps engine Nhờ vậy ngoài các yếu tố liên quan đến mạng thì loại engine này có các chức năng đáp ứng được các ứng

Trang 21

dụng thực tại ảo và các yếu tố nghệ thuật được đảm bảo và đây là một yếu tố quan trọng để các người chơi hứng thú ngồi hàng giờ để chơi các game mạng.

Một số game được xây dựng trên mmog engine có thể kể đến như: ultima online ever ouest asheron’s call và anarchy online.

4.1.7 Một số game engine hiện nay

Ngày nay trên thế giới có rất nhiều game engine Mỗi game engine được tạo ra với những mục đích, đặc tính và độ phứctạp khác nhau và do đó sẽ rất khó khăn cho người dùng trong việc chọn

ra một game engine cho chính mình sử dụng Hầu hết các game engine ngày nay cung cấp tốt các tính năng cơ bản của một game engine và tuỳ thuộc vào nhu cầu cũng như khả năng mà chúng ta chọn ta một game engine phù hợp cho ứng dụng của mình Một số game engine tiêu biểu có thể kể đến như: unreal-$10000, quake2-

$10000, quake3-$250000, torque-$100, 3d game studio-$80,….

Ta có thể có một sự so sánh sơ bộ giữa các game engine về các chức năng mà chúng cung cấp cùng với giá tiền để có chúng qua bảng tóm tắt sau:

Game

Engine

Dark Basi c

Quak e 1

Unreal Halflif

e

Genesi s

Nebul a

Quake 2

Trang 22

$10.00 0

Game

Engine

Game studio

Quak e 3

Lich_

tech 2

Vulpin e

Torqu e

Crysta

l space

Power render

Trang 23

$100 $500 $5.500 Bảng 1.1 so sánh một số game engine

Trang 24

CHƯƠNG 3 VERTEX SHADER VÀ PIXEL SHADER 3.1 tổng quát

Chưa có khi nào mà phần cứng dành cho đồ hoạ 3D phát triển như hiện nay Phần cứng hiện nay phát triển dựa theo tiêu chí nhanh hơn, mạnh hơn, đẹp hơn Dưới sự trợ giúp của các card đồ hoạ 3D tiên tiến, danh giới giữa ảo và thực ngày càng trở lên vô cùng mong manh Với sự ra đời của công nghệ Vertex Shader và Pixel Shader trên phần cứng, công nghiệp làm Game đã có bước tiến nhẩy vọt chưa từng có, cho ra đời hàng loạt Game có chất lượng đồ hoạ y như thật Vậy đâu là điều làm lên thế mạnh của công nghệ này, làm cách nào mà ta có thể ứng dụng đựơc nó, câu hỏi đó sẽ được giải đáp trong chương này Không đi sâu vào các khía cạnh khác, nội dung của chương này chủ yếu đề cập tới khía cạnh kỹ thuật và lý thuyết của công nghệ này

Vì công nghệ Vertex Shader và Pixel Shader không phải là công nghệ độc lập với môi trường do có sự phụ thuộc vào 3D API được sử dụng nên trong toàn bộ báo cáo này mọi vấn đề liên quan đến Shader đều được đề cập trên môi trường 3D API direct3d của Microsoft( phiên bản 9.0c)

3.2 Qui trình xử lý đồ hoạ (Graphic Pipeline)

Công nghệ Shaders gồm 2 thành phần cơ bản là: Vertex Shader ( còn được gọi là Vertex Program) và Pixel Shader (Hay Fragment Program) là công nghệ được tích hợp sẵn trên phần cứng cho phép người lập trình 3D hoàn toàn làm chủ quy trình xử lý dữ liệu và hình ảnh trên phần cứng

( Graphic Pipeline) Trong Direct3D, Vertex Shader và Pixel Shader được gọi chung là Programmable Pipeline để có thể phân biệt với Fixed function Pipeline Cần phải nói thêm Fixed function Pipeline là quy trình xử lý dữ liệu và hình ảnh 3D được cung cấp sẵn của Direct3D, quy trình này theo một thuật toán dựng hình cố định đối với mọi loại dữ liệu 3D đầu vào Hình vẽ sau đây minh hoạ cho quá trình xử lý đồ hoạ ( Graphic Pipeline) của

Direct3D

Trang 25

Sơ đồ trên gói gọn toàn bộ quy trình xử lý 3D trên phần cứng của phần cứng direct3d, toàn bộ quy trình này được chia làm nhiều tầng xử lý hoàn toàn riêng biệt Như chúng ta thấy trên sơ đồ toàn bộ quy trình xử lý 3D bao gồm:

Xử lý dữ liệu đỉnh ( Vertex processing) Biến đổi Vertex từ không gian vật thể ( Model space ) sang không gian chiếu ( Projection space)

Xử lý đối tượng cơ sở ( Primitive Processing ) Chuyển đổi dữ liệu vertex trong không gian chiếu thành các dữ liệu cơ sở

Quá trình xử lý điểm ảnh ( Pixel Processing) Chuyển đổi dữ liệu cơ

sở thành các điểm ảnh trên màn hình ( Rendered Pixels)

Trước khi đi xa hơn ta cần nắm bắt 1 số khái niệm hay thuật ngữ chuyên môn dùng trong phần này:

Fixed Function Pipeline Quy trình xử lý đồ hoạ cố định được đưa ra bởi Direct3D Qui trình này sử dụng nhiều thuật toán 3D xử lý cố định trên các dữ liệu vào ( các thuật toán này là không thể thay đổi)

Programmanle Pipeline Qui trình xử lý đồ hoạ có sử dụng Vertex Shader

Graphi Pipeline Qui trình xử lý đồ hoạ 3D nói chung ( bao gồm luôn

cả Fixed Function Pipeline và Programmable Pipeline)

Vertex Dữ liệu đỉnh 3D Dữ liệu trong 1 đỉnh gồm nhiều thành phần như toạ độ vị trí (position), pháp tuyến (normal), toạ độ texrure (texture coordinate), màu diffuse (diffuse color ), màu phnr chiếu (specular color)…

Pixel Điểm ảnh trên màn hình

Primitive Đối tượng đồ hoạ cơ sở như tam giác, đường thảng, hình tròn, hình vuông…

HLSL – High Level Shader Langguage Ngôn ngữ Shaders cấp cao

do Microsoft phát triển tích hợp trong phiên bản Dỉect3D 9.0

3.3 Vertex Shader

Vertex Shader là chương trình có vai trò xử lý dữ liệu vertex khi được thi hành Vertex Shader trên Dỉect3D chủ yếu viết bằng hợp nhữ và HLSL (được phát triển kể từ phiên bản Direct3D 9.0 ) Vertex Shader là công nghệ phát triển theo các thế hệ phần cứng do đó nó có rất nhiều phiên bản khác nhau, các phiên bản cao hơn không thể chạy trên các thế hệ phần cứng cữ nhưng ngược lại thì được Các phiên bản Vertex Shader hiện nay gồm có vs_1_1, vs_2_0, vs_2_x, vs_3_0

Vertex Shader và Fixed Function sẽ loại trừ lẫn nhau trong khi thi hành, do đó ta phải nắm đwocj quy trình xử lý vertex của Fixed Function trước khi có thể tự viết cho mình một Vertex Shader như ý muốn

Trang 26

3.3.1.Xử lý Vertex bằng Fixed Function Pipeline

Trước khi tìm hiểu về Vertex Shader ta hãy xem qua qui trình xử lý Vertex mà Direct3D cung cấp sẵn thông qua Fixed Function Pipeline

Dữ liệu đầu vào của quy trình là sữ liệu đỉnh 3D (Vertex) trong không gian vật thể (model space ), trong không gian này mọi vertex đều có toạ độ tính từ gốc toạ độ của vật thể

Biến đổi thế giới (World transform) Biến đổi vertex từ không gian vật thể (model space ) sang không gian thế giới (world space), các vertex sẽ có toạ độ tương đối với nhau trong không gian thế giới

Vertex blending Biến đổi toạ độ của 1 vertex trên nhiều ma trận biến đổi thế giới khác nhau Mức độ tham gia của mỗi ma trận được xác định thông qua giá trị trọng lượng (weight) ứng với mỗi ma trận

Biến đổi quan sát ( View transform) Biến đổi vertex từ không gian thế giới vào không gian quan sát Vị trí của camera nằm ở gốc toạ độ của không gian quan sát, sau biến đổi này vertex sẽ có toạ độ là toạ độ tương đối đối với camera

Tính giá trị sương mù trên từng vertex (Vertex fog) Tính toán giá trị màu sắc của vertex khi áp dụng hiệu ứng sương mù

Chiếu sáng ( lighting and material) Tính toán ánh sáng trên từng vertex dụa trên mức độ phản xạ ánh sáng của vertex

Biến đổi chiếu ( Prọection transform) Biến đổi vertex từ không gian quan sát sang không gian chiếu Đây là công đoạn cuối cùng của quy trình biến đổi

Dữ liệu đầu ra của quy trình này sẽ là đầu vào quy trình xử lý đối tượng cơ sở (Primitive processing)

Trang 27

Toàn bộ quy trình xử lý vertex trên của Fixed Function có thể được thay thế bằng chương trình Vertex Shader, khi đố Direct3Dhoàn toàn chuyển giao quyền xử lý Vertex cho Vertex Shader Vertex Shader sau khi kết thúc sẽ trat quyền điều khiển cùng với dữ liệu xử lý được lại cho Fixed Function Pipeline để xử lý tiếp.

3.3.2.Máy ảo Vertex Shader

Để biết được cách thiết kế 1 Vertex Shader trước tiên ta cần phải nắm được mô hình máy ảo Vertex Shader (Vertex Shader Virtual Machine ) Máy

ảo Vertex Shader là mô hình mang tính chất lý thuyết giúp ta dễ tiếp cận và hình dung cách thức mà Vertex Shader hoạt động Giống như 1 loại máy móc công nghiệp Vertex Shader nhận dữ liệu đầu vào (input), sau đố tiến hành xử lý dữ liệu đó bằng 1 số tác vụ, cuối sùng là xuất ra các thành phẩm

là các dữ liệu đầu ra (output) Sau đây là sơ đồlý thuyết:

Trong sơ đồ trên dữ liệu vertex được truyền từ trái sang phải Các thanh ghi (registers) là nơi chứa và quản lý các dữ liệu đầu vào và đầu ra của shader Các tác vụ được thi hành trong Shader được cấu tạo từ 1 tập các vi lệnh hợp ngữ (assembly- language instructions), các vi lệnh này đwocj thi hành ngay trên đơn vị số học và luận lý (Arithmetic Logic Unit, ALU) nằm trên GPU (Graphic Processor Unit) của cảd 3D Dữ liệu đầu vào của Vertex Shader đựoc truyền vào thông qua thanh ghi đầu vào (input registers) Vertex Shader sau khi thi hành sẽ xuất các giá trị đầu ra thông qua các thanh ghi đầu

ra ( output registers) Dữ liệu đầu vào của Shader là thông tin của 1 vertex được lấy từ trong vertex buffer ( do chương trình cung cấp), các dữ liệu này

Trang 28

có thêt bao gồm toạ độ, pháp tuyến, toạ độ texture, màu diffuse… dữ liệu đầu ra của vertex Shader được trả thẳng lại cho qui trình xử lý (Graphic Pipeline) để chuyển qua công đoạn xử lý đối tượng cơ sở (primitive

processing)

Các thanh ghi được sử dụng trong Shader đều là các thanh ghi 4 chiều ( có thể lưu được 4 số thực trong 1 thanh ghi) Có 4 kiểu thanh ghi, mỗi kiểu

có cách sử dụng rất khác nhau

Thanh ghi dữ liệu vào (input registers) chứa dữ liệu đầu vào

Thanh ghi hàng (constant registers ) chưa các hằng số dùng trong ALU

Thanh ghi tạm (temporary registers) chứa các dữ liệu tạm thời

Thanh ghi dữ liệu ra (output registers) chứa kết quả tính toán của Vertex Shader

Với các thanh ghi đóng vai trò lưu trữ, ALU đống vai trò thi hành các lệnh, phần quan trọng nhất của Shader chính là các vi lệnh (instrutions) Vi lệnh trong Vertex Shgader chủ yếu là các vi lệnh toán học thực hiện 1 tác vụ

cụ thể như tính tích vô hưóng (dot product), tích hữu hướng (cross product), nhân ma trận, tìm minmax…

Danh sách các loại thanh ghi cũng như các vi lệnh có thể thanh khảo trong Direct3D SDK

3.3.3.Cấu trúc của một chương trình Vertex Sgader

bằng hợp ngữ

Vertex Shader nguyên thuỷe đựoc xây dựng bằng hợp ngữ Các ngôn ngữ cấp cao hơn dành cho Vertex Shader chỉ xuất hiện sau này như HLSL ( chỉ có trong Direct3D 9.0 trở lên) hay GLSL (được phát triển trong phiên bản opengl 2.0) Phần này sễ đề cập tới cấu trúc 1 chương trình Vertex

Shader viết bằng hợp ngữ, các ngôn ngư cấp cao sẽ được trình bày ở cuối chương này

Một chương trình Vertex Shader viết bằng hợp ngữ căn bản đựợc chia thành các phần sau đây:

Trang 29

Chỉ thị phiên bản ( Version Instruction) Là thành phần đầu tiên trong chương trình, nó cho biết phiên bản Vertex shader được biên dịch thành Trong ví dụ trên chương trình sẽ chạy được trên phần cứng hỗ trợ vs_1_1 trở lên.

Ghi chú ( Comments) Được dùng để ghi các ghi chú trong chương trình như ý nghĩa của dữ liệu chứa trong thanh ghi… ghi chú được bắt đầu bằng (//) hay (;) cho ghi chú 1 dòng và ( /* ….*/) cho ghi chú nhiều dòng

Các hằng thanh ghi (constants) Các hằng được định nghĩa sau từ khoá def Các hằng thanh ghi có thể chứa tới 4 giá trị cho mỗi thanh ghi Như ở ví

dụ trên thanh ghi c8được gán giả là ( 0,1,2,3) Các hằng thanh ghi còn có thể đựơc gán giá trị bên trong chương trình chính thông qua phương thức

idirect3ddevice9::setvertexshaderconsstantx

Định nghĩa dữ liệu trong thanh ghi đầu vào ( input Register

Declarations) Các thanh ghi dữliệu vào như v0,v1… cần phải được định nghĩa dữ liệu trước khi sử dụng Việc định nghĩa này sẽ giúp Direct3D ánh

xạ được các dữ liệu thành phần trong Vertex trên bộ nhớ vào đúng các thanh ghi tương ứng Trong ví dụ trên, thanh ghi v0 sẽ chứa toạ độ vị trí, và v1 sẽ chứa toạ độ texture của vertex

Các vi lệnh (Instructions) Phần cuối cùng của 1 chương trình Vertex Shader là các vi lệnh hợp ngữ Mọi chương trình Vertex Shader đều phải xuất giá trị ra ít nhất là vào thanh ghi vị trí opos Trong cí dụ trên chương

Trang 30

trình xuất vào 2 thanh ghi là thanh ghi vị trí opos và thanh ghi toạ độ Texture ot0.

3.4 Pixel Shader

Pixel Shader là chương trình tính toán và xử lý màu trên 1 hay nhiều điểm ảnh Pixel Shader sẽ được thực thi 1 lần cho mỗi điểm ảnh được dựng lên màn hình từ dữ liệu vertex vì thế pixel Shader khi chạy sẽ tốn nhiều thời gian hơn Vertex Shader ( chỉ xử lý 1 lần cho mỗi vertex) Pixel Shader có thể được viết bằng hợp ngữ hay HLSL Các phiên bản hiện nay của Pixel Shader gồm có ps_1_1,ps_1_2,ps_1_3 Ps_1_4, ps_2_0,ps_2_x và cuối cùng là ps_3_0

Cũng giống như Vertex Shader, Poxel Shader khi thi hành sẽ loại trừ với Fixed Function, do đố tìm hiều qui trình xử lý pixel của Fixed Function

là điều cần thiết

3.4.1.Xử lý điểm ảnh bằng Fixed Function Pipeline

Sau khi dữ liệu vertex được xử lý ( thành toạ dộ trong không gian chiếu) sẽ được chuyển qua để xử lý đối tượng cơ sở (Primitive Processin)

Clipping Loại bỏ các đối tượng hình học không nhìn thấy được trong khối quan sát ( viewing frustum) đêt tăng hiệu suất dựng hình

Chuẩn hoá hệ toạ độ thuần nhất (Hômgênous Divide) Chia các thành phần của dữ liệu cho phần từ cuối

Ánh xạ Viewport (Viewport Scaling) Ánh xạ dữ liệu vào toạ độ trong Viewport

Xử lý tam giác ( Triangle Setup) Chuẩn bị cho việc nội suy tam giác

và biến đổi các thuộc tính vertex thành thuộc tính điểm ảnh

Trang 31

Sau khi quy trình xử lý đối tượng cơ sở hoàn tất, dữ liệu vertex đã được nội suy thành dữ liệu điểm ảnh sẵn sàng được chuyển sang qui trình xử

lý điểm ảnh (điểm ảnh lúc này chưa phải là giá trị màu mà chỉ mang các thuộc tính do tính toán được từ việc nội suy tamgiác mà thôi) Điểm ảnh sau

đó sẽ tính toán kết hợp các thuộc tính màu sắc và lấy mẫu texture tạo thành điểm màu cuối cùng Qui trình xử lý điểm ảnh bao gồm 2 công đoạn chính

Giai đoạn 1 biến đổi dữ liệ nội suy trong vertex (bao gồm màu diffuse, màu specular và toạ độ texture) thành các thuộc tính màu của điểm ảnh Gồm có các bước sau đây:

- Lấy mẫu texture ( sample texture) Lấy mẫu 1 hay nhiều texture

- hoà màu (Blend colors) Kết hợp các màu trong thuộc tính của điểm ảnh chủ yếu là màu cơ bản (diffuse), màu phản chiếu (specular) với cấcmù lấy mẫu từ texture

Giai đoạn 2 sẽ chuyển điểm màu ở cuối giai đoạn 1 thành điểm màu cuối cùng được dựng lên trên màn hình Quá trình này bao gồm các công đoạn sau đây:

So sánh alpha ( Alpha test) Tiến hành so sánh giá trị alpha để xem màu sắc của điểm ảnh có tham gia vào giá trịmàu cuối cùng hay không

So sánh cập nhật vùng đệm độ sâu ( Depth test) Cập nhật vùng đệm

độ sâu (Depth buffer) bằng độ sâucủa điểm ảnh nếu điểm ảnh được vẽ

So sánh stencil (Stencil test ) Tiến hành kiểm tra stencil nếu điểm ảnh đợi vẽ

Tính toán sương mù (Per-pixel fog) Kết hợp giá trị sương mù với màu của điểm ảnh

Hoà màu dựa trên độ alpha (Alpha blend) Tiến hành kết hợp màu của điểm ảnh đang vẽ với màu của điểm ảnh tường ứng trên màn hình

Dither Thực hiện chuẩn hoá màu

Trang 32

Hiệu chỉnh Gamma Thực hiện hiệu chỉnh gamma trên điểm ảnh cuối cùng.

Trong qui trình xử lý điểm ảnh ở trên, chỉ có giai đoạn 1 là có thể thay thế xử lý bằng Piexel Shader Pixel Shader sau khi kết thúc sẽ trả giá trị màu tính được cho Fixed Function Pipeline Ta hãy xem qua chi tiế xử lý trong giai đoạn 1 của Fixed Function Pipeline Mô hình lý thuyết của Fixed

Function Pipeline như sau:\

Dữ liệu texture (Texture Data) Là dữ liệu của texture lấy từ tập tin hay khung hình (Render Target)

Sampler Dùng để lấy mẫu texture Có nghĩa là dùng toạ độ texture để tìm giá trị màu tương ứng tại toạ độ đó Các nộ lọc texture ( texture filtering)

có thể làm ảnh hưởng đến chất lượng mẫu nhận được (trừ chế độ lọc theo điểm (point filtering)) Fĩed Function Pipeline có tất cả 8 samplers

Cơ chế kết hợp đa texture (Multitexture Blender) bao gồm 8 tầng kết hợp ( Blending Stage) Các tầng kết hợp được sắp chồng lên nhau sao cho đầu ra của đầu ra của tâng 0 trở thành đầu vào cho tần 1, đầu ra của tầng 1 trở thành đầu vào cho tầng 2 và cứ thế Mỗi tầng như vậy gọi là tâng texture ( texture stage)

Cả giai đoạn 1 này ta có thể sử dụng Pixel Shader để xử lý thay cho fixed Function Mô hình lý thuyết của Pixel Shader thay thế tương ứng với Fixed Function như sau

Trang 33

Theo mô hình trên Pixel Shader cũng dùng các samplers để lấy mẫu texture, nhưng giờ đây cơ chế kết hợp đa texture ( Multitexture Blender) đã được thực hiện ngay trong bản thân của Pixel Shader, bằng cách này các tác

vụ kết hợp (blending) hoàn toàn có thể được lập trình lại Một khi đã sử dụng Pixel Shader, ta không còn phải hiệu chỉnh các trạng thái của các tần texture (Texture Stage States) để điều khiển cơ chế kết hợp đa texture nữa vì mọi thứ đã được làm trong Pixel Shader

Đây chính là sức mạnh của Pixel Shader: người lập trình không còn phải tốn nhiều công sức để thiết lập các trạng thái cho các tầng texture

(texture Stage Staes) để điều khiển cơ chế kết hợp đa texture nữa vì mọi thứ

đẫ được làm trong Pixel Shader

Đây chính là sức manh ủa Pixel Shader: người lập trình không còn phải tốn nhiều công sức để thiết lập các trạng thái cho các tầng texture nữa,

họ giờ đây hoàn toàn có thể tự lập trình ra các thuật toán mới để sử dụng, thậm chí hoàn tôánc thể trung chuyển các luồn dữ liệu từ vertex shader vào pixel shader ( nếu dùng kết hợp cả 2 shader) Tuy nhiên vẫn còn những hạn chế do người lập trình vẫn chưa can thiệp được vào giai đoạ 2 của qui trình

xử lý pixel, giai đoạn này vẫn còn bị sự kiểm soát của Fixed Function

Pipeline Phần sau ta sễ xem qua kiến trúc của máy ảo Pixel Shader

3.4.2.Máy ảo Pixel Shader

Trang 34

Pixel Shader dung các toán tử toán học để xử lý dữ liệu bên trong từng điểm ảnh để tính ra giá trị màu sắc cuối cùng của điểm ảnh.

Dữ liệu trong mô hình được di chuyển từ trái sang phải Pixel Shader

sử dụng các thanh ghi ( rgisters) để lưu trữ, quản lý các dữ liệu đầu cào (input), đầu ra ( output), đồng thời thao tác trên chúng nhờ vào các vi lệnh được thực thi bởi đơn vị số học và luận lý (ALU) Pixel Shader khi thi hành

sẽ biến đổi các thuộc tính bên trong của điểm ảnh ( bao gồm vị trí, pháp tuyến, toạ độ texture, màu diffúe…) thành giá trị màu sắc của điểm đó Các thanh ghi dữ liệu vào của Pixel Shader sẽ nhận dữ liệu vào là các giá trị nội suy của vertex Chức năng của các texture sampler là dung toạ độ texture từ các thanh ghi đầu vào để lấy mẫu texture và trả về giá trị màu lấy được

Tương tự như Vertex Shader, Pixel Shader sẽ ghi các giá trị kết quả vào các thanh ghi đầu ra ( thường là giá trị màu sắc của điểm ảnh) Thanh ghi đầu ra sau khi nhận dữ liệu sẽ trả dữ liệu về cho Graphic Pipeline để xử

lý tiếp giai đoạn 2

Sau đây là danh sách các loại thanh ghi được dung trong pixel Shader

và chức năng của chúng

Trang 35

Thanh ghi dữ liệu vào ( input registers) chứa dữ liệu đầu vào ( nhận được từ quá trình xử lý đối tượng cơ sở ( Primitive processing)).

Thanh ghi hằng (constant registers) chứa các hằng số dùng trong ALU

Thanh ghi tạm ( temporary registers) chứa các dữ liệu tạm thời

Thanh ghi dữ liệu ra (output registers ) chứa kết quả tính toán của Pixel shader

Thanh ghi dữ liệu ra ( output registers) chứa kết quả tính toán của Pixel Shader

Thanh ghi điều khiển ( Flow control registers) diều khiển thứ tự các vi lệnh được thực thi

Texture sampler dung toạ độ texture để lấy mẫu texture sau đó trả về lại cho Shader

Các vi lệnh trong Pixel Shader chính là thành phần chính của Pixel Shader Các vi lệnh đảm nhận việc thực thi một số tác vụ toán học trên dữ liệu ví dụ như tính tích vô hướng ( dot product), nhân ma trận, tính vector đơn vị… danh sách các loại thanh ghi cũng như các vi lệnh có thể tham khảo trong Direct3D SDK

3.4.3 Cấu trúc của một chương trình Pixel Shader bằng

Trang 36

Ghi chú ( Comments) Được dùng để ghi các ghi chú trong chương trình như ý nghĩa của dữ liệu chứa trong thanh ghi… ghi chú được bắt đầu bằng (//) hay (;) cho ghi chú 1 dòng và ( /* ….*/) cho ghi chú nhiều dòng.

Các hằng thanh ghi (constants) Các hằng được định nghĩa sau từ khoá def Các hằng thanh ghi có thể chứa tới 4 giá trị cho mỗi thanh ghi Như ở ví

dụ trên thanh ghi c8được gán giả là ( 0,1,2,3) Các hằng thanh ghi còn có thể đựơc gán giá trị bên trong chương trình chính thông qua phương thức

idirect3ddevice9::setvertexshaderconsstantx

Định nghĩa dữ liệu trong thanh ghi đầu vào ( input Register

Declarations) Các thanh ghi dữliệu vào như v0,v1… cần phải được định nghĩa dữ liệu trước khi sử dụng Việc định nghĩa này sẽ giúp Direct3D ánh

xạ được các dữ liệu thành phần trong Vertex trên bộ nhớ vào đúng các thanh ghi tương ứng Trong ví dụ trên, thanh ghi v0 sẽ chứa toạ độ vị trí, và v1 sẽ chứa toạ độ texture của vertex

Các vi lệnh (Instructions) Phần cuối cùng của 1 chương trình Vertex Shader là các vi lệnh hợp ngữ Mọi chương trình Vertex Shader đều phải xuất giá trị ra ít nhất là vào thanh ghi vị trí opos Trong cí dụ trên chương trình xuất vào 2 thanh ghi là thanh ghi vị trí opos và thanh ghi toạ độ Texture ot0

3.5 Pixel Shader

Pixel Shader là chương trình tính toán và xử lý màu trên 1 hay nhiều điểm ảnh Pixel Shader sẽ được thực thi 1 lần cho mỗi điểm ảnh được dựng lên màn hình từ dữ liệu vertex vì thế pixel Shader khi chạy sẽ tốn nhiều thời gian hơn Vertex Shader ( chỉ xử lý 1 lần cho mỗi vertex) Pixel Shader có thể được viết bằng hợp ngữ hay HLSL Các phiên bản hiện nay của Pixel Shader gồm có ps_1_1,ps_1_2,ps_1_3 Ps_1_4, ps_2_0,ps_2_x và cuối cùng là ps_3_0

Cũng giống như Vertex Shader, Poxel Shader khi thi hành sẽ loại trừ với Fixed Function, do đố tìm hiều qui trình xử lý pixel của Fixed Function

là điều cần thiết

3.5.1 Xử lý điểm ảnh bằng Fixed Function Pipeline

Trang 37

Sau khi dữ liệu vertex được xử lý ( thành toạ dộ trong không gian chiếu) sẽ được chuyển qua để xử lý đối tượng cơ sở (Primitive Processin).

Clipping Loại bỏ các đối tượng hình học không nhìn thấy được trong khối quan sát ( viewing frustum) đêt tăng hiệu suất dựng hình

Chuẩn hoá hệ toạ độ thuần nhất (Hômgênous Divide) Chia các thành phần của dữ liệu cho phần từ cuối

Ánh xạ Viewport (Viewport Scaling) Ánh xạ dữ liệu vào toạ độ trong Viewport

Xử lý tam giác ( Triangle Setup) Chuẩn bị cho việc nội suy tam giác

và biến đổi các thuộc tính vertex thành thuộc tính điểm ảnh

Sau khi quy trình xử lý đối tượng cơ sở hoàn tất, dữ liệu vertex đã được nội suy thành dữ liệu điểm ảnh sẵn sàng được chuyển sang qui trình xử

lý điểm ảnh (điểm ảnh lúc này chưa phải là giá trị màu mà chỉ mang các thuộc tính do tính toán được từ việc nội suy tamgiác mà thôi) Điểm ảnh sau

đó sẽ tính toán kết hợp các thuộc tính màu sắc và lấy mẫu texture tạo thành điểm màu cuối cùng Qui trình xử lý điểm ảnh bao gồm 2 công đoạn chính

Trang 38

Giai đoạn 1 biến đổi dữ liệu nội suy trong vertex (bao gồm màu

diffuse, màu specular và toạ độ texture) thành các thuộc tính màu của điểm ảnh Gồm có các bước sau đây:

- Lấy mẫu texture ( sample texture) Lấy mẫu 1 hay nhiều texture

- hoà màu (Blend colors) Kết hợp các màu trong thuộc tính của điểm ảnh chủ yếu là màu cơ bản (diffuse), màu phản chiếu (specular) với cấcmù lấy mẫu từ texture

Giai đoạn 2 sẽ chuyển điểm màu ở cuối giai đoạn 1 thành điểm màu cuối cùng được dựng lên trên màn hình Quá trình này bao gồm các công đoạn sau đây:

So sánh alpha ( Alpha test) Tiến hành so sánh giá trị alpha để xem màu sắc của điểm ảnh có tham gia vào giá trịmàu cuối cùng hay không

So sánh cập nhật vùng đệm độ sâu ( Depth test) Cập nhật vùng đệm

độ sâu (Depth buffer) bằng độ sâucủa điểm ảnh nếu điểm ảnh được vẽ

So sánh stencil (Stencil test ) Tiến hành kiểm tra stencil nếu điểm ảnh đợi vẽ

Tính toán sương mù (Per-pixel fog) Kết hợp giá trị sương mù với màu của điểm ảnh

Hoà màu dựa trên độ alpha (Alpha blend) Tiến hành kết hợp màu của điểm ảnh đang vẽ với màu của điểm ảnh tường ứng trên màn hình

Dither Thực hiện chuẩn hoá màu

Hiệu chỉnh Gamma Thực hiện hiệu chỉnh gamma trên điểm ảnh cuối cùng

Trong qui trình xử lý điểm ảnh ở trên, chỉ có giai đoạn 1 là có thể thay thế xử lý bằng Piexel Shader Pixel Shader sau khi kết thúc sẽ trả giá trị màu tính được cho Fixed Function Pipeline Ta hãy xem qua chi tiế xử lý trong giai đoạn 1 của Fixed Function Pipeline Mô hình lý thuyết của Fixed

Function Pipeline như sau:\

Trang 39

Dữ liệu texture (Texture Data) Là dữ liệu của texture lấy từ tập tin hay khung hình (Render Target).

Sampler Dùng để lấy mẫu texture Có nghĩa là dùng toạ độ texture để tìm giá trị màu tương ứng tại toạ độ đó Các nộ lọc texture ( texture filtering)

có thể làm ảnh hưởng đến chất lượng mẫu nhận được (trừ chế độ lọc theo điểm (point filtering)) Fĩed Function Pipeline có tất cả 8 samplers

Cơ chế kết hợp đa texture (Multitexture Blender) bao gồm 8 tầng kết hợp ( Blending Stage) Các tầng kết hợp được sắp chồng lên nhau sao cho đầu ra của đầu ra của tâng 0 trở thành đầu vào cho tần 1, đầu ra của tầng 1 trở thành đầu vào cho tầng 2 và cứ thế Mỗi tầng như vậy gọi là tâng texture ( texture stage)

Cả giai đoạn 1 này ta có thể sử dụng Pixel Shader để xử lý thay cho fixed Function Mô hình lý thuyết của Pixel Shader thay thế tương ứng với Fixed Function như sau

Trang 40

Theo mô hình trên Pixel Shader cũng dùng các samplers để lấy mẫu texture, nhưng giờ đây cơ chế kết hợp đa texture ( Multitexture Blender) đã được thực hiện ngay trong bản thân của Pixel Shader, bằng cách này các tác

vụ kết hợp (blending) hoàn toàn có thể được lập trình lại Một khi đã sử dụng Pixel Shader, ta không còn phải hiệu chỉnh các trạng thái của các tần texture (Texture Stage States) để điều khiển cơ chế kết hợp đa texture nữa vì mọi thứ đã được làm trong Pixel Shader

Đây chính là sức mạnh của Pixel Shader: người lập trình không còn phải tốn nhiều công sức để thiết lập các trạng thái cho các tầng texture

(texture Stage Staes) để điều khiển cơ chế kết hợp đa texture nữa vì mọi thứ

đẫ được làm trong Pixel Shader

Đây chính là sức manh ủa Pixel Shader: người lập trình không còn phải tốn nhiều công sức để thiết lập các trạng thái cho các tầng texture nữa,

họ giờ đây hoàn toàn có thể tự lập trình ra các thuật toán mới để sử dụng, thậm chí hoàn tôánc thể trung chuyển các luồn dữ liệu từ vertex shader vào pixel shader ( nếu dùng kết hợp cả 2 shader) Tuy nhiên vẫn còn những hạn chế do người lập trình vẫn chưa can thiệp được vào giai đoạ 2 của qui trình

xử lý pixel, giai đoạn này vẫn còn bị sự kiểm soát của Fixed Function

Pipeline Phần sau ta sễ xem qua kiến trúc của máy ảo Pixel Shader

3.5.2 Máy ảo Pixel Shader

Ngày đăng: 14/12/2012, 15:09

HÌNH ẢNH LIÊN QUAN

Hình vẽ sau đây minh hoạ cách tạo ra shadoê volume mesh. - Nghiên cứu và xây dựng thử nghiệm với 3d engine
Hình v ẽ sau đây minh hoạ cách tạo ra shadoê volume mesh (Trang 58)
Hình 1: chiếu sáng trên từng Pixel (sử dụng tích vô hướg giữa normal  và vector hướng ánh sáng). - Nghiên cứu và xây dựng thử nghiệm với 3d engine
Hình 1 chiếu sáng trên từng Pixel (sử dụng tích vô hướg giữa normal và vector hướng ánh sáng) (Trang 70)
Hình 1: dữ liệu vertex trong bộ nhớ (được vẽ sưới dạng wireframe) Hình 2: chiếu sáng trên từng đỉnh (per-vertex lighting) bằng Vertex  Shader - Nghiên cứu và xây dựng thử nghiệm với 3d engine
Hình 1 dữ liệu vertex trong bộ nhớ (được vẽ sưới dạng wireframe) Hình 2: chiếu sáng trên từng đỉnh (per-vertex lighting) bằng Vertex Shader (Trang 70)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w