summaryrefslogtreecommitdiffstats
path: root/filamented.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2026-01-24 16:54:26 -0800
committeryum <yum.food.vr@gmail.com>2026-01-24 16:54:26 -0800
commitd0c27e80cefa593641f3525ef23e7fc5631b136b (patch)
tree2894d04cac14f1403f49d52f8a742440cb8cfbf1 /filamented.cginc
parent4885fb42bd42f5dfb7fdc198bd0cc42be7959aaf (diff)
Add anisotropic reflections
Diffstat (limited to 'filamented.cginc')
-rw-r--r--filamented.cginc21
1 files changed, 21 insertions, 0 deletions
diff --git a/filamented.cginc b/filamented.cginc
index b66baf2..ecf697f 100644
--- a/filamented.cginc
+++ b/filamented.cginc
@@ -889,6 +889,19 @@ float D_GGX(float roughness, float NoH, const float3 h) {
return d;
}
+// t = tangent vector, b = bitangent vector
+float D_GGX_Anisotropic(float at, float ab, float NoH,
+ const float3 h,
+ const float3 t, const float3 b) {
+ float ToH = dot(t, h);
+ float BoH = dot(b, h);
+ float a2 = at * ab;
+ float3 v = float3(ab * ToH, at * BoH, a2 * NoH);
+ float v2 = dot(v, v);
+ float w2 = a2 / v2;
+ return a2 * w2 * w2 * (1.0 / PI);
+}
+
float F_Schlick(float f0, float VoH) {
return f0 + (1.0 - f0) * pow5(1.0 - VoH);
}
@@ -935,6 +948,14 @@ float V_SmithGGXCorrelated_Fast(float roughness, float NoV, float NoL) {
return v;
}
+float V_SmithGGXCorrelated_Anisotropic(float at, float ab, float ToV, float BoV,
+ float ToL, float BoL, float NoV, float NoL) {
+ float lambdaV = NoL * length(float3(at * ToV, ab * BoV, NoV));
+ float lambdaL = NoV * length(float3(at * ToL, ab * BoL, NoL));
+ float v = 0.5 / (lambdaV + lambdaL);
+ return saturate(v);
+}
+
float perceptualRoughnessToRoughness(float perceptualRoughness) {
return perceptualRoughness * perceptualRoughness;
}