Реализация режима смешивания слоев Difference из фотошопа.
Если кто-то видит косяк - говорите .
Никакого подвига не совершил - скопипастил формулу .
Планирую покопипастить все остальные режимы смешивания.
Синтаксис:
Используется glsl
Shader "ChannelBlend/DiffuseDifference" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_BlendTex ("Texture", 2D) = "white" {}
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
};
sampler2D _MainTex;
sampler2D _BlendTex;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
half3 blend = tex2D (_BlendTex, IN.uv_MainTex).rgb;
o.Albedo.r = abs(o.Albedo.r - blend.r);
o.Albedo.g = abs(o.Albedo.g - blend.g);
o.Albedo.b = abs(o.Albedo.b - blend.b);
}
ENDCG
}
Fallback "Diffuse"
}
Properties {
_MainTex ("Texture", 2D) = "white" {}
_BlendTex ("Texture", 2D) = "white" {}
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
};
sampler2D _MainTex;
sampler2D _BlendTex;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
half3 blend = tex2D (_BlendTex, IN.uv_MainTex).rgb;
o.Albedo.r = abs(o.Albedo.r - blend.r);
o.Albedo.g = abs(o.Albedo.g - blend.g);
o.Albedo.b = abs(o.Albedo.b - blend.b);
}
ENDCG
}
Fallback "Diffuse"
}