Parallax.hx 850 B

123456789101112131415161718192021222324252627282930313233343536
  1. package hrt.shgraph.nodes;
  2. using hxsl.Ast;
  3. @name("Parallax")
  4. @description("Parallaxed uv offset")
  5. @group("UV")
  6. @width(100)
  7. class Parallax extends ShaderNodeHxsl {
  8. static var SRC = {
  9. @sginput("camera.position") var cameraPosition : Vec3;
  10. @sginput(1.0) var range : Float;
  11. @sgoutput var output : Vec2;
  12. @global var global : {
  13. @perObject var modelView : Mat4;
  14. };
  15. @input var input : {
  16. var tangent : Vec3;
  17. };
  18. var transformedPosition : Vec3;
  19. var transformedNormal : Vec3;
  20. function fragment() {
  21. var viewWS = (cameraPosition - transformedPosition).normalize();
  22. var tanX = input.tangent * global.modelView.mat3();
  23. var tanY = normalize(transformedNormal.cross(tanX));
  24. var viewNS = vec3(viewWS.dot(tanX), viewWS.dot(tanY), viewWS.dot(transformedNormal)).normalize();
  25. output = -viewNS.xy * range;
  26. }
  27. };
  28. }