새소식

개발/Shader

[Color Blending] 컬러 블랜딩 공식

  • -

fixed4 Screen (fixed4 a, fixed4 b) { return (1-(1-a)*(1-b)); }

fixed4 Multiply (fixed4 a, fixed4 b) { return (a * b); }

fixed4 Darken (fixed4 a, fixed4 b) { return fixed4(min(a.rgb, b.rgb), 1); }

fixed4 LinearBurn (fixed4 a, fixed4 b) { return (a+b-1); }

fixed4 Lighten (fixed4 a, fixed4 b) { return fixed4(max(a.rgb, b.rgb), 1); }

fixed4 LinearDodge (fixed4 a, fixed4 b) { return (a+b); }

fixed ColorBurn (fixed a, fixed b)

{

return (b==0) ? b : max(0, (1-(1-a)/b));

}

fixed ColorDodge (fixed a, fixed b)

{

return (b==1) ? b : min(1, (a/(1-b)));

}

fixed4 Overlay (fixed4 a, fixed4 b)

{

fixed4 ret = fixed4(0,0,0,1);

ret.r = (b.r <= 0.5) ? (2*a.r)*b.r : (1-(1-2*(a.r-0.5))*(1-b.r)) ;

ret.g = (b.g <= 0.5) ? (2*a.g)*b.g : (1-(1-2*(a.g-0.5))*(1-b.g)) ;

ret.b = (b.b <= 0.5) ? (2*a.b)*b.b : (1-(1-2*(a.b-0.5))*(1-b.b)) ;

return ret;

}

fixed4 SoftLight(fixed4 a, fixed4 b)

{

fixed4 ret = fixed4(0,0,0,1);

ret.r = (b.r <= 0.5) ? a.r*(b.r+0.5) : (1-(1-a.r)*(1-(b.r-0.5))) ;

ret.g = (b.g <= 0.5) ? a.g*(b.g+0.5) : (1-(1-a.g)*(1-(b.g-0.5))) ;

ret.b = (b.b <= 0.5) ? a.b*(b.b+0.5) : (1-(1-a.b)*(1-(b.b-0.5))) ;

return ret;

}

fixed4 LinearLight (fixed4 a, fixed4 b)

{

fixed4 ret = fixed4(0,0,0,1);

ret.r = (b.r <= 0.5) ? (a.r+2*b.r -1) : (a.r+2*(b.r-0.5)) ;

ret.g = (b.g <= 0.5) ? (a.g+2*b.g -1) : (a.g+2*(b.g-0.5)) ;

ret.b = (b.b <= 0.5) ? (a.b+2*b.b -1) : (a.b+2*(b.b-0.5)) ;

return ret;

}

fixed4 VividLight (fixed4 a, fixed4 b)

{

fixed4 ret = fixed4(0,0,0,1);

ret.r = (b.r <= 0.5) ? ColorBurn(a.r, b.r*2) : ColorDodge(a.r, 2*(b.r-0.5)) ;

ret.g = (b.g <= 0.5) ? ColorBurn(a.g, b.g*2) : ColorDodge(a.g, 2*(b.g-0.5)) ;

ret.b = (b.b <= 0.5) ? ColorBurn(a.b, b.b*2) : ColorDodge(a.b, 2*(b.b-0.5)) ;

return ret;

}

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.