当前位置: 首页 > 工具软件 > Diffuse > 使用案例 >

Legacy Shaders Diffuse透明度无法设置的解决方案

徐帅
2023-12-01

今天在研究Diffuse的时候发现了一个问题就是
代码中 出现了下面的代码,在Unity面板中调节发现不起变化。下面是自己研究的一些新的

o.Alpha = c.a;

最终的解决方案其实就相当于选用了Legacy Shaders->Transparent->Diffuse的着色器,在此仅是做一个发现问题=>解决问题的一个个人记录

流程

创建一个Cube,新建个Material选用Legacy Shaders->Diffuse。调节Main Color中的Alpha没有效果,好奇的打开对应的shader代码,产生疑问为什么Alpha赋值了却没有生效?

解决过程:

  1. SubShader 的Tags 是Opaque(不透明) 是不是换成Transparent下的Shader就可以了,去找了找果然在Legacy Shaders->Transparent->Diffuse找到了对应的Shader。
  2. 内置的Shader代码看不到,去官网下载了源码,在DefaultResourcesExtra/Alpha-Diffuse.shader找到了。对比查看发现之多了一个参数 alpha:fade
  3. 为什么多了 alpha:fade 就能使物体由透明变成半透明,内部做了哪些操作
  4. 在Unity 编辑器Inspector界面对两份Shader进行解析,点击Show generated code
    发现 alpha:fade 影响最重要的两行代码
Blend SrcAlpha OneMinusSrcAlhpa

//这行代码将传入的值强制设置成了1
//#define UNITY_OPAQUE_ALPHA(outputAlpha) outputAlpha = 1.0
UNITY_OPAQUE_ALPHA(c.a) 

上代码:

//不透明
Shader "Legacy Shaders/Transparent/Diffuse" {
Properties {
	_Color ("Main Color", Color) = (1,1,1,1)
	_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
}

SubShader {
	Tags {"Queue"="Opaque" "IgnoreProjector"="True" "RenderType"="Transparent"}
	LOD 200

CGPROGRAM
#pragma surface surf Lambert

sampler2D _MainTex;
fixed4 _Color;

struct Input {
	float2 uv_MainTex;
};

void surf (Input IN, inout SurfaceOutput o) {
	fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
	o.Albedo = c.rgb;
	o.Alpha = c.a;
}
ENDCG
}

Fallback "Legacy Shaders/Transparent/VertexLit"
}

//透明
Shader "Legacy Shaders/Transparent/Diffuse" {
Properties {
	_Color ("Main Color", Color) = (1,1,1,1)
	_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
}

SubShader {
	Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
	LOD 200

CGPROGRAM
#pragma surface surf Lambert alpha:fade //区别在这里

sampler2D _MainTex;
fixed4 _Color;

struct Input {
	float2 uv_MainTex;
};

void surf (Input IN, inout SurfaceOutput o) {
	fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
	o.Albedo = c.rgb;
	o.Alpha = c.a;
}
ENDCG
}

Fallback "Legacy Shaders/Transparent/VertexLit"
}

 类似资料: