Răsfoiți Sursa

obs-filters: Fix color key distance

Was incorrectly computing distance between linear color and nonlinear
key. Make color nonlinear to match previous behavior.
jpark37 4 ani în urmă
părinte
comite
9e092bf28e
1 a modificat fișierele cu 11 adăugiri și 1 ștergeri
  1. 11 1
      plugins/obs-filters/data/color_key_filter_v2.effect

+ 11 - 1
plugins/obs-filters/data/color_key_filter_v2.effect

@@ -34,9 +34,19 @@ float4 CalcColor(float4 rgba)
 	return float4(pow(rgba.rgb, float3(gamma, gamma, gamma)) * contrast + brightness, rgba.a);
 }
 
+float GetNonlinearChannel(float u)
+{
+	return (u <= 0.0031308) ? (12.92 * u) : ((1.055 * pow(u, 1.0 / 2.4)) - 0.055);
+}
+
+float3 GetNonlinearColor(float3 rgb)
+{
+	return float3(GetNonlinearChannel(rgb.r), GetNonlinearChannel(rgb.g), GetNonlinearChannel(rgb.b));
+}
+
 float GetColorDist(float3 rgb)
 {
-	return distance(key_color.rgb, rgb);
+	return distance(key_color.rgb, GetNonlinearColor(rgb));
 }
 
 float4 ProcessColorKey(float4 rgba, VertData v_in)