Unity中Shader的深度测试ZTest

news2024/12/24 19:36:17

文章目录

  • 前言
  • 一、深度测试是干什么的
  • 二、图示讲解深度测试的作用
  • 三、深度值的测试操作
    • 1、设置为测试不通过,看看效果
    • 2、使用开关控制是否开启深度测试


前言

Unity中Shader的深度测试ZTest


一、深度测试是干什么的

通俗的讲,深度测试就是颜色在写入颜色缓冲区前,对其做出一些判断
通过测试的加入颜色缓冲区,没有通过测试的就舍弃


二、图示讲解深度测试的作用

在这里插入图片描述
图中
蓝色矩形先渲染
红色矩形后渲染
渲染测试采用默认的小于等于
深度测试蓝色矩形时,深度值 0.4 < 1,通过测试,全部部分加入 颜色缓冲区
深度测试红色矩形时,深度值 0.6 只有小于 1 的部分通过测试, 大于 0.4 的部分不通过测试
所以,最后的效果呈现 蓝色矩形 在 红色矩形前


三、深度值的测试操作

ZTest(Less | LEqual | GEqual | Equal | NotEqual | Never | Always)

1、设置为测试不通过,看看效果

ZTest Never

在这里插入图片描述

2、使用开关控制是否开启深度测试

Unity封装好的枚举方法:UnityEngine.Rendering.CompareFunction

属性面板:[Enum(UnityEngine.Rendering.CompareFunction)]_ZTest(“ZTest”,int) = 0

SubShader: ZTest [_ZTest]

效果:
请添加图片描述

最终代码:

Shader "MyShader/P1_6_3"
{
    Properties
    {
        [Enum(Off,0,On,1)]_ZWrite("ZWrite",int) = 0
        [Enum(UnityEngine.Rendering.CompareFunction)]_ZTest("ZTest",int) = 0
        //使用这个标签,可以使外部暴露属性,有标题
        [Header(Base)]
        [NoScaleOffset]_MainTex ("Texture", 2D) = "white" {}
        _Clip("Clip",Range(0,1)) = 0
        //使用这个标签可以 在两行暴露属性之间加 间隙
        [Space(10)]
        [Header(Dissolve)]
        _DissolveTex("DissolveTex",2D) = "black"{}

        [NoScaleOffset]_RampTex("RampTex(RGB)",2D) = "black" {}
        
    }
    SubShader
    {
        Tags{"Queue" = "Geometry"}
        Blend Off
        Cull Back
        ZWrite [_ZWrite]
        
        ZTest [_ZTest]
        
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            
            sampler2D _MainTex;
            float _Clip;
            sampler2D _DissolveTex; 
            //这个四维向量,xyzw分别表示 Tilling 和 Offset 的 xy ,命名方式 在纹理名 后加 _ST
            float4 _DissolveTex_ST;


            //因为 在使用渐变纹理时,只使用了 渐变纹理的 u 坐标,所以把  sampler2D 换为 sampler
            sampler _RampTex;

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

            struct v2f
            {
                float4 uv : TEXCOORD0;
                float4 pos : SV_POSITION;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                
                //为了减少传入的值 ,所以就不创建新变量来存储,而是把 uv 改为  四维向量 来用
                //使用 o.uv 的 xy 来存放 原人物贴图
                //使用 o.uv 的 zw 来存放 噪波贴图缩放 和 偏移 后的值
                o.uv.xy = v.uv.xy;
                //o.uv.zw = v.uv * _DissolveTex_ST.xy + _DissolveTex_ST.zw;

                o.uv.zw = TRANSFORM_TEX(v.uv,_DissolveTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv.xy);
                //外部获取的 纹理 ,使用前都需要采样
                fixed4 dissolveTex = tex2D(_DissolveTex,i.uv.zw);
                
                //片段的取舍
                clip(dissolveTex.r -  _Clip);

                //进行归一化
                fixed4 dissolveValue = saturate((dissolveTex.r - _Clip) / (_Clip + 0.1 - _Clip));

                fixed4 rampTex = tex1D(_RampTex,dissolveValue.r);

                //col += rampTex;
                return col;
            }
            ENDCG
        }
    }
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA基础(JAVA SE)学习笔记(一)JAVA学习路线、行业了解、开发环境JDK17安装配置 和 JDK8同时配置

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 2. 一步一个脚印&#xff0c;踏踏实实再学一遍&#xff01; 这个世界上有的人输在不能开始&#xff0c;有的人…

