Khóa luận Nghiên cứu và xây dựng thử nghiệm 3D Engine - Phần 3

Cấu trúc chương trình Pixel Shader chia làm 3 phần chính:

Chỉthịphiên bản (Version Instruction). Cho biết phiên bản Pixel Shader

được biên dịch thành

Các chỉthị định nghĩa (Setup Instructions). Định nghĩa các luồng dữliệu

trong các thanh ghi, các phiên bản sau đòi hỏi phải định nghĩa cảdữliệu đầu vào và

đầu ra.

Các vi lệnh thi hành. Phần cuối cùng của chương trình là các vi lệnh thi

hành.

pdf17 trang | Chuyên mục: Mạng Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 1630 | Lượt tải: 0download
Tóm tắt nội dung Khóa luận Nghiên cứu và xây dựng thử nghiệm 3D Engine - Phần 3, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ới nhau (gồm kết dính dữ liệu và kết dính hàm). 
 Trong Nwfc hệ thống truy xuất tập tin là duy nhất, do đó hệ thống này sẽ được 
chia xẻ cho toàn bộ các module vệ tinh để sử dụng. Đó là một trong các ví dụ về vai 
trò đảm bảo tính kết dính của module chính. 
¾ Các module vệ tinh. Gồm nhiều module đảm nhận các chức năng khác nhau 
có thể hoàn toàn độc lập với nhau hay phụ thuộc lẫn nhau. Các module này có 
 Chương 3. Nwfc Engine 
 - 33 - 
nhiệm vụ phải hiện thực hóa các giao diện (interface) do module chính cung cấp. Ví 
dụ module đảm nhận chức năng dựng hình 3D bằng Direct3D, module đảm nhận 
chức năng truy xuất tập tin. Các module này hoàn toàn trong suốt (transparent) với 
ứng dụng đầu cuối, vì chúng chỉ được sử dụng nội bộ bởi module chính mà thôi. 
Giới thiệu sơ lược về các module sử dụng trong Engine. 
 Module renderer: là tập các module phụ thuộc vào thư viện đồ họa dựng hình 
3D. Hiện nay trên thế giới chỉ có 2 thư viện đồ họa 3D phổ biến được nhiều người 
sử dụng là OpenGL và Direct3D (1 phần trong tập hợp thư viện multimedia DirectX 
của Microsoft), dù trong Engine chỉ được cài đặt sẵn module renderer cho thư viện 
Direct3D mà thôi (cụ thể là phiên bản 9.0c) nhưng ta hoàn toàn có thể thêm module 
dựng hình cho OpenGL bằng cách phát triển thêm module mới mà hoàn toàn không 
phải thông báo gì cho module chính hay compile lại code. Nhiệm vụ của module 
này phải hiện thực hóa các giao diện về đồ họa 3D của module chính. 
 Module quản lý và truy xuất tập tin (file system): Đảm nhận vai trò thao tác, 
tìm kiếm trên tập tin cũng như đọc hay ghi tập tin, phụ thuộc vào thư viện tập tin 
như Standard FileIO, IOStream, hay WIN32 File System. Mọi module khác muốn 
truy xuất tập tin đều thông qua module này. Module này được tích hợp trong 
module chính mà không phải là module rời. Ta có thể tách rời module này khi ta 
muốn sử dụng các thư viện truy xuất tập tin khác nhau (thư viện tập tin được sử 
dụng trong Engine là Standard FileIO). 
 Các module khác như module vật lý, module ngôn ngữ kịch bản (Scripting) 
… sẽ được phát triển khi mở rộng Engine sau này. 
3.4. Cấu trúc của Nwfc Engine 
 Engine là một tập các thành phần, mỗi thành phần thể hiện 1 chức năng riêng 
biệt. Một số chức năng chỉ sử dụng cục bộ nhưng hầu hết các chức năng được kết 
xuất (export) cho ứng dụng đầu cuối dưới dạng giao diện (interface). 
 Chương 3. Nwfc Engine 
 - 34 - 
Hình 3-2 Mô hình các thành phần của Nwfc Engine 
3.4.1. Các thành phần trong Nwfc module 
 Mesh. Thành phần đảm nhận chức năng lưu trữ dữ liệu 3 chiều mà chủ yếu 
là đỉnh (vertex) và chỉ số (index). 
 MeshBuilder. Có vai trò hỗ trợ lập trình viên, giúp họ có thể sửa đổi hay 
thao tác trên dữ liệu 3D được chứa trong Mesh một cách nhanh và thuận tiện nhất. 
 Texture. Là thành phần xử lý các ảnh bề mặt texture. Các texture là các tài 
