Overlay.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /******************************************************************************/
  2. #include "!Header.h"
  3. #include "Overlay.h"
  4. /******************************************************************************/
  5. #define PARAMS \
  6. uniform Bool skin ,\
  7. uniform Bool normal
  8. /******************************************************************************/
  9. void VS
  10. (
  11. VtxInput vtx,
  12. out Vec outTex :TEXCOORD0, // xy=uv, z=alpha
  13. out Matrix3 outMatrix:TEXCOORD1,
  14. out Vec4 outVtx :POSITION ,
  15. PARAMS
  16. )
  17. {
  18. Matrix3 m;
  19. m[0]=OverlayParams.mtrx[0]/Length2(OverlayParams.mtrx[0]);
  20. m[1]=OverlayParams.mtrx[1]/Length2(OverlayParams.mtrx[1]);
  21. m[2]=OverlayParams.mtrx[2]/Length2(OverlayParams.mtrx[2]);
  22. outTex =mul(m, vtx.pos()-OverlayParams.mtrx[3]);
  23. outTex.xy=outTex.xy*0.5f+0.5f;
  24. outTex.z =1 - (Abs(outTex.z)-OverlayOpaqueFrac())/(1-OverlayOpaqueFrac()); // Abs(outTex.z)/-(1-OverlayOpaqueFrac()) + (OverlayOpaqueFrac()/(1-OverlayOpaqueFrac())+1)
  25. if(!skin)
  26. {
  27. outMatrix[1]=Normalize(TransformDir(OverlayParams.mtrx[1]));
  28. outMatrix[2]=Normalize(TransformDir(OverlayParams.mtrx[2]));
  29. outVtx=Project(TransformPos(vtx.pos()));
  30. }else
  31. {
  32. VecI bone=vtx.bone();
  33. outMatrix[1]=Normalize(TransformDir(OverlayParams.mtrx[1], bone, vtx.weight()));
  34. outMatrix[2]=Normalize(TransformDir(OverlayParams.mtrx[2], bone, vtx.weight()));
  35. outVtx=Project(TransformPos(vtx.pos(), bone, vtx.weight()));
  36. }
  37. outMatrix[0]=Cross(outMatrix[1], outMatrix[2]);
  38. }
  39. /******************************************************************************/
  40. Vec4 PS
  41. (
  42. Vec inTex :TEXCOORD0,
  43. Matrix3 inMatrix:TEXCOORD1,
  44. out Vec4 outNrm:COLOR1,
  45. PARAMS
  46. ):COLOR
  47. {
  48. Vec4 col =Tex(Col, inTex.xy);
  49. Flt alpha=Sat(inTex.z)*OverlayAlpha();
  50. if(normal)
  51. {
  52. Vec4 tex =Tex(Nrm, inTex.xy); // #MaterialTextureChannelOrder
  53. //Flt specular=tex.z*MaterialSpecular();
  54. VecH nrm;
  55. nrm.xy =(tex.xy*2-1)*MaterialRough();
  56. //if(detail)nrm.xy+=det.xy;
  57. nrm.z =CalcZ(nrm.xy);
  58. nrm =Transform(nrm, inMatrix);
  59. col.a=tex.w;
  60. #if SIGNED_NRM_RT
  61. outNrm.xyz=nrm;
  62. #else
  63. outNrm.xyz=nrm*0.5f+0.5f;
  64. #endif
  65. }
  66. col.a*=alpha;
  67. col *=MaterialColor();
  68. if(normal)outNrm.w=col.a;
  69. return col;
  70. }
  71. /******************************************************************************/
  72. CUSTOM_TECHNIQUE
  73. /******************************************************************************/