控制renderQueue解决NGUI与Unity3D物体渲染顺序问题

NGUI与Unity3D物体渲染顺序问题,做过UI的各位应该都遇到过。主要指的是UI与Unity制作的特效、3D人物等一同显示时的层次问题。

由于UI与特效等都是以transparent方式渲染,而Unity与NGUI在管理同是透明物体的render queue时实际上互相没有感知,于是引出排序问题。现在介绍以render queue值,来达到使得UI、特效按照我们希望的顺序进行渲染的目的。

这里先说明一下关于设置UI的draw call的细节,也是最繁琐的部分。我们知道NGUI会将采用同样材质的widget合并到同一个draw call中进行渲染。然而在我们这个需求中,这一功能导致了无法在widget之间插入其它渲染队列的问题,也就是原始的三明治问题。如果只是涉及到UI控件之间的穿插,NGUI可以通过depth设置来解决:

如果是使用同一材质的多个控件设置了不同的depth值,则NGUI还是将这些控件合并为同一个draw call
如果设置了不同depth的多个控件,穿插使用了不同的材质,则NGUI会将其打散为不同的draw call,顺序即按照depth指定。

在 Unity 中,material.renderQueue 是用于设置材质的渲染队列(Render Queue)的属性。渲染队列是用于控制渲染顺序的机制,它决定了对象在渲染管线中的绘制顺序,从而影响了它们在场景中的渲染顺序。

每个材质都有一个关联的渲染队列,决定了材质将在渲染管线的哪个阶段进行渲染。较小的渲染队列值表示对象将在渲染管线的早期渲染,而较大的渲染队列值表示对象将在渲染管线的后期渲染。

可以使用 material.renderQueue 属性来设置材质的渲染队列。通常情况下,这可以用于控制材质的渲染顺序,以解决透明对象的渲染问题,确保它们正确地在不同的深度顺序中渲染。

using UnityEngine;public class RenderQueueExample : MonoBehaviour
{public Material customMaterial;public int customRenderQueue = 3000; // 设置自定义渲染队列值private void Start(){if (customMaterial != null){customMaterial.renderQueue = customRenderQueue; // 设置材质的渲染队列值}}
}

customMaterial 是一个材质球,可以通过在 Unity 编辑器中将其分配给该脚本的公共字段。然后,您可以使用 customMaterial.renderQueue 属性来设置材质的渲染队列值。

优缺点

使用 material.renderQueue 来控制材质的渲染队列具有一些好处和潜在的坏处,这取决于项目的需求和使用情况。

好处:

解决透明对象的深度排序问题: 当场景中有多个透明对象重叠时,它们的渲染顺序对于正确显示是至关重要的。通过调整不同材质的渲染队列,您可以确保透明对象在正确的顺序中渲染,避免了深度排序问题。

实现特定渲染顺序: 有时,您可能希望特定的对象在渲染管线中的某个阶段进行渲染,例如在天空盒渲染之后或之前。通过设置渲染队列,您可以控制对象的渲染顺序,以满足您的需求。

定制渲染效果: 一些渲染效果可能需要对象以特定的顺序进行渲染。通过设置渲染队列,您可以实现定制的渲染效果,如描边、发光等。

坏处:

增加复杂性: 使用渲染队列可能会增加项目的复杂性,特别是当需要精细地调整渲染顺序时。过多的渲染队列调整可能会使项目难以维护。甚至可能多个UI或者物体公用了一个材质,但是不同场景下显示的位置不一致

潜在的渲染问题: 不正确地设置渲染队列可能会导致渲染问题,如对象闪烁(z_fightong)、深度冲突等。调整渲染队列时需要小心,确保在实际渲染中没有问题。

可能不适用于所有情况: 并非所有项目都需要显式控制渲染队列。一些项目中的默认渲染顺序可能已经足够满足需求,不需要额外的调整。调整Z轴可能是更好的解决方式

综上所述,使用 material.renderQueue 可以在某些情况下解决渲染顺序的问题,但在使用时需要谨慎。在进行渲染队列的调整时,最好测试并仔细观察渲染结果,以确保达到预期的效果。

后续我会补充图片说明

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

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

相关文章

力扣1137.第N个泰波那契数(动态规划)

/*** author Limg* date 2023/08/11* 泰波那契序列 Tn 定义如下&#xff1a; * T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2* 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 */ #include<iostream> using namespace std; int tribonacci…

开源数据库Mysql_DBA运维实战 (部署服务篇)

前言❀ 1.数据库能做什么 2.数据库的由来 数据库的系统结构❀ 1.数据库系统DBS 2.SQL语言(结构化查询语言) 3.数据访问技术 部署Mysql❀ 1.通过rpm安装部署Mysql 2.通过源码包安装部署Mysql 前言❀ 1.数据库能做什么 a.不论是淘宝&#xff0c;吃鸡&#xff0c;爱奇艺…

不知什么原因,背调没过?

前两天写了一篇文章《电话背调&#xff0c;我给他打了8分》&#xff0c;跟大家聊了职场中沟通的一些基本原则和经验。背调时&#xff0c;同事没给打招呼&#xff0c;几乎也没什么私交&#xff0c;但出于“不坏别人好事”的原则&#xff0c;给了8分的评价。 在稍微大一些的公司…

Nginx+Tomcat的动静分离

首先准备好5台机子&#xff1a;2台装有tomcat&#xff0c;3台装有nginx 1.关闭5台机子的防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 Nginx1 vim /usr/local/nginx/conf/nginx.conf#在--#pid-- 下做四层代理 stream {upstream test {server …

IMU惯性测量单元相关技术(概念版)

