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.
ớ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:
- thu_nghiem_3d_engine_3.pdf