nguyên chia xẻ (shared resource) và được quản lý nội bộ trong Engine bởi số đếm 
tham chiếu (reference count). 
 Chương 3. Nwfc Engine 
 - 35 - 
 TextureManager. Hệ thống các texture được quản lý nội bộ trong Engine 
bởi TextureManager, thành phần này sẽ đảm bảo các texture có cùng tên và đường 
dẫn sẽ tham chiếu đến cùng 1 đối tượng trong bộ nhớ giúp tiết kiệm rất nhiều bộ 
nhớ đối với các ứng dụng lớn. Các hệ thống manager và cơ chế chia xẻ tài nguyên 
bằng số đếm tham chiếu được sử dụng rất phổ biến trong Engine. 
 Material. Đây là trái tim đồ họa của toàn bộ Engine. Thành phần này đảm 
nhận mọi chức năng về chất liệu hiển thị trên bề mặt 3D như độ bóng, vân bề mặt, 
độ phản chiếu, độ khúc xạ… Nói chung mọi vật thể đều có chất liệu của nó, gỗ thì 
có chất liệu gỗ, sắt thì có chất liệu kim loại. Mọi tính chất về chất liệu như thế sẽ 
được quản lý bởi thành phần này. Cũng giống như texture, material cũng là sử dụng 
reference count để quản lý chia xẻ tài nguyên. 
 RenderSystem. Đây không phải là 1 thành phần mà là 1 hệ thống. Hệ thống 
này sẽ đảm nhận quản lý toàn bộ chức năng đồ họa của toàn bộ Engine. Mọi hành 
động mà ứng dụng đầu cuối muốn triển khai về mặt đồ họa đều phải thông qua hệ 
thống này. Hệ thống này còn đảm nhận luôn chức năng quản lý cho các material. 
 RenderAPI. Đây là thành phần đóng vai trò giao tiếp với phần cứng và với 
các thư viện đồ họa cấp thấp giúp thực hiện các chức năng trên phần cứng. Thành 
phần này sẽ được hiện thực hóa trên các 3D API cụ thể (như Direct3D hay 
OpenGL). 
 Shader. Giúp quản lý và tích hợp các thông tin cần thiết khi dựng hình như 
các trạng thái của phần cứng, Vertex Shader, Pixel Shader… Shader được sử dụng 
trong material và hoàn toàn có thể được chia xẻ giữa các material khác nhau. 
 FileSystem. Hệ thống quản lý truy xuất và tìm kiếm tập tin. Mọi thành phần 
khác muốn thao tác trên tập tin đều phải thông qua thành phần này. Ta phải sử dụng 
1 hệ thống tập tin duy nhất cho mọi thành phần vì sự phụ thuộc vào các thư viện tập 
tin được sử dụng như (StandardFileIO hay Win32FileIO). Ngoài ra sự quản lý tập 
 Chương 3. Nwfc Engine 
 - 36 - 
trung còn giúp ta triển khai các hình thức lưu trữ khác nhau (như lưu trữ trong tập 
tin zip chẳng hạn). 
 Parameter files. Đây là thành phần hỗ trợ định dạng tập tin Parameter của 
Engine. Định dạng tập tin Parameter sẽ được trình bày ở phần sau. Tập tin 
Parameter được sử dụng rất phổ biến trong cũng như ngoài Engine. Nó giúp định 
nghĩa cấu trúc tập tin material... và được dùng rất nhiều cho Game demo. 
 Math. Thư viện toán dùng cho 3D, hỗ trợ vector 2..4 chiều, quaternion, ma 
trận 4x4, color, mặt phẳng. 
 NwfcUtil. Hỗ trợ ứng dụng đầu cuối có thể truy xuất các thành phần trong 
Engine. 
3.4.2. Các thành phần trong RendererDX9 module 
 Các thành phần trong module này chủ yếu là các thành phần hiện thực hóa các 
giao diện của Nwfc module trên nền của 3D API Direct3D 9.0c. Đây là module 
hoàn toàn phụ thuộc Direct3D. Các thành phần: 
 MeshDX9. Hiện thực hóa thành phần Mesh. 
 ShaderDX9. Hiện thực hóa Shader. 
 RenderAPI_DX9. Hiện thực hóa RenderAPI. 
 Ngoài ra module này còn nhiều thành phần mang tính chất nội bộ, chỉ được sử 
dụng trong module này mà thôi. 
 StateManager. Quản lý trạng thái phần cứng một cách hiệu quả giúp tăng 
tốc độ khung hình, giảm số lần thay đổi trạng thái qua các lần gọi lệnh vẽ xuống 
mức thấp nhất đồng thời phục hồi lại các trạng thái đã thay đổi cho các lần vẽ sau. 
 HardwareShaderDX9. Đây là thành phần chính triển khai trực tiếp công 
