Shader 透明相关

news2024/9/25 21:18:16

1、设置深度写入与渲染队列

深度写入

深度写入默认是开启,需要通过渲染状态中的 ZWrite off 指令主动关闭深度写入
当我们把它写在Pass渲染通道中时,它只会影响该Pass
若我们把它写在SubShader语句块中,它将影响其中的所有Pass

渲染队列

通过渲染标签主动的设置物体的渲染顺序Tags{ "Queue" = "标签值" }

1.Background(背景)(队列号:1000),最早被渲染的物体的队列,一般用来渲染天空盒或者背景

2.Geometry(几何)(队列号:2000),不透明的几何体通常使用该队列,不设置时的默认队列

3.AlphaTest(透明测试)(队列号:2450) 需要透明度测试的物体使用的队列

4.Transparent(透明的)(队列号:3000) 半透明物体的渲染队列,该队列中几何体按照由远到近的
顺序进行绘制,所有进行透明混合的几何体都应该使用该队列

5.Overlay(覆盖)(队列号:4000),用是放在最后渲染的队列,于叠加渲染的效果

6.自定义队列,基于Unity预先定义好的这些渲染队列标签来进行加减运算来定义自己的渲染队列 如:Tags{ "Queue" = "Geometry+1" } 代表的队列号就是 2001

渲染队列一般都定义在SubShader语句块中,影响之后的所有Pass渲染通道使用该Shader(着色器)的物体,就会根据你设置的渲染队列在特定的时间进行渲染
在使用渲染队列Queue 时,一般会搭配忽视投影器IgnoreProjector 和 渲染类型RenderType 一起使用

忽视投影器 IgnoreProjector 标签:
投影器(Projector)是Unity中的一种特殊的光源,它用于在场景中投射纹理(Texture)或简单的几何形状(如圆形
或方形)来模拟光照、阴影或其他视觉效果。

渲染类型 RenderType 标签:
对着色器进行分类,用于着色器替换功能,摄像机上有对应API,可以指定渲染类型替换成别的着色器
Opaque(不透明的)、 Transparent(透明的)、 TransparentCutout(透明切割)、 Background(背景)、 Overlay(覆盖)

 2、设置混合命令

编写Shader时可以通过添加【混合方式】 的渲染状态来控制源颜色和目标颜色如何进行混合计算

 

混合默认是关闭的,当使用了Blend混合命令时(除Blend off),Unity内部就会自动的帮助我们开启混合我们在实现透明效果时,就需要设置混合方式这个渲染状态

 混合的基本原理

当我们在进行渲染时,当片元通过了深度测试后,会进入到混合流程中。在混合流程中:
当前片元的颜色被称为 源颜色;颜色缓冲区中的颜色被称为 目标颜色

混合就是将源颜色和目标颜色用对应的混合算法进行计算后,输出一个新的颜色更新到颜色缓冲区中

注意:这些颜色都是RGBA包含透明通道A

混合的计算规则

混合因子

我们假设
当前片元的颜色被称为 源颜色 = S  (source)
颜色缓冲区中的颜色被称为 目标颜色 = D (destination)
混合后的 输出颜色 = O(out)
混合计算的规则就是需要构建两个混合等式
1. 计算RGB通道的混合等式
        Orgb = 源因子 * Srgb + 目标因子 * Drgb
2. 计算A通道的混合等式
        Oa = 源透明因子 * Sa + 目标透明因子 * Da

如果我们使用方式二来设置因子,由于没有指定透明相关因子,因此,在计算时
源透明因子 = 源因子
目标透明因子 = 目标因子

1. Orgb = 源因子 * Srgb + 目标因子 * Drgb
2. Oa = 源因子 * Sa + 目标因子 * Da

 混合操作

Unity当中还可以选择其他的计算方式来进行混合计算,在ShaderLab当中除了可以使用 Blend 混合命令来设定混合因子,还提供了一个 BlendOp 混合操作命令 来设定混合的计算方式,它的基本语法是

 常见的混合类型

 

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

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

相关文章

Dubbo负载均衡的5种策略及适用场景

Dubbo负载均衡的5种策略及适用场景 1. Random LoadBalance(默认)2. RoundRobin LoadBalance3. LeastActive LoadBalance4. ConsistentHash LoadBalance 💖The Begin💖点点关注,收藏不迷路💖 Dubbo为优化服务…

Web攻防之应急响应(一)

目录 1. 前言 2. 靶场准备 3. 应急场景 4. 应急实战 4.1 查看服务器开放端口 4.2 通过远程链接工具连接服务器 4.3 寻找中间件日志 4.4. 查看并下载日志 4.5 初步分析日志 4.6 查看安全分析报告 4.6 从被篡改的页面开始 4.6 通过修改的文件时间进一步分析日志信息 4.…

零基础学PLC的指令-位逻辑指令(1)

1、常开触点: 它是一个逻辑开关,可以理解为是电气控制图中的常开按钮,这个逻辑开关是否接通是受寻址的结果而决定的,若I0.0(按位寻址)的寻址结果为“1”,这个逻辑开关就会导通,若寻…

2.2.2 Posix API与网络协议栈 3

3 断开连接 四次挥手 不分客户端,服务器,只分主动方和被动方 主:tcp包里fin这一位 置1被:回,ack这一位 置1被: fin1主:ack1 与posix api关系,调用了close() ,不是网络…

数据库mysql集群主从、高可用MGR、MHA技术详解