计算机视觉开源代码汇总

1.【基础网络架构】Regularization of polynomial networks for image recognition 论文地址&#xff1a;https://arxiv.org/pdf/2303.13896.pdf 开源代码:https://github.com/grigorisg9gr/regularized_polynomials 2.【目标检测&#xff1a;域自适应】2PCNet: Two-Phase Cons…

出行OTA渠道规则

1、目前出行行业的OTA主要有以下9个平台 携程&#xff08;携程包车&#xff09;、飞猪、航旅、曹操、同程、12306、高德、美团、南航 2、渠道对接 1、商务沟通&#xff1a;找到渠道对接负责人&#xff0c;洽谈对接事宜 2、资质审核&#xff1a;根据对接沟通中的平台线上所需…

QT基础入门——项目案例(七)

前言&#xff1a; 前面我们已经把基础的QT知识学习了一遍&#xff0c;已经足够运用这些知识做一个简单的小项目了&#xff0c;那么现在就让我们将所学的知识运用到现实操作中&#xff0c;来做一个简单的翻硬币小项目练练手吧 目录 一、项目简介&#xff1a; 二、项目的基本…

PyPy+Cython对Python进行加速,以及乱码问题

在之前测试了使用Cython对代码进行优化加速 https://blog.csdn.net/qq_43199509/article/details/133860665 PyPy具体是啥可以看之前的知乎介绍&#xff0c;个人理解就是Python的另一种解释器 https://www.zhihu.com/question/266096929/answer/2383570933 PyPy下载 https://…

知名低代码公司有哪些?最新国内十大低代码平台排名

什么是低代码和低代码平台 低代码&#xff08;Low-Code&#xff09;是一种软件开发方法&#xff0c;它使得开发人员能够通过图形界面、拖放组件和模型驱动的逻辑&#xff0c;快速地构建和部署应用程序&#xff0c;而无需编写大量的代码。 而低代码开发平台&#xff08;LCDP&am…

Sync Folders Pro for Mac文件夹数据同步工具

Sync Folders Pro for Mac 是一款功能强大的文件夹同步工具&#xff0c;旨在帮助用户在 Mac 计算机和移动设备之间创建双向同步。这款软件支持各种文件系统和设备&#xff0c;如 iPhone&#xff0c;iPad&#xff0c;iPod&#xff0c;Android 等。通过这款软件&#xff0c;用户可…

众和策略:几点开盘和收盘股票?

股票开盘和收盘时间是投资者有必要知道的要害信息&#xff0c;因为它们挑选了股票生意的初步和结束时间。在此文章中&#xff0c;咱们将从多个视点分析股票开盘和收盘时间&#xff0c;包括全球商场开盘时间、技术分析对开盘前后价格不坚决的影响、以及日内生意者如安在开盘和收…

【社区小程序制作】便捷社区服务的新选择

社区小程序的出现为居民提供了便捷的社区服务&#xff0c;促进了社区内的信息共享和互动。下面将介绍社区小程序的优点和制作流程。 优点 便捷的社区服务&#xff1a;社区小程序为居民提供了便捷的社区服务。居民可以通过小程序查询社区通知、报修维修等&#xff0c;高效且节省…

字符与数字的相互转换

一、字符转数字 char类型字符转换为数字&#xff0c;其实是转换为ASCII码值 有两种方式&#xff1a; 1.强制类型转换&#xff0c;结果为对应的ASCII码值 char v1 a;char v2 z;char v3 1;char v4 9;int num1 (int)v1;int num2 (int)v2;int num3 (int)v3;int num4 (int)v…

