您的位置:首页 > 其它

Shader混合模式--正片叠底、滤色、叠加

2015-08-14 17:22 323 查看
叠加在书本168页。

Shader "Custom/BlendMode_Effect" {

Properties {

_MainTex ("Albedo (RGB)", 2D) = "white" {}

_Blendtex("Blend Texture",2D) = "white"{}

_Opacity("Blend Opacity",Range(0,1)) = 1

}

SubShader {

Pass

{

CGPROGRAM

#pragma vertex vert_img

#pragma fragment frag

#pragma fragmentoption ARB_precision_hint_fastest

#include "UnityCG.cginc"

uniform sampler2D _MainTex;

uniform sampler2D _BlendTex;

fixed _Opacity;

fixed4 frag(v2f_img i) : COLOR

{

fixed4 renderTex = tex2D(_MainTex,i.uv);

fixed4 blendTex= tex2D(_BlendTex,i.uv);

//fixed4 blendedMultiply = renderTex * blendTex;

fixed4 blendedScreen = (1.0 - ((1.0 - renderTex) * (1.0 - blendTex)));//这里是颜色计算核心

renderTex= lerp(renderTex,blendedScreen,_Opacity);

return renderTex;

}

ENDCG

}

}

}

fixed OverlayBlendMode(fixed basePixel, fixed blendPixel) {
if (basePixel < 0.5) {
return (2.0 * basePixel * blendPixel);
} else {
return (1.0 - 2.0 * (1.0 - basePixel) * (1.0 - blendPixel));
}
}


fixed4 frag(v2f_img i) : COLOR {
//Get the colors from the RenderTexture and the uv's
//from the v2f_img struct
fixed4 renderTex = tex2D(_MainTex, i.uv);
fixed4 blendTex = tex2D(_BlendTex, i.uv);

fixed4 blendedImage = renderTex;

blendedImage.r = OverlayBlendMode(renderTex.r, blendTex.r);
blendedImage.g = OverlayBlendMode(renderTex.g, blendTex.g);
blendedImage.b = OverlayBlendMode(renderTex.b, blendTex.b);

// Adjust amount of Blend Mode with a lerp
renderTex = lerp(renderTex, blendedImage,  _Opacity);

return renderTex;
}


叠加模式的算法

知识补习

这里增加一个内容,就是对各种混合模式的理解。

正片叠底(Multiply)和滤色(Screen)

正片叠底(Multiply)和滤色(Screen)是两种基本的混合模式,分别用于使图片变暗和变亮。它们之间的组合还可以形成更复杂的混合模式,如叠加(Overlay)和柔光(Soft Light)。

正片叠底 —— 就是把两层图像的像素相乘,最后会得到一个更暗的图像。这个模式是对称的,也就是说交换基色和混合色得到的结果是一样的。


,其中a是基色,b是混合色。

滤色 —— 首先把两层图像的像素值取互补数,然后将它们相乘,最后再去互补数。这和正片叠底得到的结果是相反的。它会得到一个更亮的图像。


,其中a是基色,b是混合色。

叠加 —— 结合了正片叠底和滤色两种混合模式。基色中亮色的部分会更加亮,而暗色的部分会更暗。


,其中a是基色,b是混合色。

更多信息:http://blog.csdn.net/candycat1992/article/details/39343309
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: