ソースを参照

ShaderGraph : Added TriplanarNormalMap node using UDN blend

TothBenoit 3 ヶ月 前
コミット
1387b8963c
1 ファイル変更43 行追加0 行削除
  1. 43 0
      hrt/shgraph/nodes/TriplanarNormalMap.hx

+ 43 - 0
hrt/shgraph/nodes/TriplanarNormalMap.hx

@@ -0,0 +1,43 @@
+package hrt.shgraph.nodes;
+
+using hxsl.Ast;
+
+@name("Triplanar normal map")
+@description("Sample a normal map using triplanar params")
+@width(160)
+@group("Math")
+class TriplanarNormalMap extends Sampler {
+
+	static var SRC = {
+		@sginput var texture : Sampler2D;
+		@sginput var weight : Vec3;
+		@sginput var uvX : Vec2;
+		@sginput var uvY : Vec2;
+		@sginput var uvZ : Vec2;
+		@sgoutput var normalWS : Vec3;
+
+		@global var global : {
+            @perObject var modelView : Mat4;
+        };
+
+		@input var input : {
+			var tangent : Vec3;
+        };
+
+		var transformedNormal : Vec3;
+		function fragment() {
+			var nx = unpackNormal(texture.get(uvX));
+			nx.y *= -1.0;
+			var ny = unpackNormal(texture.get(uvY));
+			ny.y *= -1.0;
+			var nz = unpackNormal(texture.get(uvZ));
+			nz.y *= -1.0;
+
+			nx = vec3(nx.xy + transformedNormal.zy, transformedNormal.x);
+			ny = vec3(ny.xy + transformedNormal.xz, transformedNormal.y);
+			nz = vec3(nz.xy + transformedNormal.xy, transformedNormal.z);
+
+			normalWS = normalize(nx.zyx * weight.x + ny.xzy * weight.y + nz.xyz * weight.z);
+		}
+	};
+}