Unity3D 渲染队列 ZTest与ZWrite详解

前言

在Unity3D中,渲染队列(Rendering Queue)是一个非常重要的概念,它决定了游戏中各个物体的渲染顺序和优先级。而在渲染队列中,ZTest和ZWrite又是两个关键的参数,它们决定了物体在渲染的过程中如何处理深度测试和深度写入。本文将详细介绍Unity3D中的渲染队列、ZTest和ZWrite的概念,并给出相应的技术详解和代码实现。

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀

一、渲染队列(Rendering Queue)概述

在Unity3D中,所有的渲染操作都是由图形管线(Graphics Pipeline)来完成的。图形管线是一个复杂的流程,包括几个阶段:几何处理(Geometry Processing)、光栅化(Rasterization)、片段处理(Fragment Processing)等。在图形管线中,渲染队列的作用是决定物体的渲染顺序和优先级。渲染队列是一个整数值,数值越小的物体越先被渲染,数值越大的物体越后被渲染。Unity3D中定义了一些常用的渲染队列值,如下所示:

  1. Background:-1000
  2. Geometry:0
  3. AlphaTest:200
  4. Transparent:3000
  5. Overlay:4000

渲染队列的设置可以通过材质(Material)的渲染模式(Rendering Mode)来指定,也可以通过脚本动态设置。在材质的Inspector面板中,可以找到Rendering Mode属性,通过设置该属性的值来指定渲染队列。在脚本中,可以使用Material.renderQueue属性来设置渲染队列。

二、ZTest与ZWrite详解

在图形渲染中,深度测试(ZTest)和深度写入(ZWrite)是两个非常重要的概念。深度测试是在片段处理阶段进行的一种测试,用于确定哪些片段应该被丢弃,哪些应该被保留。深度写入则是在光栅化阶段进行的操作,用于决定片段的深度值是否应该被写入深度缓冲区。在Unity3D中,ZTest和ZWrite是两个常用的材质属性,它们可以通过材质的Inspector面板或脚本来设置。

  1. ZTest

ZTest属性用于控制深度测试的方式,它有以下几个常用的取值:

  • Always:始终通过深度测试。
  • Never:始终不通过深度测试。
  • Less:当片段的深度值小于深度缓冲区中的值时通过深度测试。
  • Greater:当片段的深度值大于深度缓冲区中的值时通过深度测试。
  • Equal:当片段的深度值等于深度缓冲区中的值时通过深度测试。
  • LEqual:当片段的深度值小于等于深度缓冲区中的值时通过深度测试。
  • GEqual:当片段的深度值大于等于深度缓冲区中的值时通过深度测试。
  • NotEqual:当片段的深度值不等于深度缓冲区中的值时通过深度测试。
  1. ZWrite

ZWrite属性用于控制深度写入的方式,它有以下两个常用的取值:

  • On:启用深度写入,片段的深度值将被写入深度缓冲区。
  • Off:禁用深度写入,片段的深度值将不会被写入深度缓冲区。

在实际开发中,通过调整ZTest和ZWrite属性可以实现不同的效果。例如,当需要绘制半透明的物体时,可以将ZWrite设置为Off,这样就可以实现深度测试但不会写入深度值,从而保证半透明效果的正确显示。

三、代码实现

下面是一个简单的示例代码,演示了如何通过脚本动态设置材质的ZTest和ZWrite属性:

