首页 > 其他分享 >Blend开启时,不关闭深度写入可能出现的问题

Blend开启时,不关闭深度写入可能出现的问题

时间:2023-03-04 22:33:53浏览次数:38  
标签:MainTex vertex uv 写入 开启 绘制 Blend 气泡

测试用shader,就是在Unlit基础上开启Blend,开启深度写入(红色加粗部分)

Shader "My/Blend/Unlit_Blend_ZWriteOn"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" "Queue" = "Transparent" }
        LOD 100

        Blend SrcAlpha OneMinusSrcAlpha
        ZWrite On

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 c = tex2D(_MainTex, i.uv);
                return c;
            }
            ENDCG
        }
    }
}

然后我们在场景中摆2个物体,贝壳离相机近,气泡离相机远;但贝壳先绘制气泡后绘制(RenderQueue越小越先绘制);最终会看到,两者没混合,气泡直接被裁了一部分。

原因就是:贝壳先绘制,然后写了深度值;气泡后面绘制的时候,会进行深度测试,因为气泡离相机更远,他们重叠的部分无法通过深度测试,像素就被直接丢弃了。

 

下面关闭深度写入ZWrite Off,贝壳先绘制,气泡后绘制,气泡盖在了贝壳上,同时进行了混合

 

参考

shader入门精要8.1节

标签:MainTex,vertex,uv,写入,开启,绘制,Blend,气泡
From: https://www.cnblogs.com/sailJs/p/17179368.html

相关文章

  • Java 需要快速读出和写入的框架架构
    //对标牛客竞赛小白月赛109a题//importjava.util.*;importjava.io.*;publicclassMain{staticlongn;staticBufferedReaderbf=newBufferedReader(n......
  • Win10开启OpenSSH
    Win10开启OpenSSH打开设置------应用------可选功能------添加功能------找到OpenSSH、OpenSSH选择安装就可以了。这样就算是安装成功了安装完成后验证以......
  • MongoDB写入数据策略
    上篇文章介绍了Mongo读取数据的策略(MongoDB读数据策略),主要是readconcern、readpreference两参数,其中readconcern作用于服务端,决定了什么时候能读取到数据;readpreference在客......
  • hello world--开启python之路
    方式一1.创建.py文件,cmd打开2.进入文件所在目录3.执行命令pythonhello.py ,结果就被输出来了 方式二  解释器运行1.cmd打开2.输入python3.print('hello')4.退......
  • C# MongDb踩坑记录--分片写入报错 An upsert on a sharded collection must contain t
    环境C#mongdb.drivercollection分片_id为片键报错信息Awriteoperationresultedinanerror.WriteError:{Category:"Uncategorized",Code:61,Message:......
  • ubuntu20.04 开启日志审计
    rsyslog50-default.conf#vim/etc/rsyslog.d/50-default.conf*.=info;*.=notice;*.=warn;\auth,authpriv.none;\cron,daemon.none;\mail,n......
  • c# 写入Xml 元素(<![CDATA[ ]]>)
    一般处理程序代码:XmlDocumentxmldoc=newXmlDocument();xmldoc.AppendChild(xmldoc.CreateXmlDeclaration("1.0","UTF-8",null));XmlEl......
  • Java学习之字节流写入的两个小问题
     packagecom.itheima_112;/*字节流写数据的两个小问题:1:字节流写数据如何实现换行呢?windows:\r\nlinux:\nmac:\r......
  • 如何使用Blender制作卡通三渲二效果
    推荐:将 ​​NSDT场景编辑器​​ 加入你的3D开发工具链。  今天来分享一个在Blender中实现简单卡通三渲二效果和卡通描边的方法,基础的卡通三渲二效果在Blender中还是很简......
  • 1. Pandas的创建、读取和写入
    该博客是Pandas课程习题,前往此处可学习课程习题1.创建一个和下图一样的DataFramefruits提示提示:`pd.DataFrame`语句来创建一个DataFrameCodefruits=pd.Dat......