关于technique和pass的注解意义,有人能给解释一下吗?
我是一名美工,最近正在学习shader,如下代码是一个可以正常在MAX里编译的发光shader的源代码,关于technique和Pass的Script的注解我一直没弄明白,请哪位朋友给指点一二吧。
---------------------------------------------------------------------------------------------------
string ParamID = "0x000001";
float3 EmissiveColor
<
string UIName = "Color";
string UIWidget = "Color";
> = {1.0f, 0.0196078f, 0.0196078f };
float3 GlowColor : Emissive
<
string UIName = "Color";
string UIWidget = "Color";
> = {1.0f, 0.25098f, 0.25098f };
//----------------------------------
float4x4 wvp : WorldViewProjection;
//float4x4 worldI : WorldInverse;
// Render-to-Texture (RTT) glow example. Copyright NVIDIA (provided 'as is'). Adapted from HammerTime.fx in 3dsmax
float4 ClearColor : DIFFUSE = {0,0,0,1.0};
float ClearDepth
<
string UIWidget = "none";
> = 1.0;
float Script : STANDARDSGLOBAL
<
string UIWidget = "none";
string ScriptClass = "object";
string ScriptOrder = "standard";
string ScriptOutput = "color";
// Call a script in the main technique.
string Script = "Technique=Technique?Complete;";
> = 0.8;
#define RTT_SIZE 128
float TexelIncrement <
string UIName = "Texel Stride for Blur";
string UIWidget = "None";
> = 1.0f / RTT_SIZE;
texture GlowMap1 : RENDERCOLORTARGET
<
float2 Dimensions = { RTT_SIZE, RTT_SIZE };
int MIPLEVELS = 1;
string format = "X8R8G8B8";
string UIWidget = "None";
>;
texture GlowMap2 : RENDERCOLORTARGET
<
float2 Dimensions = { RTT_SIZE, RTT_SIZE };
int MIPLEVELS = 1;
string format = "X8R8G8B8";
string UIWidget = "None";
>;
sampler GlowSamp1 = sampler_state
{
texture = <GlowMap1>;
AddressU = CLAMP;
AddressV = CLAMP;
AddressW = CLAMP;
MIPFILTER = NONE;
MINFILTER = LINEAR;
MAGFILTER = LINEAR;
};
sampler GlowSamp2 = sampler_state
{
texture = <GlowMap2>;
AddressU = CLAMP;
AddressV = CLAMP;
AddressW = CLAMP;
MIPFILTER = NONE;
MINFILTER = LINEAR;
MAGFILTER = LINEAR;
};
texture DepthBuffer : RENDERDEPTHSTENCILTARGET
<
float2 Dimensions = { RTT_SIZE, RTT_SIZE };
string format = "D24S8";
string UIWidget = "None";
>;
// input from application
struct a2v {
float4 position : POSITION;
float2 texCoord : TEXCOORD0;
};
// output to fragment program
struct v2f {
float4 position : POSITION;
float2 texCoord : TEXCOORD0;
};
struct VS_OUTPUT_BLUR
{
float4 Position : POSITION;
float4 TexCoord0 : TEXCOORD0;
float4 TexCoord1 : TEXCOORD1;
float4 TexCoord2 : TEXCOORD2;
float4 TexCoord3 : TEXCOORD3;
float4 TexCoord4 : TEXCOORD4;
float4 TexCoord5 : TEXCOORD5;
float4 TexCoord6 : TEXCOORD6;
float4 TexCoord7 : TEXCOORD7;
float4 TexCoord8 : COLOR;
};
struct VS_OUTPUT
{
float4 Position : POSITION;
float4 Diffuse : COLOR0;
float4 TexCoord0 : TEXCOORD0;
};
v2f VS(a2v In)
{
v2f Out = (v2f)0;
Out.position = mul(In.position, wvp); //transform vert position to homogeneous clip space
return Out;
}
v2f VS_Quad(a2v In, float3 DEFTexCoord : TEXCOORD0)
{
v2f Out = (v2f)0;
Out.position = In.position;
Out.texCoord = DEFTexCoord;
return Out;
}
VS_OUTPUT_BLUR VS_Quad_Vertical_9tap(float3 Position : POSITION,
float3 TexCoord : TEXCOORD0)
{
VS_OUTPUT_BLUR OUT = (VS_OUTPUT_BLUR)0;
OUT.Position = float4(Position, 1);
float3 Coord = float3(TexCoord.x + TexelIncrement, TexCoord.y + TexelIncrement, 1);
OUT.TexCoord0 = float4(Coord.x, Coord.y + TexelIncrement, TexCoord.z, 1);
OUT.TexCoord1 = float4(Coord.x, Coord.y + TexelIncrement * 2, TexCoord.z, 1);
OUT.TexCoord2 = float4(Coord.x, Coord.y + TexelIncrement * 3, TexCoord.z, 1);
OUT.TexCoord3 = float4(Coord.x, Coord.y + TexelIncrement * 4, TexCoord.z, 1);
OUT.TexCoord4 = float4(Coord.x, Coord.y, TexCoord.z, 1);
OUT.TexCoord5 = float4(Coord.x, Coord.y - TexelIncrement, TexCoord.z, 1);
OUT.TexCoord6 = float4(Coord.x, Coord.y - TexelIncrement * 2, TexCoord.z, 1);
OUT.TexCoord7 = float4(Coord.x, Coord.y - TexelIncrement * 3, TexCoord.z, 1);
OUT.TexCoord8 = float4(Coord.x, Coord.y - TexelIncrement * 4, TexCoord.z, 1);
return OUT;
}
VS_OUTPUT_BLUR VS_Quad_Horizontal_9tap(float3 Position : POSITION,
float3 TexCoord : TEXCOORD0)
{
VS_OUTPUT_BLUR OUT = (VS_OUTPUT_BLUR)0;
OUT.Position = float4(Position, 1);
float3 Coord = float3(TexCoord.x + TexelIncrement, TexCoord.y + TexelIncrement, 1);
OUT.TexCoord0 = float4(Coord.x + TexelIncrement, Coord.y, TexCoord.z, 1);
OUT.TexCoord1 = float4(Coord.x + TexelIncrement * 2, Coord.y, TexCoord.z, 1);
OUT.TexCoord2 = float4(Coord.x + TexelIncrement * 3, Coord.y, TexCoord.z, 1);
OUT.TexCoord3 = float4(Coord.x + TexelIncrement * 4, Coord.y, TexCoord.z, 1);
OUT.TexCoord4 = float4(Coord.x, Coord.y, TexCoord.z, 1);
OUT.TexCoord5 = float4(Coord.x - TexelIncrement, Coord.y, TexCoord.z, 1);
OUT.TexCoord6 = float4(Coord.x - TexelIncrement * 2, Coord.y, TexCoord.z, 1);
OUT.TexCoord7 = float4(Coord.x - TexelIncrement * 3, Coord.y, TexCoord.z, 1);
OUT.TexCoord8 = float4(Coord.x - TexelIncrement * 4, Coord.y, TexCoord.z, 1);
return OUT;
}