Unity3D Shader(14)——Fragment Shader(遮挡、透明效果)

本文介绍如何在Unity中使用两个pass通道实现遮挡透明效果。通过调整zwrite和ztest参数来控制渲染顺序,确保透明物体正确显示。具体包括不同渲染队列的作用及其应用场景。

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

要形成遮挡透明效果,需要两个pass通道,一个pass通道渲染未遮挡部分,一个pass通道渲染被遮挡部分。这其中比较关键的一点是zwrite、ztest的用法(这个可以看官方文档及自己尝试)。
其中,”Queue” = “Transparent(透明)”表示这个渲染队列在几何体和Alpha测试队列之后被渲染,采用由后到前的次序,比如玻璃和粒子的的效果就用这个。除了 Transparent(透明)这个渲染队列以外,还有Background(背景),Geometry(几何体),AlphaTest(透明测试),Overlay(覆盖)的渲染队列。Background(背景)用于天空盒。Geometry(几何体)用于大多数不透明几何体,AlphaTest(透明测试)用于Alpha测试的几何体,Overlay(覆盖)用于实现叠加效果,如镜头光晕。
zwrite、ztest的用法参考以下这篇博客:
http://blog.youkuaiyun.com/lyh916/article/details/45317571
具体代码及效果:

Shader "Custom/FG" {

    SubShader {
        Tags { "Queue" = "Transparent" }

        LOD 200
        pass{
        Blend SrcAlpha OneMinusSrcAlpha
            zwrite on
            ztest greater 


        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag 
        #pragma target 3.0

        #include "UnityCG.cginc"


        struct v2f{
        float4 pos:POSITION;

        };

        v2f vert(appdata_base v){
        v2f o;
        o.pos=UnityObjectToClipPos(v.vertex);
        return o;
        }

        float4 frag(v2f IN):color{

        float4 col=float4(1,0,0,0.5);
        return col;
        }


        ENDCG
        }
        pass{
        Blend SrcAlpha OneMinusSrcAlpha
            zwrite on
            ztest less 


        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag 
        #pragma target 3.0

        #include "UnityCG.cginc"


        struct v2f{
        float4 pos:POSITION;

        };

        v2f vert(appdata_base v){
        v2f o;
        o.pos=UnityObjectToClipPos(v.vertex);
        return o;
        }

        float4 frag(v2f IN):color{

        float4 col=float4(0,0,1,1);
        return col;
        }


        ENDCG
        }
    }
    FallBack "Diffuse"
}

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值