word字间距突然变大怎么办?

文章目录 原因&#xff1a;word字间距突然变大&#xff0c;是文字布局设置造成的。 解决方法如下&#xff1a; 1、首先在打开的文档中&#xff0c;可以看到如下图所示部分字间距变大。 2、这时鼠标选中字间距变大的区域、或者全选该部分文字。命令选项卡内一般选择文字靠左设置…

微信视频发出去后无法播放怎么办?解决办法来了

微信作为现今生活工作使用最频繁的软件之一&#xff0c;发送文档、播放视频、分享照片截图等是经常操作的&#xff0c;然而当我们向对方发送一个视频文件的时候&#xff0c;电脑端播放器播放正常&#xff0c;通过微信发出去之后结果无法播放了。其实微信无法播放视频有很多原因…

(三十四)大数据实战——scala运行环境安装配置及IDEA开发工具集成

前言 本节内容我们主要介绍一下scala运行环境的安装配置以及在idea开发工具中集成scala插件&#xff0c;便于scala项目的开发。 在开始scala安装配置之前&#xff0c;我们要先安装好jvm运行环境&#xff0c;scala运行于Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;并…

JS中欺骗词法作用域的eval和with

1、词法作用域 简单地说&#xff0c;词法作用域就是定义在词法阶段的作用域。换句话说&#xff0c;词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的&#xff0c;因此当词法分析器处理代码时会保持作用域不变&#xff08;大部分情况下是这样的&#xff09;。 考虑…

上抖音热搜榜需要怎么做?

抖音热搜榜是根据用户的搜索行为和搜索量数据进行排名的榜单。具体排名规则如下&#xff1a; 1. 关键词匹配度&#xff1a;抖音搜索引擎会根据用户搜索的关键词与视频标题、标签、内容等进行匹配&#xff0c;匹配度越高&#xff0c;排名越靠前。 2. 视频质量&#xff1a;抖音…

6-k8s-控制器版本管理

文章目录 一、概念介绍二、配置介绍三、版本生成测试四、版本回滚测试 一、概念介绍 什么是控制器&#xff1a;在k8s中&#xff0c;控制器是一种用于控制和管理Pod的管理器&#xff0c;包括Deployment、ReplicaSet、StatefulSet等。 什么是控制器版本管理&#xff1a;是指对于…

django无法导入第三方库

引子 有的人可能会很困惑&#xff0c;为什么自己在pip中安装了某个包&#xff0c;但是在django中死活无法导入。 在cmd中能够导入。 启动django&#xff0c;总是无法导入。 本文将会用一分钟解决你的困惑。 正文 那么本文以上述的第三方库dj_db_conn_pool为例&#xff0c;…

Android:展锐T760平台camera驱动调试

一、模块平台框架 平台介绍 基于UMS9620x平台集成Camera时&#xff0c;共有四类信号需要了解&#xff1a; 1、MIPI CSI信号&#xff1a;该平台有DPHY和CPHY两种MIPI信号。  DPHY配置&#xff1a;包括数对差分数据信号DP/N&#xff0c;和一对差分时钟信号CKP/N。  …

超全面的前端工程化配置指南

前端工程化配置指南 本文讲解如何构建一个工程化的前端库&#xff0c;并结合 Github Actions&#xff0c;自动发布到 Github 和 NPM 的整个详细流程。 示例 我们经常看到像 Vue、React 这些流行的开源项目有很多配置文件&#xff0c;他们是干什么用的&#xff1f;他们的 Commit…

Typora+PicGo+Github+CSDN梦幻联动

文章目录 一、快速搭建个人免费图床二、Typora图片实现自动上传三、Typora图片上传到CSDN出现错误 一、快速搭建个人免费图床 之前写过一篇 快速搭建个人免费图床 的文章&#xff0c;但是每次都要把图片拖到PicGo里面才能生成链接很麻烦&#xff0c;而且在本地用Typora写的文章…