NormalMap.hx 869 B

123456789101112131415161718192021222324252627282930313233
  1. package hrt.shgraph.nodes;
  2. using hxsl.Ast;
  3. @name("Normal map")
  4. @description("Returns normal in world space using a normal map")
  5. @width(160)
  6. @group("Math")
  7. class NormalMap extends Sampler {
  8. static var SRC = {
  9. @sginput var texture : Sampler2D;
  10. @sginput(calculatedUV) var uv : Vec2;
  11. @sgoutput var normalWS : Vec3;
  12. @global var global : {
  13. @perObject var modelView : Mat4;
  14. };
  15. @input var input : {
  16. var tangent : Vec3;
  17. };
  18. var transformedNormal : Vec3;
  19. function fragment() {
  20. var tangentWS = vec4(input.tangent * global.modelView.mat3(),input.tangent.dot(input.tangent) > 0.5 ? 1. : -1.);
  21. var nf = unpackNormal(texture.get(uv));
  22. var tanX = tangentWS.xyz.normalize();
  23. var tanY = transformedNormal.cross(tanX) * -tangentWS.w;
  24. normalWS = (nf.x * tanX + nf.y * tanY + nf.z * transformedNormal).normalize();
  25. }
  26. };
  27. }