From 9e092bf28eaf2cba8a45484bf1f2f18f5567b558 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 11 May 2021 16:19:50 -0700 Subject: [PATCH] obs-filters: Fix color key distance Was incorrectly computing distance between linear color and nonlinear key. Make color nonlinear to match previous behavior. --- plugins/obs-filters/data/color_key_filter_v2.effect | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/obs-filters/data/color_key_filter_v2.effect b/plugins/obs-filters/data/color_key_filter_v2.effect index 9c079e2d9..1193633eb 100644 --- a/plugins/obs-filters/data/color_key_filter_v2.effect +++ b/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)