unity shader 固定管线实例(六) 透明度测试剔除尖锐边缘的模糊处理

Shader "基础/透明度测试剔除尖锐边缘的模糊处理" 
{
	//-------------------------------【属性】-----------------------------------------
   Properties 
   {
        _Color ("主颜色", Color) = (.5, .5, .5, .5)
        _MainTex ("基础纹理 (RGB)-透明度(A)", 2D) = "white" {}
        _Cutoff ("Alpha透明度阈值", Range (0,.9)) = .5
    }

    //--------------------------------【子着色器】--------------------------------
    SubShader 
	{
        //【1】定义材质
        Material 
		{
            Diffuse [_Color]
            Ambient [_Color]
        }

		//【2】开启光照
        Lighting On

		//【3】关闭裁剪,渲染所有面,用于接下来渲染几何体的两面
        Cull Off

		//--------------------------【通道一】-------------------------------
		//		说明:渲染所有超过[_Cutoff] 不透明的像素
		//----------------------------------------------------------------------
        Pass 
		{
            AlphaTest Greater [_Cutoff]
            SetTexture [_MainTex] {
                combine texture * primary, texture
            }
        }

		//----------------------------【通道二】-----------------------------
		//		说明:渲染半透明的细节
		//----------------------------------------------------------------------
        Pass 
		{
			// 不写到深度缓冲中
            ZWrite off

			// 不写已经写过的像素
            ZTest Less

			// 深度测试中,只渲染小于或等于的像素值
            AlphaTest LEqual [_Cutoff]

			// 设置透明度混合
            Blend SrcAlpha OneMinusSrcAlpha
			
			// 进行纹理混合
            SetTexture [_MainTex] 
			{
                combine texture * primary, texture
            }
        }
    }
}

先渲染主体,因为经过透明度剔除之后,边缘会有锯齿。

再渲染锯齿部分,这部分没有深度信息。


如果想要2d的效果,sprite之类的效果,就需要显示层级来控制显示顺序的正确性,就没有了3d正确的遮挡效果(此效果依靠的是深度缓存,Zwrite On)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值