一、安装数据库mysql步骤 环境:红帽7.9系统 安装依赖 yum install cmake gcc-c openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 -y 将下载的MySQL软件包解压并cd到mysql的目录下 [rootmysql-node10 ~]# tar zxf mysq…

新手小白Ubuntu18.04超详细安装教程

1、Ubuntu18.04系统下载地址 Ubuntu18.04下载地址 直接下载桌面版 2、Ubuntu18.04安装 (1)打开VMware虚拟机 文件—>新建虚拟机—>选择典型 (2)选择稍后安装系统 (3)选择linux系统,…

Linux常用应急排查命令(持续更新)

1、history (1)使用history查看历史命令,分析攻击者使用过何命令 history(2)但攻击者也能回使用history -c 清除掉历史命令 history -c(3)使用cat查看cat /root/.bash_history 文件也可以查看…

C++入门基础知识35——【关于C++ 存储类之mutable 存储类thread_local 存储类】

成长路上不孤单😊【14后,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&#xff…

CentOS安装使用教程与集群环境搭建

文章目录 一、下载CentOS镜像1. 下载 二、创建虚拟机三、CentOS安装、克隆与配置1. 安装CentOS2. CentOS虚拟机克隆2.1 介绍2.1.1 完全克隆 (Full Clone)2.1.2 链接克隆 (Linked Clone) 2.2 克隆虚拟机 3. CentOS虚拟机配置3.1 修改主机名3.2 配置虚拟机网络3.3 配置网络参数3.…

C:回调函数的介绍-学习笔记

前言: 本篇文章我们将继续指针相关知识:回调函数 希望大家在看完后能够有所收获! 回调函数 定义与概念 回调函数是一个通过指针调用的函数。 如果把函数指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时&…

ARM32开发——(十四)GD32F4_DMA功能查询

GD32F4系列微控制器支持DMA(Direct Memory Access)功能,该功能允许外设通过DMA控制器直接访问内存,从而减轻CPU的负担。GD32F4系列微控制器的DMA功能如下: 支持最多8个DMA通道,每个通道都可以对应一个外设…

MySQL集群技术2——MySQL的主从复制

MySQL主从复制 MySQL 主从复制是一种常用的数据复制机制,它允许在一个或多个从属服务器上复制来自主服务器的数据更改。这种机制对于实现数据备份、负载均衡、读写分离等多种应用场景都非常有用。下面是关于 MySQL 主从复制的详细说明: MySQL 主从复制…

Linux平台下UE的代码启动流程

文章目录 概述main(主函数)CommonUnixMain(unix平台通用函数)GuardedMain(引擎主函数)AppExitCallback(退出调用) 小结 概述 本篇主要写下Linux下UE的启动流程,主要还是代码流程。从最开始的main函数,到最后的引擎层的启动退出,至于中间加载…

显示器熄屏待机时,音响持续发出USB插入和拔出的声音的解决方法!

电脑电源计划设置经过一段时间自动关闭显示屏,当显示屏关闭的时候,连接电脑主机的音响会每隔大约5秒左右持续播放USB插入和拔出的提示声,非常烦人。 网上搜索的解决方法是在显示器的设置中将输入源的【自动输入】关闭即可。原因是显示器信号被…

从汇编层看64位程序运行——C++的Copy Elision(复制省略)技术的实现

大纲 Copy Elision的应用场景返回值优化(Return Value Optimization, RVO)命名返回值优化(Named Return Value Optimization, NRVO)C11及以后的移动语义 禁用Copy Elision(复制省略)Copy Elision&#xff0…

Redis 的 主从复制

目录 1 Redis 主从复制介绍 2 Redis主从复制原理 2.1 主从同步过程 3 Redis实现主从复制 3.1 环境配置 3.2 修改各节点的配置文件 3.2.1 MASTER 3.2.2 SLAVE 3.3.3 重启Redis 3.3 查看是否实现了主从复制 3.3.1 MASTER 3.3.2 SLAVE 3.3.3 Redis 常用操作 3.3.4 数据添加查看…

AD9162数据链路lanes与FPGA高速BANK引脚交叉相连导致vivado编译失败

问题概述 对AD9162芯片进行功能开发时,发现AD9162的链路lanes与FPGA的高速BANK引脚存在交叉相连的情况,按照实际的引脚连接关系进行约束后,vivado编译失败。 问题阐述及原因分析 问题详情阐述 板卡对AD9162芯片进行功能开发时,发…

高并发业务下的库存扣减技术方案设计

扣减库存需要查询库存是否足够: 足够就占用库存不够则返回库存不足(这里不区分库存可用、占用、已消耗等状态,统一成扣减库存数量,简化场景) 并发场景,若 查询库存和扣减库存不具备原子性,就可能超卖&…

node.js使用express框架实现api接口开发(从零开始,超简单可直接复制)

目录 一、效果图 二、实现 1、引入express框架依赖 2、 新建启动文件(/server/index.js) 3、新建接口函数文件(/server/router.js) 一、效果图 二、实现 1、引入express框架依赖 在项目文件夹根目录下,打开控制台…

ShenNiusModularity:一款基于 .NET Core 框架研发的自媒体内容管理系统

项目介绍 ShenNiusModularity是一款基于 .NET Core 框架研发的、开源、免费的自媒体内容管理系统。项目秉承大道至简的原则开发,坚持业务模块最低复杂度复用,代码方面追求简单、高效、实用。适合小白入门进阶,同样适用老手上路干活。 项目包…