Shader 中的渲染顺序

news2024/11/22 23:31:15

1、深度测试和深度写入

有了深度测试和深度写入发挥作用让我们不需要关心不透明物体的渲染顺序比如一个物体A 挡住了 物体B,即使底层逻辑中 先渲染A,后渲染B,我们也不用担心 B的颜色会把A覆盖,因为在进行深度测试时,远处的B的深度值无法通过深度测试,因为它的深度会比已经写入深度缓冲中A的深度值大,重合处的片元会被丢弃,颜色自然就不会写入,最终重叠处渲染出来的会是A的颜色

之前写的所有Shader都没有刻意的去设置深度测试(默认小于判断)、深度写入(默认开启) 、混合模式(默认不混合) 、 渲染队列(默认几何Geometry队列) 相关内容,是因为对于不透明的物体来说,使用默认设置就能够得到正确的渲染效果,但目前处理透明混合时,需要关闭深度写入

2、透明混合为什么需要关闭深度写入

图形学中模拟出现实世界的半透明效果是通过将多个颜色进行混合计算呈现出来的
举例:
如果前方的A对象不关闭深度写入,那么B被A遮挡的部分会在深度测试时被舍弃(因为A离摄像机更近深度更小),那么我们就无法得到被遮挡部分的颜色,也就无法进行颜色的混合计算,因此我们必须关闭透明物体的深度写入,让其不会导致被遮挡物体无法通过深度测试从而无法进行颜色混合。

3、关闭深度写入带来的问题

关闭深度写入,那么物体的渲染顺序就会变得非常的重要,谁先被渲染,谁后被渲染都会影响最终的呈现效果,举例说明
事例一:两个物体 A为半透明物体 B为不透明物体
两种可能的渲染顺序
第一种:先渲染B,再渲染A,可以得到正确的半透明效果
第二种:先渲染A,再渲染B,只会看到B的颜色

从这个例子我们看出,想要得到正确的半透明混合效果,需要先渲染不透明物体,再渲染透明物体。

事例二:两个物体 A B 都为半透明物体
两种可能的渲染顺序
第一种:先渲染B,再渲染A,得到正确的半透明效果
第二种:先渲染A,再渲染B,得到错误的半透明效果(B在前)

从这个例子我们看出,想要得到正确的半透明混合效果,半透明物体之间也需要正确的渲染顺序才能得到正确结果。

通过这两个事例我们知道,当关闭了深度写入后带来的最大问题是物体的渲染顺序会直接影响最终的渲染效果如果先渲染没有开启深度写入的前面的物体,之后渲染后面的物体就会将前面物体的颜色覆盖或出现错误前后关系表现

4、如何解决渲染顺序带来的问题

为了解决渲染顺序带来的问题,大部分的渲染引擎采取的方式都是先对场景上的物体进行排序,然后再渲染

常规方法为:
1.先渲染所有不透明物体,开启它们的深度测试和深度写入

2.将半透明物体按照离摄像机的远近进行排序,然后从后往前的顺序渲染它们开启深度测试关闭深度写入

这样做的目的是保证靠后的物体颜色能先直接进入颜色缓冲区或混合后进入颜色缓冲区,就不会出现之前两个事例当中由于先渲染前面的物体导致结果出现问题

特殊情况

常规方法:
1.先渲染所有不透明物体开启它们的深度测试和深度写入
2.将半透明物体按照离摄像机的远近进行排序,然后从后往前的顺序渲染它们
开启深度测试关闭深度写入(排序是基于物体的,而不是片元的)

解决方案:

1.忍一忍,接受部分细节的小瑕疵
2.从模型入手:拆分模型
3.使用开启深度写入的半透明效果来模拟半透明(性能消耗较高)

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

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

相关文章

电池管理系统SOX算法资料优化目录2024.8.26

这篇文章主要写一下这一次更新的几个地方,有对原来的代码及模型进行优化的部分,也有新增加的代码和模型,我就把几个比较典型的给列了出来。但是还有好多的更新没有在下面展示出来,因为一个个展示出来太复杂了。如果你对更新的内容…

如何使用ssm实现基于 SSM 框架的宠物用品电子商务平台设计与实现+vue

TOC ssm258基于 SSM 框架的宠物用品电子商务平台设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科…

黑神话悟空妖怪平生录

黑神话悟空是一部特别好玩的单机游戏。上一个我这么喜欢的国产单机还是古剑奇谭三。 虽然黑神话的战斗系统和地图系统尚不完善,但是这里面的游记是真的做得很认真。 203个妖怪,203首小诗,203个妖生故事,带你去看妖怪的喜怒哀乐。…

freemarker模版注入