using UnityEngine;public class ZTestAndZWriteExample : MonoBehaviour
{public Material material;void Start(){// 设置材质的ZTest属性material.SetInt("_ZTest", (int)UnityEngine.Rendering.CompareFunction.Less);// 设置材质的ZWrite属性material.SetInt("_ZWrite", 1); // 1表示On,0表示Off}
}

在上面的示例中,我们通过调用Material.SetInt方法来设置材质的_ZTest和_ZWrite属性。其中,_ZTest属性对应ZTest,_ZWrite属性对应ZWrite。通过设置不同的值,可以实现不同的深度测试和深度写入效果。

总结:

本文介绍了Unity3D中的渲染队列、ZTest和ZWrite的概念,并给出了相应的技术详解和代码实现。渲染队列决定了物体的渲染顺序和优先级,ZTest和ZWrite控制了深度测试和深度写入的方式。在实际开发中,合理设置这些参数可以帮助开发者实现更加精美和高效的游戏画面。希望本文能够对Unity3D开发者有所帮助,谢谢阅读!

更多视频教学

Unity3D教程​www.bycwedu.com/promotion_channels/2146264125

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

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

相关文章

研发效能最佳实践:持续集成应用实践丨IDCF

作者:谢带达 研发效能(DevOps)工程师(中级)认证学员 一、DevOps概述 DevOps的发展可以追溯到2009年,当时由Patrick Debois和Andrew Clay Shafer发起了第一次DevOps Days会议。随后,DevOps开始…

【R语言简介】讲解

R语言简介,环境与基础语法及注释 1. R语言简介2. 环境安装3. 基础语法3.1 变量赋值3.2 数据结构3.3 函数调用3.4 控制流3.5 注释 4. 基本的数据操作和函数 1. R语言简介 R语言是一种专为统计分析、数据挖掘和图形展示而设计的编程语言和软件环境,它由统…

应用引导页配置相关 - iOS

应用引导页配置相关,通过 ScrollView 滑动至末页点击进入主页,具体实现方式如下,可供参考; /**加载引导页*/ - (void)loadGuidePage {// 基础配置self.window [[UIWindow alloc] initWithFrame:SCREEN_RECT];self.window.backgroundColor [UIColor whiteColor];viewControll…

永磁同步电机无感FOC(龙伯格观测器)算法技术总结-实战篇

文章目录 1、ST龙伯格算法分析(定点数)1.1 符号说明1.2 最大感应电动势计算1.3 系数计算1.4 龙伯格观测器计算1.5 锁相环计算1.6 观测器增益计算1.7 锁相环PI计算(ST)1.8 平均速度的用意 2、启动策略2.1 V/F压频比控制2.2 I/F压频…

qnx shell sh ,linux shell bash

for i in 1 2 3 4 5 doecho $i doneecho $SHELL Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门_centos sh bash-CSDN博客

php cli 多进程编程

前言 php cli 命令模式我想在日常开发中,大家用的都比较少。其实,在某些场景,cli命令真的很有作用, 我举个例子 在mysql数据库的某个表tab1中数据量有3000W条数据,现在需要对这张表中的每一条数据做计算处理。将处理…

设计模式(含7大原则)面试题

目录 主要参考文章 设计模式的目的 设计模式的七大原则 设计模式的三大分类及关键点 1、创建型模式(用于解耦对象的实例化过程) 2、结构型模式 3、行为型模式 23种设计模式(乱序--现学现写,不全面--应付面试为主) 单例模式 模板模式 哈哈哈哈哈 声明 此文只针…

策略模式代码示例(二)

一、定义 策略模式,针对每一个不同的类型,调用具有共同接口的不同实现类,从而使得它们可以相互替换。 策略模式 ,针对实现同一接口的不同的类,采用不同的策略。比如,面对高级会员、初级会员会采用不同的折…

详解字符串函数<string.h>(下)

1. strncpy函数的使用和模拟实现 char* strncpy(char* destination, const char* source, size_t num) 1.1 函数功能以及用法 拷贝指定长度的字符串 将“source”指向的字符串中的“num”个字符拷贝到“destination”指向的字符数组中。相比于strcpy函数,该函数多…

SQL语言的五大分类 (DQL、DDL、DML、DCL、TCL)

目录 一、DQL 二、DDL 三、DML 四、DCL 五、TCL 一、DQL(数据查询语言) Data Query Language,数据查询语言: select:用于数据查询 关键字:SELECT ... FROM ... WHERE 二、DDL(数据定义语…

swift 长按桌面图标弹出快捷选项

文章目录 一、3D Touch二、主屏交互1. 静态添加2. 动态添加三、监听主屏交互按钮的点击事件四、预览和跳转1. 注册3D touch2. 实现协议3. 在目标控制器复写previewActionItems4. 使用UIContextMenuConfiguration一、3D Touch 3D Touch通过屏幕下方的压力感应器来感知不同的压力…

Cesium地表透明

之前Cesium是不能地表透明的,需要改内部代码,将GlobeSurfaceTileProvider.js中的PASS.GLOBE改成PASS.TRANSPARENT,通过将地表的drawCommand放到透明队列里渲染。现在发现有了新的方法(其实2020年就有该方法了)&#xf…

数据库管理-第157期 Oracle Vector DB AI-08(20240301)

数据库管理157期 2024-03-01 数据库管理-第157期 Oracle Vector DB & AI-08(20240301)1 创建示例向量2 查找最近向量3 基于向量簇组的最近向量查询总结 数据库管理-第157期 Oracle Vector DB & AI-08(20240301) 作者&…

【axiox】前后端接口通讯数据交互

重要全局配置: axios.create(); 设置axios请求的公共配置信息。 service.interceptors.request.use((config)>{}) 请求拦截器 service.interceptors.response.use((res)>{},(err)>{}) 响应拦截器 const source axios.CancelToken.source(); 用…

oracle RAC节点重构

一、清除集群上二节点的节点信息 1、删除实例 dbca或静默: [oraclerac1 ~]$ dbca -silent -deleteinstance -nodelist rac2 -gdbname orcl -instancename orcl2 -sysdbausername sys -sysdbapassword oracledbca-实例管理-删除节实例-选择服务输入密码-选择inactiv…

基于小波神经网络的数据分类算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 1.程序功能描述 基于小波神经网络的数据分类算法。输入为5个特征值,输出为判断(是,否)。拿50组数据对本算法作为训练组,后30组数据作…

B树、B+树、红黑树的定义、之间的区别、优缺点、数据结构、应用等

目录 B树 定义 数据结构 优点 缺点 应用 B树 定义 数据结构 优点 缺点 应用 红黑树 定义 数据结构 优点 缺点 应用 B树与B树与红黑树的区别 B树 定义 B树是一种自平衡的多路搜索树,它可以有多个子节点,不同于二叉树的是,一…

深入学习NumPy库在数据分析中的应用场景

在数据科学与机器学习领域,NumPy(Numerical Python)是一个经常被提及的重要工具。它是Python语言中一个非常强大的库,提供了高性能的多维数组对象以及用于处理这些数组的工具。NumPy不仅仅是一个用于数值计算的库,它还…

【PCB】用透明胶带制作印制板

用透明胶带作保护层来制作印制电路的方法,简单实用,作出的电路板质量较好,具体作法如下: (1)裁下一块敷铜板,用水磨砂纸将其四周毛刺磨平,用去污粉处理敷铜板表面上的污垢&#xff…

基于粒子群优化算法的图象聚类识别matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于粒子群优化算法的图象聚类识别。通过PSO优化方法,将数字图片的特征进行聚类,从而识别出数字0~9. 2.测试软件版本以及运行结果展示 M…