UnityShader(十七)透明效果

前言:

在实时渲染中实现透明效果,通常会在渲染模型时控制它的透明通道(Alpha Channel)。当开启透明混合后,一个物体被渲染到屏幕上时每个片元除了颜色值和深度值外,还有一个透明值,1表示像素完全不透明,0表示完全透明。

Unity中通常有两种方法实现透明效果:

1.使用透明测试(Aplha Test),这种方法其实无法实现真正的半透明效果

2.透明度混合(Alpha Blending)

透明度测试

只要一个片元的透明度不满足条件,那么它对应的片元就会被舍弃。被舍弃的片元不会进行任何处理,也不会对颜色缓冲区有任何影响,否则就会按照普通的不透明物体的处理方式进行处理,即进行深度测试、深度写入等。

也就是书透明度测试不需要关闭深度写入,它和其它不透明物体最大的不同就是它会根据透明度来舍弃一些偏远。但是这种效果很极端,要么完全透明,要么完全不透明,也就不能够实现半透明的效果

透明度混合

这种方法可以实现真正的半透明效果。它会使用当前片元的透明度作为混合因子,与已经存储再颜色缓冲中的颜色值进行混合,得到新的颜色。

但是透明度混合需要关闭深度写入,这需要我们小心物体的渲染顺序。但需要注意的是,透明度混合只是关闭了深度写入,但不会关闭深度测试。

渲染顺序的重要性

对于游戏物体都是不透明物体来说,渲染顺序不是很重要,因为强大的深度测试会解决游戏物体的前后关系。

假设现在场景中有两个物体A和B,A为半透明物体,B为透明物体,且A在B的前面。

第一种情况:我们先渲染B,再渲染A。呢么由于不透明物体开启了深度测试和深度写入,而此时深度缓存中没有任何数据,那么B就会被写入颜色缓冲区和深度缓冲区。随后再渲染A,透明物体会进行深度测试但不会深度写入,所以在渲染出的图像中我们发现B会比A距离摄像机更近,我们会使用A的透明度来和颜色缓冲中的B的颜色进行混合,得到真正的半透明物体。

第二种情况:我们先渲染A,再渲染B。渲染A时深度缓冲区没有任何有效数据(因为透明物体是不需要深度写入的),因此A直接写入颜色缓冲中,但不会修改深度缓冲。等到渲染B时,B会进行深度测试直接通过,那么它的颜色就会被直接写入颜色缓冲中,结果就是B的颜色会直接覆盖颜色缓冲中A的颜色,从视觉上来看,B出现在A的前面,这是错误的。

同样,现在假设A和B都是半透明物体,且A在B前面。

第一种情况:先渲染B再渲染A。那么B会正常写入颜色缓冲,然后A会和颜色缓冲中B颜色进行混合,得到正确的半透明效果。

第二种情况:先渲染A再渲染B。那么A会正常写入颜色缓冲,然后B会和颜色缓冲中A颜色进行混合,这样结果就相反了过来,得到错误的结果(B看起来像是在A前面)

UnityShader的渲染顺序

Unity为了解决渲染顺序问题提供了渲染队列(render queue)的解决方案,我们可以使用SubShader的Queue标签来决定我们的模型将归于哪个渲染队列。Unity在内部使用一系列整数索引来表示每个渲染队列,且索引越小表示越先被渲染。

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

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

相关文章

汽车信息安全--安全调试功能在量产后是否必须禁用(2)

目录 1.引入 2 响应挑战解锁的两种实现 3.Debug via Commnucation 4.小结 1.引入 上一篇文章,

快速实现鸿蒙侧边栏显示与隐藏

文章目录 前言侧边栏组件使用快速搞定侧边栏总结 一、前言 有好多文章要分享,但是来不及,就把最近觉得比较重要的组件分享下。最近因为在完善玩android的一个app,我的这个app叫玩鸿蒙,过段时间就开源了,敬请期待。 …

免费开源的 Vue 拖拽组件 VueDraggablePlus (兼容移动端)

VueDraggablePlus 支持 Vue2 / Vue3,是被尤雨溪推荐了的拖拽组件。我自己试用过了,还挺好用的,兼容移动端。 官网:https://alfred-skyblue.github.io/vue-draggable-plus/ 官网文档里面很详细了,我就不再介绍安装和用…

香港服务器被大流量攻击了怎么办?

面对香港服务器遭受大流量攻击,以下是一些应对措施: 增加带宽和网络资源:尽快增加服务器的带宽和网络资源,以应对攻击造成的流量压力。 使用DDoS防护服务:考虑使用专业的DDoS(分布式拒绝服务)防护服务,这些…

GPU服务器与普通服务器之间的差异

众所周知,服务器是网络中的重要设备,要接受少至几十人、多至成千上万人的访问,因此对服务器具有大数据量的快速吞 吐、超强的稳定性、长时间运行等严格要求。但是,今天我们了解的是GPU服务器,很明显,从字面…

Google colab中如何从kaggle中接入数据?

写在前面 使用google colab进行数据分析和探索时,可引用的数据源包括但不限于:1.可上传的数据文件用本地加载的的方式打开数据资源;2.从网络链接中直接打开后加载到缓存中的文件资源;3.通过API或者外部的开放接口加载数据&#x…

【日本語】N2考试湖北报名笔记