Freemarker模版注入漏洞 模版注入漏洞根因(SSTI,服务器端模版注入)freemarker介绍Freemarker模版注入漏洞关键点漏洞复现环境引入依赖poc 修复方案完整代码(包含修复)参考 模版注入漏洞根因(SSTI&#xff0…

乾坤大挪移--将一个混乱的excel分类整理的辅助VBA代码

excel 乾坤大挪移 你不需要将工作表手动分类; 只需要在”已整理“的标题行增加标题列, listbox会自动获取”已整理“sheet中的标题列,并列出来 你只需要选中同一列中的单元格,点击想移动到的列表的类别,双击或者点…

【云故事探索】NO.7:「越用越上瘾」,中华财险 60% 研发人员用通义灵码提效

云布道师 中华联合财产保险股份有限公司运用“云大模型”技术革新业务,通过阿里云的通义灵码大幅提升编码效率,近60%的研发人员采用,采纳的生成代码占比约20%,显著提升了团队创新能力与代码质量,并积极探索大模型在更多…

基于SpringBoot的智慧党建系统+uniapp移动端+LW示例参考

1.项目介绍 技术栈环境:SpringBootthymeleafuniappIDEA NavicatMySQL 功能介绍: 后端功能:首页管理(轮播图、通知公告、新闻管理)、用户管理(用户信息、用户反馈、用户订单、用户动态)、其他…

一文搞定MybatisPlus

Mybatis简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 (来自官网) 体验Mybatisplus 1.创建SpringBoot工程,导入m…

HarmonyOS--认证服务-操作步骤

HarmonyOS–认证服务 文章目录 一、注册华为账号开通认证服务二、添加项目:*包名要与项目的包名保持一致三、获取需要的文件四、创建项目:*包名要与项目的包名保持一致五、添加json文件六、加入请求权限七、加入依赖八、修改构建配置文件:bui…

【UDS诊断】——0x34、0x36、0x37服务

🙋‍♂️【UDS诊断服务介绍合集】系列💁‍♂️点击跳转 文章目录 一、服务概述1.0x34服务——请求下载数据1.1.0x34格式 2.0x36服务——数据传输2.1.0x36格式 3.0x37服务——退出上传下载3.1.0x37格式 一、服务概述 Client端使用Routine Control服务来…

WIN32实现远程桌面监控

文章目录 完整代码API简介调试代码 后记reference 完整代码 server.cpp #include <winsock2.h> #include <Ws2tcpip.h> #include <windows.h> #include <stdio.h> #include <vector> #pragma comment(lib, "ws2_32.lib")LRESULT CAL…

什么是韦恩图,怎么制作?用这款软件在线绘制,简单又好用!

在日常工作和学习中&#xff0c;我们经常需要用图表来可视化呈现复杂的信息和关系。其中&#xff0c;韦恩图是一种简洁而强大的可视化工具&#xff0c;能够清晰地展现集合之间的关系&#xff0c;诸如包含与被包含、互斥、并列等。 不过对刚接触韦恩图的人而言&#xff0c;或多…

traceroute命令这样用,追踪主机路由没烦恼

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 网络的稳定性和可靠性对于业务连续性至关重要。当涉及到网络连接问题时&#xff0c;有一个强大的工具就是 tr…

Certum Domain Validation CA SHA2

Certum是波兰的一家数字证书厂家&#xff0c;该机构也是目前世界第四家兼容性在99%机构&#xff08;包括历史版本浏览器&#xff09;&#xff0c;目前在国内有授权提供商&#xff1a;Gworg提供签发和认证&#xff0c;拥有二级代理划分&#xff0c;适合长期做SSL证书业务或者集成…

年薪100K入职字节测试岗现在分享下我常背的软件测试面试题

800道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web测试、接口测试、APP测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题&am…

Linux文件编程(系统API调用)

文章目录 Linux文件编程标注C的IO缓存类型代码示例--缓存区的存在 文件I/O系统调用标准C库关于文件的输入输出函数FILE结构体文件描述符文件描述符与文件指针的相互转换 系统调用常用函数open函数&#xff08;打开或者创建文件&#xff09;creat函数&#xff08;创建一个现有文…

JAVA-封装

目录 一、封装的概念 二、封装扩展之包 1. 包的概念 2.导入包中的类 3.自定义包 4.常见的包 三、访问限定符 在同一包中&#xff1a; 在不同包中&#xff1a;​编辑 一、封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主…

ESP32修改分区表

修改分区表 官方参考 在工程目录文件夹新建分区表&#xff0c;参考官方的写就行&#xff0c;我这里改成了8M的FLASH&#xff0c;所以新建的分区表为名字是 default_8MB.csv &#xff0c;内容如下&#xff1a; # Name, Type, SubType, Offset, Size, Flags nvs, data, …

后端微服务与分布式系统

编写一篇关于后端微服务和分布式系统的文档&#xff0c;需要详细讨论微服务架构的核心概念、优缺点、关键技术&#xff0c;以及在分布式系统中的应用。以下是文档的大纲和内容概述&#xff1a; 后端微服务与分布式系统 1. 简介 微服务架构是一种将大型应用程序分解为一系列小…

leetCode - - - 二叉树

目录​​​​​​​ 1.前中后序遍历&#xff08;递归&#xff09; 2.前中后序遍历&#xff08;迭代&#xff09; 3.翻转二叉树&#xff08;LeetCode 226&#xff09; 4.最大二叉树&#xff08; LeetCode 654 &#xff09; 5.平衡二叉树&#xff08; LeetCode 110 &#xf…