20.Shader中的Blend渲染命令

  1. 20.Shader中的Blend渲染命令
    1. 20.1 题目
    2. 20.2 深入解析
      1. Blend命令的基本语法
      2. 示例代码
    3. 20.3 答题示例
    4. 20.4 关键词联想

20.Shader中的Blend渲染命令


20.1 题目

Shader当中的Blend渲染命令主要用来干什么?


20.2 深入解析

Blend渲染命令用于进行颜色混合操作,将当前片元的颜色与颜色缓冲区中的颜色进行混合计算。通过Blend命令,可以实现多种视觉效果,如半透明效果、光照颜色叠加等。

Blend命令的基本语法

Blend SrcFactor DstFactor
  • SrcFactor:源因子,决定当前片元颜色的混合权重。
  • DstFactor:目标因子,决定缓冲区中颜色的混合权重。

示例代码

以下是一个简单的Shader代码示例,展示了如何使用Blend命令实现半透明效果:

Shader "Custom/BlendExample"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color ("Main Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags {"Queue"="Transparent" }
        LOD 200

        Pass
        {
            // 启用混合模式,使用源alpha值进行半透明混合
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            sampler2D _MainTex;
            fixed4 _Color;

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv) * _Color;
                return col;
            }
            ENDCG
        }
    }
}

在这个例子中,Blend SrcAlpha OneMinusSrcAlpha命令实现了基于源alpha值的半透明混合效果。当前片元的颜色和缓冲区中的颜色按照指定的权重进行混合,生成最终的渲染结果。


20.3 答题示例

Blend 命令用于在片元着色阶段将新生成的颜色(片元色)与帧缓冲区中已有的颜色按一定比例混合,实现透明度、半透明、加亮等效果。例如:

Blend SrcAlpha OneMinusSrcAlpha  // 标准 alpha 混合,实现不透明度
Blend One One                     // 加色混合,用于光照叠加

在第一个例子中,最终颜色 = 新片元颜色 × α + 原缓冲颜色 × (1–α);
在第二个例子中,则是两者相加,用于累加高光或叠加光晕效果。”


20.4 关键词联想

  • 颜色混合(Color Blending)
  • 源因子(SrcFactor)
  • 目标因子(DstFactor)
  • Alpha 混合(透明度)
  • 加色混合(Additive)
  • 混合方程(BlendOp)
  • 半透明效果(Transparency)
  • 光照叠加(Light Accumulation)
  • SrcAlpha, OneMinusSrcAlpha
  • One, One


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