重要说明&#xff1a;本文从网上资料整理而来&#xff0c;仅记录博主学习相关知识点的过程&#xff0c;侵删。 一、参考资料 新手入门系列3——Allan方差分析方法的直观理解 惯性测量单元Allan方差分析详解 IMU误差&测量模型 IMU标定之—Allan方差 IMU误差模型简介及VINS…

微信小程序中键盘弹起输入框自动跳到键盘上方处理

效果展示 键盘未弹起时 键盘弹起后&#xff1a; 实现方式 话就不多说了 我直接贴代码了 原理就是用你点击的输入框的底部 距离顶部的位置 减去屏幕高度除以2&#xff0c;然后设成负值&#xff0c;再将这个值给到最外层相对定位的盒子的top属性&#xff0c;这样就不会出现顶…

打靶练习:WestWild 1.1(一个简单但不失优雅的Ubuntu靶机)

文章目录 主机发现和nmap信息收集samba渗透web渗透用户横向移动sudo提权到root总结 主机发现和nmap信息收集 //主机发现 sudo nmap -sn 192.168.226.0/24 //扫描整个C段//端口扫描//初步扫描 sudo nmap -sT --min-rate 10000 -p- 192.168.226.131 -oA nmapscan/ports //用…

每日后端面试5题 第六天

1. Java中有几种类型的流 字符流、字节流 输入流、输出流 节点流、处理流 2 .Spring支持的几种bean的作用域 五种&#xff1a; 1.singleton bean在每个ioc容器中只有一个实例 2.prototype 可以有多个实例 3-5在web环境中才生效 3.request 每次请求才创建bean 4.se…

git上传代码后,如何清空历史日志以及文件操作,重新上传?以及上传代码

【Git教程】如何清除git仓库的所有提交记录&#xff0c;成为一个新的干净仓库  马三也算Github的忠实用户了&#xff0c;经常会把一些练手的项目传到Github上面进行备份。其中有一个名为ColaFramework的Unity框架项目&#xff0c;马三开发了一年多了&#xff0c;期间提交代码的…

NetFlow 笔记

目录 1. NetFlow 笔记1.1. 模拟器1.2. 什么是 NetFlow?1.3. Cisco NetFlow 版本1.4. NetFlow 是如何工作的?1.4.1. IP 流量1.4.2. NetFlow 缓存1.4.3. NetFlow 收集器 1.5. 为什么使用 NetFlow?1.6. SNMP 与 NetFlow1.7. sFlow、NetFlow、SNMP 三者之间有什么不同?1.7.1. s…

记录一个正则表达式

正则表达式要求如下: 至少 8 个字符&#xff1b; 至少包含一个小写英文字母&#xff1b; 至少包含一个大写英文字母&#xff1b; 至少包含一个数字&#xff1b; 至少包含一个特殊字符&#xff0c;特殊字符为&#xff1a;“!#$%^&*()-” 中的一个&#xff1b; 不包含2个连续…

每日一题 154寻找旋转排序数组中的最小值||(二分)

题目 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,4]若旋转 7 次&…

Kotlin~Mediator中介者模式

概念 创建一个中介来降低对象之间的耦合度&#xff0c;关系”多对多“变为“一对多”。 角色介绍 Mediator&#xff1a;抽象中介者&#xff0c;接口或者抽象类。ConcreteMediator&#xff1a;中介者具体实现&#xff0c;实现中介者接口&#xff0c;定义一个List管理Colleagu…

【CSH 入门基础 5 番外篇 -- zsh和bash区别及其使用介绍】

文章目录 1.1 zsh 和 bash 的区别1.1.1 oh-my-zsh 介绍1.1.2 zsh 插件 zsh-autosuggestions.zsh 1.1 zsh 和 bash 的区别 在Linux环境下&#xff0c;Bash和Zsh都是非常常见的Shell环境&#xff0c;它们都可以用来执行命令行指令&#xff0c;运行脚本等&#xff0c;但是它们之间…

若依部署前后端

打包项目 前端打包 npm run build:prod将代码上传到指定目录 配置nginx转发 server{listen 8090;server_name localhost;location / {root /home/cc_library/dist;index index.html index.htm;# 配置 history模式&#xff0c;刷新页面会404&#xff0c;&#xff0c;因为服…

基于k8s job设计与实现CI/CD系统

方案一&#xff1a;Jenkinsk8sCICD 方案二&#xff1a;kanikok8s jobCICD CICD 基于K8s Job设计流水线 CI方案 工具镜像 云原生镜像打包工具 kaniko的使用 与Jenkins对比 可用性与易用性

Flutter参考资料

Flutter 官网 : https://flutter.dev/ Flutter 插件下载地址 : https://pub.dev/packages Flutter 开发文档 : https://flutter.cn/docs ( 强烈推荐 ) 官方 GitHub 地址 : https://github.com/flutter Flutter 中文社区 : https://flutter.cn/ Flutter 实用教程 : https://flut…

SAP MM学习笔记18- SQVI 工具

Tr-cd SQVI 是一个SAP数据库工具。 使用这个工具&#xff0c;可以自己构建查询界面中的条件&#xff0c;查询对象&#xff0c;从而自由查询数据&#xff0c;实现标准没有的功能。 1&#xff0c;SQVI 和 SQ1&#xff0c;SQ2&#xff0c;SQ3 的不同 SQ1&#xff0c;2&#xff0…

DevOps在项目管理中的魔法:简化与深化

什么是DevOps&#xff1f; 定义与核心思想 DevOps, 这个名词&#xff0c;在技术领域中饱受瞩目。但它到底是什么&#xff1f;首先&#xff0c;DevOps并不仅仅是一个技术或者工具&#xff0c;它首先是一种文化&#xff0c;一种思想。DevOps是Development&#xff08;开发&#…