当前位置:   article > 正文

Shader Blend 混合效果_blend src in dst

blend src in dst

1、Blend SrcAlpha OneMinusSrcAlpha 正常模式(透明度混合)
这里写图片描述

2、Blend OneMinusDstColor One 柔和相加(soft Additive)
这里写图片描述

3、Blend DstColor Zero 正片叠底 (Multiply)相乘
这里写图片描述

4、Blend DstColor SrcColor 两倍相乘 (2X Multiply)
这里写图片描述

5、 变暗

  1. BlendOp Min
  2. Blend One One

这里写图片描述

6、变亮

  1. BlendOp Max
  2. Blend One One

这里写图片描述

7、Blend OneMinusDstColor One 滤色,等同于Blend One OneMinusSrcColor
这里写图片描述

8、Blend One One 线性变淡
这里写图片描述

测试代码

  1. Shader "Wp/Blend"{
  2. Properties{
  3. _Color("Color", Color) = (1, 1, 1, 1)
  4. _MainTex("MainTex", 2D) = "White" {}
  5. _AlphaScale("AlphaScale", Range(0, 1)) = 1
  6. }
  7. SubShader{
  8. Tags{
  9. "Queue" = "Transparent"
  10. "Ignoreprojector" = "True"
  11. "RenderType" = "Transparent"
  12. }
  13. Pass{
  14. ZWrite off
  15. // Blend SrcAlpha OneMinusSrcAlpha
  16. // Blend OneMinusDstColor One
  17. // Blend DstColor Zero
  18. // Blend DstColor SrcColor
  19. // BlendOp Max
  20. // Blend One One
  21. // Blend OneMinusDstColor One
  22. Blend One One
  23. CGPROGRAM
  24. #pragma vertex vert
  25. #pragma fragment frag
  26. fixed4 _Color;
  27. sampler2D _MainTex;
  28. float4 _MainTex_ST;
  29. float _AlphaScale;
  30. struct a2v{
  31. float4 pos : POSITION;
  32. float4 normal : NORMAL;
  33. float texcoord : TEXCOORD0;
  34. };
  35. struct v2f{
  36. float4 pos : SV_POSITION;
  37. float3 worldNormal : TEXCOORD0;
  38. float3 worldPos : TEXCOORD1;
  39. float4 uv : TEXCOORD2;
  40. };
  41. v2f vert(a2v v){
  42. v2f o;
  43. o.pos = mul(UNITY_MATRIX_MVP, v.pos);
  44. return o;
  45. }
  46. fixed4 frag(v2f i) : SV_Target{
  47. return fixed4(_Color.rgb, _Color.a * _AlphaScale);
  48. }
  49. ENDCG
  50. }
  51. }
  52. Fallback "Diffuse"
  53. }

资源包下载:。。

混合操作(op)

1.Add :将混合后的源颜色(片元着色器产生的颜色值)和目标颜色(颜色缓冲区中读取到的值)相加。默认采用这种操作。等式为:

o=srcfactor*s+dstfactor*d ,举例:源颜色为(0,1,0,1)绿色,目标颜色为(1,0,0,1)红色,混合后为(1,1,0,2)黄色。

  1. Blend SrcAlpha One
  2. // finalColor = i.color * i.color.a + screenColor * (1)
  3. // (0,1,0,1) * 1 + (1,0,0,1) * 1 = (1,1,0,2)

2.Sub:

o=srcfactor*s-dstfactor*d

3.RevSub

o=dstfactor*d-srcfactor*s

4.Min

分别判断rgba四个分量的比较结果,混合因子不起作用

5.Max

分别判断rgba四个分量的比较结果,混合因子不起作用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/96646
推荐阅读
相关标签
  

闽ICP备14008679号