请求协助将Unity中的灰度Shader修改为透明Shader
修改Unity灰度Shader以支持透明效果
要让你的灰度Shader具备透明效果,需要调整渲染状态并保留/控制Alpha通道,以下是修改后的完整代码及关键说明:
修改后的Shader代码
Shader "Custom/DesaturateWithTransparency" { Properties { _MainTex ("Base (RGB)", 2D) = "black" {} _Brightness ("Brightness", Float) = 1.0 _Opacity ("Opacity", Range(0.0, 1.0)) = 1.0 // 可选:整体透明度控制参数 } SubShader { Tags { "Queue"="Transparent" "RenderType"="Transparent" "IgnoreProjector"="True" } LOD 100 Pass { ZTest Always Cull Off ZWrite Off Fog { Mode off } Blend SrcAlpha OneMinusSrcAlpha // 开启透明混合 CGPROGRAM #pragma vertex vert_img #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" uniform sampler2D _MainTex; uniform float _Brightness; uniform float _Opacity; fixed4 frag (v2f_img i) : COLOR { float4 mainColor = tex2D(_MainTex, i.uv); // 计算灰度值 float3 greyScale = dot(mainColor.rgb, float3(0.3, 0.59, 0.11)) * _Brightness; mainColor.rgb = greyScale; // 应用整体透明度(如果不需要这个控制,直接保留原mainColor.a即可) mainColor.a *= _Opacity; return mainColor; } ENDCG } } Fallback off }
关键修改点说明
- 添加透明相关标签:
Tags { "Queue"="Transparent" "RenderType"="Transparent" }告诉Unity将该Shader归入透明渲染队列,保证渲染顺序符合透明对象的显示逻辑 - 开启透明混合:
Blend SrcAlpha OneMinusSrcAlpha是标准的透明混合规则,源颜色的Alpha值决定自身透明度,背景颜色会根据Alpha值与当前颜色混合 - 可选整体透明度控制:新增
_Opacity属性,可在Unity Inspector面板中直接调整整体透明度;若不需要该功能,删除对应属性和mainColor.a *= _Opacity;代码即可,Shader会直接使用原纹理的Alpha通道 - 调整Shader路径:将原
Hidden/Desaturate改为Custom/DesaturateWithTransparency,方便在Unity面板中快速找到该Shader
内容的提问来源于stack exchange,提问作者Đạt Đức Lê
相关产品推荐
相关产品推荐