阅读资料 视频:JLPT报名技巧 使用浏览器调试模式快速报名; 1 报名流程 【考场选择】 1.1 春季报名:03-19 07:00:00 1.2 预习网站登录信息 1.3 登录验证码:06:55 (图片来自视频《教日语的阿飞老师 - 担心能力考抢…

微信小程序选择器picker的使用(省市区)

index.wxml picker中的 moderegion模式&#xff0c;这里同element中的select不同的是&#xff0c;不需要自己在绑定数据原&#xff0c;默认就包含了省市区的整体数据 <view class"section"><view class"section__title">省市区选择器</vie…

【源码阅读】Mybatis底层源码分析(详细Debug查看附代码)

一、搭建测试代码框架 &#xff08;代码已提交到github->测试代码&#xff0c;建议结合代码根据本文debug一遍更有利于理解&#xff0c;帮忙点个Star 哈&#xff0c;本人在这里谢谢了&#xff09; 二、猜想Mybatis是如何设计的 从上面的案例中&#xff0c;可以大致可以猜测…

酷开科技以酷开系统的力量让电视机“活”起来

让用户回归电视的绝不会是因为电视机本身&#xff0c;而是电视系统的内容和交互的形式。酷开科技以系统的力量让电视机“活”起来。对于许多人来说&#xff0c;观看电影是一种享受、一种放松、一种逃避现实的方式。而现在&#xff0c;酷开科技作为行业内领军企业&#xff0c;为…

YOLOV5 部署:QT的可视化界面推理(创建UI,并编译成py文件)

1、前言 之前用YOLOV5 做了一个猫和老鼠的实战检测项目,本章将根据之前训练好的权重进行部署,搭建一个基于QT的可视化推理界面,可以检测图片和视频 本章使用的数据集和权重参照:YOLOV5 初体验:简单猫和老鼠数据集模型训练-CSDN博客 可视化界面如下: 2、安装Pyside6 本…

JSONP漏洞详解

目录 同源策略 JSONP简介 JSONP劫持漏洞 漏洞原理 漏洞利用过程 利用工具 JSONP漏洞挖掘思路 JSONP防御 首先&#xff0c;要了解一下什么是同源策略&#xff1f; 同源策略 同源策略&#xff08;SOP&#xff09;是浏览器的一个安全基石&#xff0c;浏览器为了保证数据…

碳课堂|什么是碳减排?如何减少碳排放?

一、碳减排的定义及提出背景&#xff1a; 碳减排&#xff0c;即减少人类在生产、生活中二氧化碳&#xff08;CO2&#xff09;等温室气体的排放量&#xff0c;以应对全球气候变暖。 18世纪工业革命起&#xff0c;人类在生产活动中使用大量矿物燃料&#xff08;如煤、石油等&am…

从电子邮件到即时通讯:信息技术演变与现代沟通方式的变迁

上世纪90年代&#xff0c;欧美企业界迎来了信息化建设的大爆发时期。Oracle、SAP和Adobe等国际知名软件巨头纷纷致力于推广和普及电子邮件系统&#xff0c;使电子邮件迅速成为企业和个人进行信息交换的主要工具之一。电子邮件的出现&#xff0c;也提供了一种高效的信息传递手段…

zookeeper集群安装部署和集群异常处理

准备jdk和zookeeper安装包【官网即可下载】 zookeeper-3.5.1-alpha.tar.gz jdk1.7.0_8020200612.tar 准备三台linux虚拟机【具体以项目实际需要为准】&#xff0c;并安装jdk和zookeeper 虚拟机地址如下&#xff1a;194.1.1.86&#xff08;server.1&#xff09;、194.1.1.74…

阿里云-云服务器ECS新手如何建网站?

租阿里云服务器一年要多少钱&#xff1f; 不同类型的服务器有不同的价格。 以ECS计算型c5为例&#xff1a;2核4G-1年518.40元&#xff0c;4核8G-1年948.00元。 阿里云ECS云服务器租赁价格由三部分组成&#xff1a; 也就是说&#xff0c;云服务器配置成本磁盘价格网络宽带价格…

本地部署Grok需要的条件

2024年3月18日凌晨三点钟&#xff0c;马斯克开源了Grok&#xff0c;兑现了他承诺&#xff0c;Grok 的开源将为人工智能技术的发展和应用带来新的机遇&#xff0c;那我们如何运行、部署Grok呢。 本地部署Grok通常需要以下条件&#xff1a; 硬件资源&#xff1a; 大量的计算资源&…

VTK中GetOutputPort()和GetOutput()的区别

SetInput&#xff08;&#xff09;函数被彻底删除了&#xff0c;只剩下SetInputConnection&#xff08;&#xff09;和SetInputData&#xff08;&#xff09;函数&#xff1a; 1、GetOutputPort(): GetOutputPort() 返回的是上一个算法管道对象输出&#xff08;output port&am…

C#-面向对象基本概念

1. 面向对象基本概念 之前所接触到的编程方式叫做面向过程面向过程和面向对象是两种不同的编程方式对比面向过程的特点&#xff0c;可以更好的了解什么是面向对象 1.1 过程和函数&#xff08;科普&#xff09; 过程是早期的一个编程概念过程类似于函数&#xff0c;只能执行&…

【JAVA笔记】IDEA配置本地Maven

文章目录 1 配置本地Maven1.1 Maven下载1.2 Maven安装与配置1.2.1 安装1.2.2 配置1.2.2.1 环境配置1.2.2.2 本地仓库配置 2 IDEA设置本地Maven 1 配置本地Maven 1.1 Maven下载 官网&#xff1a;http://maven.apache.org/下载地址&#xff1a;http://maven.apache.org/downloa…