Unity Shader Alpha Blend 填坑记录

本文探讨Unity Shader中的Alpha Blend,讲解如何通过参数调整透明度,并重点分析了Blend One One命令的混淆点。尽管Unity仅识别Blend SrcFactor DstFactor形式,但在调试中观察到实际应用了四个参数。常见的混合命令如Blend One One并未改变透明度,而Blend SrcAlpha One会乘以Alpha,影响颜色值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章主要说的是关于Unity Shader 中对Alpha的Blend
Blend 透明度混合.通过参数来调整透明度,真正的透明效果.
Blend的位置在SubShader 中,CGPROGRAM前.用例如下

Shader "Example/Diffuse Bump" {
   
    Properties {
   
      _MainTex ("Texture", 2D) = "white" {
   }
      _BumpMap ("Bumpmap", 2D) = "bump" {
   }
    }
    SubShader {
   
      Tags {
    "Render
### 使用 Shader 实现 Blend 混合效果 在 Unity 中,通过 `Blend` 关键字可以在着色器中定义混合模式。这允许开发者创建具有不同透明度和其他视觉特效的对象。 #### 定义混合操作 为了实现基本的混合效果,在 Shader 的 Pass 部分可以指定混合源和目标因子: ```cg Pass { ZWrite Off ColorMask RGB Blend SrcAlpha OneMinusSrcAlpha } ``` 这段代码表示启用混合功能,并设定混合方式为基于源颜色 Alpha 通道值与现有帧缓存颜色相加减后的结果[^1]。 对于更复杂的场景,还可以单独控制 Alpha 通道的混合行为: ```cg Blend SrcAlpha OneMinusSrcAlpha, One Zero ``` 这里不仅设置了RGB通道的标准混合公式,还特别指定了Alpha通道采用不同的权重系数进行运算[^2]。 #### 设置渲染队列 为了让带有透明度的对象正确显示在其背景之前被绘制出来,需要调整该对象所属材质所使用的渲染队列编号。一般情况下会将其设为较高的数值(如3000),以确保这些元素最后才被执行渲染命令: ```cg Tags { "Queue"="Transparent" } ``` 此标签告诉Unity引擎将使用本Shader的对象放置于特定顺序的位置上完成最终的画面合成过程[^3]。 #### 控制深度测试写入 当处理半透明表面时,关闭深度缓冲区更新有助于防止不必要的遮挡现象发生: ```cg ZWrite Off ``` 这条指令使得当前片段不会影响后续像素的可见性判断逻辑,从而保证了期中的层叠关系得以保持不变[^4]。 #### 示例:简单的透明纹理展示 下面是一个完整的SubShader例子,它展示了如何利用上述概念来呈现一张带Alpha通道的地图资源: ```cg Shader "Custom/TransparentColor" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags {"Queue"="Transparent"} Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag sampler2D _MainTex; struct appdata_t { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 pos : SV_POSITION; }; v2f vert (appdata_t v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (v2f i) : COLOR { fixed4 col = tex2D(_MainTex, i.uv); clip(col.a - 0.5); // Discard pixels with alpha less than 0.5. return col; } ENDCG ZWrite Off Blend SrcAlpha OneMinusSrcAlpha } } FallBack "Diffuse" } ``` 在这个自定义着色程序里,除了必要的顶点变换外,还在片段函数内部加入了对输入图像不透明程度阈值过滤的操作(`clip`),以此达到剔除过暗区域的目的;同时启用了标准形式下的色彩融合机制以及禁用了深度记录开关[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值