shader篇-透明效果

本文介绍了Unity中实现透明效果的两种方法:透明度测试和透明度混合,强调了渲染顺序的重要性,并详细讲解了Unity Shader如何设置渲染队列、开启深度写入以及处理双面渲染。同时,文中给出了具体的Shader代码示例。
摘要由CSDN通过智能技术生成

shader篇-透明效果

标签(空格分隔): shader


透明效果实现方法简介

Unity中使用2种方法实现透明效果:一是透明度测试,二是透明度混合。
透明度测试:不需要关闭深度写入,透明度不达标就去掉,所以物体要么不透明要么完全透明。
透明度混合:可以得到真正的半透明效果。原理是将透明度与颜色缓冲的颜色混合得到新的颜色。但是这需要关闭深度写入。只有关闭深度写入才能吧保证半透明物体不影响不透明物体或半透明后面半透明物体的渲染

渲染顺序的重要性

关闭深度写入后就需要注意物体的渲染顺序,因为关闭之前物体的渲染是由深度z-buffer决定,必须渲染半透明物体后的非透明后物体(这里的前后指的是相对虚拟摄像头的距离),再渲染透明物体,否则未关闭的深度测试会直接覆盖透明度混合后的颜色缓冲,导致失去了该有的半透明效果。
可是即便设置好了渲染顺序,有时候依旧会出现问题,比如两根缠绕的绳子,根本难以分清2个物体的前后,无法制定合理的渲染顺序。
要想解决这种问题就需要分割网格。

Unity shader的渲染顺序

为解决渲染顺序,unity提供了渲染队列。Queue标签决定模型使用哪个队列

名称 队列索引 描述
Background 1000 最早渲染的队列,用于渲染背景
Geometry 2000 默认渲染队列,不透明物体使用这个
AlphaTest 2450 透明度测试
Transparent 3000 使用透明度混合或关闭深度写入的shader
Overlay 4000 使用一些叠加效果,最后渲染的物体都使用该队列

使用实例
如果要使用透明度测试,需要这般加入以下tag

SubShader {
        Tags {
  "Queue"="AlphaTest" 

同理,透明度混合需要这般使用以下tag

    SubShader {
        Tags {
  "Queue"="Transparent"

透明度测试

unity片元着色器会使用clip函数进行透明度测试

void clip(float4 x)
{
    if(any(x<0))
        discard;
}

配置
配置中tags相当关键,Queue标签之前提过,暂且不提RenderType是用以制定渲染的队列,”IgnoreProjector”=”True”是保证shader不受投影器的影响

Properties {
        _Color ("Color Tint", Color) = (1, 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值