nghệ Vertex Shader và Pixel Shader trên phần cứng, do Shader là công nghệ phụ 
thuộc 3D API, nên thành phần phải được cài đặt trong module này. 
 Chương 3. Nwfc Engine 
 - 37 - 
 HWShaderManager. Quản lý các HardwareShaderDX9, thành phần này 
đảm bảo các HardwareShaderDX9 có cùng tên tập tin sẽ tham chiếu đến cùng một 
đối tượng. 
 MeshManager. Quản lý các MeshDX9. 
 ShaderManager. Quản lý các Shader. 
 RdrDX9_Linker. Đây là thành phần giúp trao đổi thông tin giữa module 
nwfc.dll và module renderer_DX9.dll. Module chính thông qua thành phần này sẽ 
truyền các thông tin cần thiết của mình vào module renderer_DX9 để module này 
có thể sử dụng như hệ thống tập tin (file system), các tham số cấu hình (graphic 
config)… 
 Trong các thành phần của Engine 2 thành phần là hệ thống chất liệu (material) 
và hệ thống tập tin parameter là 2 thành phần có tính ưu việt nhất sẽ được trình bày 
rõ hơn ở phần sau. 
3.5. Hệ thống chất liệu (material) 
3.5.1. Giới thiệu 
 Các vật thể trong thế giới thực đều được cấu thành bởi rất nhiều các chất liệu 
khác nhau. Có chất liệu thì trơn láng phản chiếu ánh sáng như bề mặt kim loại, cũng 
có chất liệu thì trong suốt mờ đục như các vật làm bằng plastic. Hệ thống chất liệu 
(material) của Nwfc Engine cũng đảm nhận vai trò gần giống như chất liệu trong 
thế giới thực. Material sẽ quản lý tất cả các thuộc tính làm nên bề mặt của vật thể 
giúp cho vật thể được hiển thị sao cho càng giống với thế giới thực càng tốt. 
 Nếu không có chất liệu thì đối tượng 3D khi được vẽ ra sẽ trông như thế nào ? 
 Chương 3. Nwfc Engine 
 - 38 - 
Hình 3-3 Ấm trà được vẽ ở chế độ khung và ở chế độ bình thường 
Hình 3-4 Ấm trà được vẽ với các chất liệu khác nhau 
 Rõ ràng khi một đối tượng 3D được vẽ với các chất liệu khác nhau thì sẽ cho ra 
được hình ảnh rất khác nhau. 
3.5.2. Cấu trúc của hệ thống chất liệu (material) 
Hình 3-5 Cấu trúc của material 
 Chương 3. Nwfc Engine 
 - 39 - 
 Cấu trúc của 1 chất liệu gồm nhiều tầng, tầng càng cao thì mức độ trừu tượng 
hóa càng cao và càng ít giao tiếp với phần cứng, ngược lại tầng càng thấp thì giao 
tiếp với phần cứng và độ phụ thuộc vào 3D API càng lớn. 
 Material. Chính bản thân của chất liệu, tầng này có mức độ trừu tượng cao 
do ít giao tiếp với phần cứng. Material đảm nhận vai trò xử lý các thông số thuộc 
tính đồng thời chuyển giao các thông số này cho các tầng thấp hơn sử dụng. Các 
thông số này có thể được material quản lý trên tập tin hay trên bộ nhớ. 
 Textures. Là các ảnh texture của bề mặt, các ảnh này có thể gồm nhiều loại 
khác nhau và được sử dụng cho các mục đích khác nhau. 
 Shader. Là thành phần quản lý chức năng dựng hình của material, mọi chức 
năng vẽ của material đều phải thông qua thành phần này. Một Shader bao gồm một 
hay nhiều lần dựng hình (gọi là render pass). 
 Render passes. Là 1 lần vẽ hình ảnh vào frame buffer. Mỗi render pass gồm 
các trạng thái phần cứng, vertex shader và pixel shader hay fixed function (khi 
không sử dụng vertex shader hay pixel shader) được sử dụng trong lần vẽ đó. 
3.5.3. Material 
 Material trong Engine có thể tạo bằng code hay đọc từ tập tin. Định dạng tập tin 
của material là định dạng tập tin Parameter của Engine. Thông tin material được lưu 
trong tập tin bao gồm các texture và shader, material hỗ trợ tối đa 4 texture tương 
ứng 4 tầng texture [0..4] (texture stage) của Direct3D. 
 Cú pháp của 1 material như sau: 
textures 
{ 
 texture0 texturefile [ texture flag(s)] 
 . . . 
 texture4 texturefile [ texture flag(s)] 
} 
shader shaderfile 

File đính kèm:

  • pdfthu_nghiem_3d_engine_3.pdf