当前位置: 首页 > news >正文

Shader 透明相关

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 混合操作命令 来设定混合的计算方式,它的基本语法是

 常见的混合类型

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • RK3568-设备树休眠唤醒
  • 【ACM出版,快录用】2024年智能医疗与可穿戴智能设备国际学术会议(SHWID 2024, 10月18-20)
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • leetcode 80 删除有序数组中的重复项 II
  • 24.8.26学习心得
  • Python将Word文档转为PDF
  • go国内源设置
  • 四,接口类型和网络协议
  • 数据结构-全部由1组成的子矩形数量
  • Springboot统一给redis缓存的Key加前缀
  • 又一个坑爹:未启用约束一行或多行中包含违反非空、唯一或外键约束的值。
  • 并行 parallel DOP 受 Resource Manager 限制
  • spring框架简介
  • 网络工程师学习笔记——广域网通信
  • redis的aof日志配置项详解
  • [译] React v16.8: 含有Hooks的版本
  • 「译」Node.js Streams 基础
  • 【comparator, comparable】小总结
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 0x05 Python数据分析,Anaconda八斩刀
  • 230. Kth Smallest Element in a BST
  • node和express搭建代理服务器(源码)
  • Protobuf3语言指南
  • Python爬虫--- 1.3 BS4库的解析器
  • Python中eval与exec的使用及区别
  • rc-form之最单纯情况
  • React Native移动开发实战-3-实现页面间的数据传递
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue自定义指令实现v-tap插件
  • yii2中session跨域名的问题
  • 百度小程序遇到的问题
  • 使用Gradle第一次构建Java程序
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 数组的操作
  • 微信开源mars源码分析1—上层samples分析
  • 项目实战-Api的解决方案
  • 一起参Ember.js讨论、问答社区。
  • 因为阿里,他们成了“杭漂”
  • 用Visual Studio开发以太坊智能合约
  • ​queue --- 一个同步的队列类​
  • ​zookeeper集群配置与启动
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # Redis 入门到精通(九)-- 主从复制(1)
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #include
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (2020)Java后端开发----(面试题和笔试题)
  • (23)Linux的软硬连接
  • (3)nginx 配置(nginx.conf)
  • (function(){})()的分步解析
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复