Một Effect file có cấu trúc bao gồm nhiều tham số (parameters), các technique, và các hàm được viết bằng ngôn ngữ HLSL. Vì Effect file rất lớn và trong Engine Effect chỉ sử dụng với mục đích như là các technique nên trong phần này chỉđề cập tới Effect file dưới dạng các technique mà thôi.
Effect file (chỉ dùng technique) gồm nhiều technique. Mỗi technique được dùng cho một lần vẽ, nó cung cấp 1 kiểu hay cách thức dựng hình. Một technique được cấu tạo từ nhiều render pass.
¾ Cú pháp của 1 technique
technique [ id ] [< annotation(s) >] { pass(es) }
id. Tên của technique (có thể có hay không).
annotation (s). Gồm 0 hay nhiều nhãn của technique, nhãn trong technique được dùng để lưu trữ các thông tin riêng của người dùng.
pass (es). Gồm 0 hay nhiều pass. Mỗi pass chứa đựng nhiều trạng thái và giá trị của chúng.
¾ Cú pháp của 1 pass:
pass [ id ] [< annotation(s) >] { state assignment(s) }
id. Là tên của pass (có thể có hay không)
annotation (s). Gồm 0 hay nhiều nhãn của pass, nhãn trong pass được dùng để lưu trữ các thông tin riêng của người dùng.
assignment (s). Gồm nhiều trạng thái được gán giá trị (hay các biểu thức) (danh sách các trạng thái hợp lệ có thể xem trong DirectX SDK).
Ví dụ: 1 Effect file vẽ dùng cho thuật toán shadow volume technique RenderShadowVolume { pass P0 < string vsh = "vertex_shadowvol_11"; string psh = null; > { CullMode = Ccw;
// Disable writing to the frame buffer AlphaBlendEnable = true;
SrcBlend = Zero; DestBlend = One;
// Disable writing to depth buffer ZWriteEnable = false;
ZFunc = Less;
// Setup stencil states StencilEnable = true; StencilRef = 1; StencilMask = 0xFFFFFFFF; StencilWriteMask = 0xFFFFFFFF; StencilFunc = Always; StencilZFail = Decr; StencilPass = Keep; } pass P1 < string vsh = "vertex_shadowvol_11"; string psh = null; > { CullMode = Cw; StencilZFail = Incr; } }
Trong Effect file trên chỉ có 1 technique tên là RenderShadowVolume, trong technique này sử dụng 2 pass render là P0, và P1. Trong P0 và P1 là nhiều các trạng thái được gán giá trị, các trạng thái này sau đó sẽ được Direct3D chuyển giao cho phần cứng để thiết lập. Ởđầu mỗi pass được gán nhãn là các biến kiểu string (nhãn này sẽđược xử lý nội bộ bởi hệ thống shader của Engine).
Lưu ý là các trạng thái trong pass P1 sẽ được kế thừa lại các trạng thái trong pass P0 trừ 2 trạng thái là CullMode và StencilZFail.