unity透明双面shader
2015年01月31日 10:01
0 点赞
0 评论
更新于 2025-11-21 15:48
今天,我们将深入探讨Unity中的透明双面Shader。以下是一个具体的Shader代码示例及详细分析。
Shader "Glow 11/Unity/Transparent/Diffuse" {
// 属性部分,定义Shader可调节的参数
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_GlowTex ("Glow", 2D) = "" {}
_GlowColor ("Glow Color", Color) = (1,1,1,1)
_GlowStrength ("Glow Strength", Float) = 1.0
}
// SubShader部分,包含具体的渲染逻辑
SubShader {
// Tags用于设置渲染队列、是否忽略投影器等信息
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderEffect"="Glow11Transparent" "RenderType"="Glow11Transparent" }
// LOD(Level of Detail)设置,这里为200
LOD 200
// CGPROGRAM和ENDCG之间是CG语言编写的代码
CGPROGRAM
// 表面着色器的编译指令,使用Lambert光照模型并支持透明效果
#pragma surface surf Lambert alpha
// 声明采样器和颜色变量
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指定当当前SubShader无法运行时使用的备用Shader
FallBack "Glow 11/Unity/Transparent/VertexLit"
// 自定义编辑器,这里使用GlowMatInspector
CustomEditor "GlowMatInspector"
}
代码解释
Properties部分:
_Color:主颜色,默认为白色。_MainTex:基础纹理,支持RGB颜色和Alpha通道的透明度。_GlowTex:发光纹理。_GlowColor:发光颜色,默认为白色。_GlowStrength:发光强度,默认为1.0。
SubShader部分:
Tags:Queue:设置渲染队列,这里为Transparent,表示该Shader用于透明物体的渲染。IgnoreProjector:设置为True,表示忽略投影器的影响。RenderEffect和RenderType:自定义的渲染效果和渲染类型,这里用于特定的发光效果。LOD:设置细节级别,用于在不同性能需求下选择不同的SubShader。CGPROGRAM和ENDCG:包裹着CG语言编写的代码,实现具体的渲染逻辑。#pragma surface surf Lambert alpha:表面着色器的编译指令,使用Lambert光照模型并支持透明效果。struct Input:定义输入结构体,包含纹理坐标。surf函数:处理输入并输出表面属性,包括反照率和透明度。
FallBack部分:
- 当当前SubShader无法运行时,使用
Glow 11/Unity/Transparent/VertexLit作为备用Shader。
- 当当前SubShader无法运行时,使用
CustomEditor部分:
- 指定自定义编辑器为
GlowMatInspector,用于在Unity编辑器中提供更便捷的Shader参数调整界面。
- 指定自定义编辑器为
通过以上的代码和解释,你可以更好地理解和使用这个Unity透明双面Shader。