- 注册时间
- 2006-1-26
- 最后登录
- 2025-2-26
⑥精研
- 积分
- 4800

|

楼主 |
发表于 2007-6-28 13:22:48
|
显示全部楼层
material mtl_toon
{
skin1=bmp_normalizationcube;
skin2=bmp_toonlookup;
event=mtl_toon_init;
effect
"
texture entSkin1;
texture mtlSkin1;
texture mtlSkin2;
matrix matWorldViewProj;
matrix matWorld;
vector vecSkill41;
vector vecSunDir;
technique toon
{
//-------------------------------paint
pass p0
{
texture[0]=<mtlSkin1>;
texture[1]=<mtlSkin2>;
texture[2]=<entSkin1>;
addressU[1]=clamp;
magFilter[2]=linear;
minFilter[2]=linear;
mipFilter[2]=linear;
vertexShaderConstant[0]=<matWorldViewProj>;
vertexShaderConstant[4]=<matWorld>;
vertexShaderConstant[16]=<vecSunDir>;
vertexShader=
asm
{
vs.1.1
dcl_position v0
dcl_normal v3
dcl_texcoord0 v7
dcl_texcoord1 v8
m4x4 oPos,v0,c0 // transform position to clip space
m3x3 r0,v3,c4 // transform normal to world space
dp3 r0.w,r0,r0 // renormalize it
rsq r0.w,r0.w
mul r0,r0,r0.w
mov oT0.xyz,r0.xyz // output normal to oT0
mov oT1.xyz,-c16 // output light direction to oT1
mov oT2.xy,v7.xy // output uvs to oT2
};
pixelShader=
asm
{
ps.1.3
tex t0 // fetch normalized normal
texdp3tex t1,t0_bx2 // light.normal=u -> use u to lookup in t1
// _bx2 -> 0..1 of normcube will be -1..1
tex t2 // sample color map
mul r0,t2,t1 // modulate with shading
};
}
//--------------------------------------------ink
pass p1
{
cullMode=cw;
vertexShaderConstant[0]=<matWorldViewProj>;
vertexShaderConstant[16]=<vecSkill41>; // outline_thickness, 0, 0, 0
vertexShader=
asm
{
vs.1.1
dcl_position v0
dcl_normal v3
dcl_texcoord0 v7
dcl_texcoord1 v8
mov r0,v0
mul r1,c16.x,v3 // scale normal
add r0.xyz,r0.xyz,r1.xyz // shell offset
//(vertex position + scaled normal)
m4x4 oPos,r0,c0 // transform position to clip space
};
pixelShader=
asm
{
ps.1.3
def c0,0,0,0,1 // outline rgba
mov r0,c0
};
}
}
";
}
毕竟是教程的脚本,代码还有待改进 |
|