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"
}

代码解释

  1. Properties部分

    • _Color:主颜色,默认为白色。
    • _MainTex:基础纹理,支持RGB颜色和Alpha通道的透明度。
    • _GlowTex:发光纹理。
    • _GlowColor:发光颜色,默认为白色。
    • _GlowStrength:发光强度,默认为1.0。
  2. SubShader部分

    • Tags
    • Queue:设置渲染队列,这里为Transparent,表示该Shader用于透明物体的渲染。
    • IgnoreProjector:设置为True,表示忽略投影器的影响。
    • RenderEffectRenderType:自定义的渲染效果和渲染类型,这里用于特定的发光效果。
    • LOD:设置细节级别,用于在不同性能需求下选择不同的SubShader。
    • CGPROGRAMENDCG:包裹着CG语言编写的代码,实现具体的渲染逻辑。
    • #pragma surface surf Lambert alpha:表面着色器的编译指令,使用Lambert光照模型并支持透明效果。
    • struct Input:定义输入结构体,包含纹理坐标。
    • surf函数:处理输入并输出表面属性,包括反照率和透明度。
  3. FallBack部分

    • 当当前SubShader无法运行时,使用Glow 11/Unity/Transparent/VertexLit作为备用Shader。
  4. CustomEditor部分

    • 指定自定义编辑器为GlowMatInspector,用于在Unity编辑器中提供更便捷的Shader参数调整界面。

通过以上的代码和解释,你可以更好地理解和使用这个Unity透明双面Shader。

作者信息

feifeila

feifeila

共发布了 3994 篇文章