| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /******************************************************************************/
- #include "!Header.h"
- #include "Overlay.h"
- /******************************************************************************/
- #define PARAMS \
- uniform Bool skin ,\
- uniform Bool normal
- /******************************************************************************/
- void VS
- (
- VtxInput vtx,
- out Vec outTex :TEXCOORD0, // xy=uv, z=alpha
- out Matrix3 outMatrix:TEXCOORD1,
- out Vec4 outVtx :POSITION ,
- PARAMS
- )
- {
- Matrix3 m;
- m[0]=OverlayParams.mtrx[0]/Length2(OverlayParams.mtrx[0]);
- m[1]=OverlayParams.mtrx[1]/Length2(OverlayParams.mtrx[1]);
- m[2]=OverlayParams.mtrx[2]/Length2(OverlayParams.mtrx[2]);
- outTex =mul(m, vtx.pos()-OverlayParams.mtrx[3]);
- outTex.xy=outTex.xy*0.5f+0.5f;
- outTex.z =1 - (Abs(outTex.z)-OverlayOpaqueFrac())/(1-OverlayOpaqueFrac()); // Abs(outTex.z)/-(1-OverlayOpaqueFrac()) + (OverlayOpaqueFrac()/(1-OverlayOpaqueFrac())+1)
- if(!skin)
- {
- outMatrix[1]=Normalize(TransformDir(OverlayParams.mtrx[1]));
- outMatrix[2]=Normalize(TransformDir(OverlayParams.mtrx[2]));
- outVtx=Project(TransformPos(vtx.pos()));
- }else
- {
- VecI bone=vtx.bone();
- outMatrix[1]=Normalize(TransformDir(OverlayParams.mtrx[1], bone, vtx.weight()));
- outMatrix[2]=Normalize(TransformDir(OverlayParams.mtrx[2], bone, vtx.weight()));
- outVtx=Project(TransformPos(vtx.pos(), bone, vtx.weight()));
- }
- outMatrix[0]=Cross(outMatrix[1], outMatrix[2]);
- }
- /******************************************************************************/
- Vec4 PS
- (
- Vec inTex :TEXCOORD0,
- Matrix3 inMatrix:TEXCOORD1,
- out Vec4 outNrm:COLOR1,
- PARAMS
- ):COLOR
- {
- Vec4 col =Tex(Col, inTex.xy);
- Flt alpha=Sat(inTex.z)*OverlayAlpha();
- if(normal)
- {
- Vec4 tex =Tex(Nrm, inTex.xy); // #MaterialTextureChannelOrder
- //Flt specular=tex.z*MaterialSpecular();
- VecH nrm;
- nrm.xy =(tex.xy*2-1)*MaterialRough();
- //if(detail)nrm.xy+=det.xy;
- nrm.z =CalcZ(nrm.xy);
- nrm =Transform(nrm, inMatrix);
- col.a=tex.w;
- #if SIGNED_NRM_RT
- outNrm.xyz=nrm;
- #else
- outNrm.xyz=nrm*0.5f+0.5f;
- #endif
- }
- col.a*=alpha;
- col *=MaterialColor();
- if(normal)outNrm.w=col.a;
- return col;
- }
- /******************************************************************************/
- CUSTOM_TECHNIQUE
- /******************************************************************************/
|