Unity Shader入门精要总结--透明效果

2023-11-02

前言

  • 透明度测试:它采用一种“霸道极端”的机制,只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它,即进行深度测试、深度写入等。也就是说,透明度测试是不需要关闭深度写入的,它和其他不透明物体最大的不同就是它会根据透明度来舍弃一些片元。虽然简单,但是它产生的效果也很极端,要么完全透明,即看不到,要么完全不透明。

  • 透明度混合:这种方法可以得到真正的半透明效果。它会使用当前片元的透明度作为混合因子,与已经存储在颜色缓冲中的颜色值进行混合,得到新的颜色。但是,透明度混合需要关闭深度写入,这使得我们要非常小心物体的渲染顺序。需要注意的是,透明度混合只关闭了深度写入,但没有关闭深度测试。这意味着,当使用透明度混合渲染一个片元时,还是会比较它的深度值与当前深度缓冲中的深度值,如果它的深度值距离摄像机更远,那么就不会再进行混合操作了。这一点决定了,当一个不透明物体出现在一个透明物体的前面,而我们先渲染了不透明物体,它仍然可以正常地遮挡住透明物体。也就是说,对于透明度混合来说,深度缓冲是只读的。

渲染顺序

  1. 先渲染所有不透明的物体,并开启它们的深度测试和深度写入。
  2. 把半透明物体按它们距离摄像机的远近进行排序(画家算法),然后按照从后往前的顺序渲染这些半透明物体,并开启它们的深度测试,但关闭深度写入。

由于以上的排序用到了画家算法,所以仍存在一些问题。
Unity为了解决渲染顺序的问题提供了渲染队列这一解决方案。我们可以使用SubShader 的Queue 标签来决定我们的模型将归于哪个渲染队列。Unity 在内部使用了一系列整数索引来表示每个渲染队列,且索引号越小表示越早被渲染。在Unity 5 中,Unity 提前定义了5个渲染队列,当然在每个队列中间我们可以使用其他队列。下表给出了这5个提前定义的渲染队列以及它们的描述。

透明度测试

我们先使用下图中的半透明纹理来实现透明度测试。该透明纹理在不同区域的透明度也不相同,我们通过它来查看透明度测试的效果。

我们通过Shader的处理后,可以得到类似下图的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity Shader入门精要总结--透明效果 的相关文章

  • 如何绘制存储在 SSBO 中的顶点?

    这是下面的一个问题OpenGL 和加载 读取 AoSoA 混合 SoA 格式的数据 https stackoverflow com questions 59616117 opengl and loading reading data in
  • Android 和设置(图像)视图 alpha 的 alpha

    真的没有对应的 XML 属性吗 setAlpha int 如果没有 还有哪些替代方案 它比其他响应更容易 有一个xml值alpha需要双值 android alpha 0 0 那是看不见的 android alpha 0 5 透视 andr
  • 如何将shadershop公式转换成glsl

    我最近一直在学习着色器的一些基础知识 并且想出了一个很棒的视觉工具 着色器商店 http www cdglabs org Shadershop 但我无法将我在此站点中创建的公式转换为 glsl 一个简单的例子 我在此网站中创建了一个公式 我
  • 对数/线性 Z 缓冲区阴影贴图

    问题在于 伪影出现在距离很远的阴影中 我想尝试制作一个对数深度缓冲区 但我不明白应该在哪里完成以及如何完成 我对全向阴影贴图使用点光源方法 顶点着色器 version 460 core layout location 0 in vec3 a
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • OpenGL alpha 测试 - 如何替换已弃用的 AlphaFunc?

    我正在尝试用 Alpha 绘制球体 但我的 Z 缓冲区有问题 有些像素是透明的 但会写入 Zbuffer 因此后面的不透明像素会被隐藏 这是我的设置 gl Enable gl DEPTH TEST gl DepthFunc gl LEQUA
  • OpenGL:多个顶点的单个顶点属性?

    我有一个接受以下属性的顶点着色器 a posCoord 顶点位置 a texCoord 纹理坐标 传递给片段着色器 a alpha 透明度因子 传递给片段着色器 我正在渲染的对象都是 广告牌 一对直角三角形组成一个矩形 我正在使用一次调用g
  • Unity 后处理 PostProcessEffectRenderer 在编辑器中显示,但在构建中不显示

    将 PostProcessEffectRenderer 的实现添加到 Unity 后处理堆栈后 效果在 Unity 编辑器中完美运行 但不会在构建的游戏中显示 对构建质量的更改没有效果 使用针对 Windows x86 64 构建的最高质量
  • 控制 n 个重叠区域的 alpha 混合/不透明度

    我很难理解 和控制 alpha 的混合 不幸的是 alpha 值并不是简单地 相加 0 5 0 5 不是 1 但我怎样才能做到这一点呢 目的是定义重叠区域相对于观测总数的 绝对 灰度值 请参见下面的示例 我尝试设置scale alpha r
  • Unity3D:在 AA 解析后绘制粒子以提高性能

    我正在尝试评估 MSAA 对 Unity 中含有大量粒子的场景的影响 为此 我需要 使用 8x MSAA 绘制场景中的所有非粒子对象 使用上一个通道中解析的深度缓冲区来渲染所有 将非遮挡粒子系统转移到较小的渲染目标上 将 2 的颜色缓冲区与
  • 根据 GLSL 中向量的特定分量执行最小-最大的最快方法?

    我需要在我的 GLSL 代码中多次调用这种函数 vec2 minx vec2 a vec2 b if a x lt b x return a else return b 我担心过度分支 有没有办法避免 if else 结构 我建议使用 GL
  • OpenGL 3.1 中已弃用 glLineStipple

    glLineStipple在最新的 OpenGL API 中已被弃用 它被替换成什么 如果不更换 怎样才能达到类似的效果呢 我当然不想使用兼容性配置文件 抱歉 它还没有被任何东西取代 我想到的第一个模拟它的想法是几何着色器 您向几何着色器提
  • 如何在 Pygame 中将具有一定透明度的 PNG 位图传输到表面上?

    我试图将 PNG 图像传输到表面上 但图像的透明部分由于某种原因变成黑色 这是简单的代码 screen pygame display set mode 800 600 pygame DOUBLEBUF 32 world pygame Sur
  • 帧缓冲区和在 opengl 中使用着色器

    我对帧缓冲区有点困惑 我想要做的是使用附加了多个纹理的帧缓冲区 填充每个纹理 然后使用着色器组合 混合 所有纹理以创建新的输出 听起来很容易 是的 我也是这么想的 但我不明白 如何将当前绑定的纹理传递给着色器 您需要的是将纹理放入特定的槽中
  • 如何正确设置UIView的alpha? [iOS]

    I have UIView有很多子视图 UILabel UITextView 等 如果为主视图设置 alpha 0 6 则所有子视图均采用此 alpha 如何单独设置主视图的alpha view setBackgroundColor UIC
  • 如何将透明 PNG 加载到位图并忽略 Alpha 通道

    我看到很多关于如何加载带有 alpha 通道的 PNG 并显示它的问题 但没有关于如何加载具有 alpha 通道的 PNG 但忽略 alpha 通道 从而显示底层 RGB 数据的问题 我尝试简单地从 Alpha 通道中删除所有数据 但我只得
  • 如何在使用 Cmake 构建期间编译 HLSL 着色器?

    我正在开发 d3d 应用程序 我想在使用 cmake 构建期间编译我的 hlsl 着色器 我不知道从哪里开始 这是我当前的 CMakeLists txt cmake minimum required VERSION 3 20 project
  • 在着色器中旋转法线

    我有一个场景 其中有多个具有各自位置和旋转的模型 给定法线 着色器对每个像素应用简单的双向照明 那是我的顶点着色器 version 150 in vec3 position in vec3 normal in vec2 texcoord o
  • 计算着色器中的 Image2D

    我想使用 image2D 作为顶点的 2D 存储 该顶点将由计算着色器修改 但不起作用 创建纹理 glGenTextures 1 HeightMap glBindTexture GL TEXTURE 2D HeightMap glTexIm
  • Raspberry PI 上的 JavaFX:加载库存着色器时出错

    目前我正在尝试部署我的 JavaFX 应用程序 该应用程序可以在 Windows 上的 Raspberry Model B v1 2 上顺利运行 由于 JavaFX 不能直接在 Raspi 上使用 我已经按照此处所述使用 Gluon 进行了

随机推荐

  • 标准库类型string和vector

    一 命名空间 std cin std就是命名空间 这个的含义是 编译器应该从操作符左侧的名字所示的作用域std中去寻找cin 另一种方式就是在开头显式进行说明 using std cin 这样一来后续就不用再去在每条语句中显式说明了 需要注
  • OpenAI发布通用人工智能路线图:AGI比想象中来得更快

    来源 机器之心 本文约2600字 建议阅读5分钟 通用人工智能的出现可能只是技术发展历程中的一个小节点 因为 AGI 或许可以加速自身的进步 从而以指数方式扩展能力 在 ChatGPT 引爆科技圈之后 人们对于先进技术产生了更多期待 但一直
  • Spring mvc整合freemarker详解

    1 什么是FreeMarker FreeMarker是一个模板引擎 一个基于模板生成文本输出的通用工具 使用纯Java编写 FreeMarker被设计用来生成HTML Web页面 特别是基于MVC模式的应用程序 虽然FreeMarker具有
  • 项目管理课件

    项目管理课件 考点分析 进度管理 关键路径法 必考 浮动时间 常考 总浮动时间 自由浮动时间 真题 软件配置管理 在这里插入图片描述 https img blog csdnimg cn d879983ff0ce432c9f898123bd9
  • AD FS是什么,用在什么场景,原理是什么?

    AD FS 联合身份验证 是一种身份访问解决方案 即使用户帐户和应用程序位于完全不同的网络或组织中 它也可以为客户端计算机 网络内部或外部 提供对受保护的面向Internet的应用程序或服务的无缝SSO访问 单点访问 概述 1 AD FS概
  • Arduino 编程 ESP8266 12F NodeMCU 实现 PWM 控制呼吸灯

    文章目录 Arduino 编程 ESP8266 12F NodeMCU 实现 PWM 控制呼吸灯 一 官方手册中的定义 二 开发板代码 三 示波器现象 四 实物现象 Arduino 编程 ESP8266 12F NodeMCU 实现 PWM
  • java List集合去除null

    方法一 使用迭代器进行遍历和删除 List
  • TensorRT(5):NvCaffeParser.h接口头文件分析

    TensorRT笔记系列传送门 不定期更新 深度框架 TensorRT 文章目录 一 IBlobNameToTensor类 二 IBinaryProtoBlob类 三 IPluginFactory和IPluginFactoryExt 类 四
  • DAVIS2016+Matlab+Win10使用指南

    介绍 项目地址 https davischallenge org davis2016 code html 下载 如下图所示 在DAVIS2016 Download页面 下载matlab代码和数据集 注意事项 目录结构 DAVIS2016 D
  • Ubuntu磁盘空间不足?一招轻松扩容

    以下文章来源于 公 众 号开源电子网 读取更多技术文章 请扫码关注 Ubuntu磁盘空间不足 一招轻松扩容 目的 Ubuntu空间剩余不足 需要对Ubuntu进行扩容 使用工具 使用Ubuntu系统中的gparted工具进行系统扩容 前提
  • yt-dlp 使用教程

    参考 yt dlp 使用教程 下载yt dlp exe 地址 Releases yt dlp yt dlp GitHub windows下载 exe版本 放到指定路径下 我的是C Users bellychang Downloads 查看视
  • 【华为OD机试】找最小数(C++ Python Java)2023 B卷

    题目描述 给一个正整数NUM1 计算出新正整数NUM2 NUM2为NUM1中移除N位数字后的结果 需要使得NUM2的值最小 输入描述 1 输入的第一行为一个字符串 字符串由0 9字符组成 记录正整数NUM1 NUM1长度小于32 2 输入的
  • nodeJs学习笔记

    创建服务器 在根目录下创建server js的文件 里面写如入以下代码 请求nodejs自带的http模块 var http require http http createServer function request response
  • Sublime Text 3 常用快捷键

    Ctrl Shift P 打开命令面板 Ctrl P 搜索项目中的文件 Ctrl G 跳转到第几行 Ctrl W 关闭当前打开文件 Ctrl Shift W 关闭所有打开文件 Ctrl Shift V 粘贴并格式化 Ctrl D 选择单词
  • 面试官问你“有什么问题问我吗?”,你该如何回答?

    我还记得当时我去参加面试的时候 几乎每一场面试 特别是HR面和高管面的时候 面试官总是会在结尾问我 问了你这么多问题了 你有什么问题问我吗 这个时候很多人内心就会陷入短暂的纠结中 我该问吗 不问的话面试官会不会对我影响不好 问什么问题 问这
  • 第十章 数据库连接池与DBUtils工具

    第十章 数据库连接池与DBUtils工具 数据库连接池的基本概念 数据库连接是一种关键的有限的昂贵的资源 这一点在多用户的网页应用程序中体现的尤为突出 对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性 影响到程序的性能指标 数据库
  • 浅谈Unity个人免费版与PRO专业版的区别

    Unity个人免费版 使用Unity的任何工程都要输入一次账号密码 界面是灰色 UGUI的 Canvas 的UI 不能 改变 其 Rect Transform 也就不能用 UGUI 建立 人物脚下的圆环 Unity问题 为什么Unity 5
  • 图像梯度算子——Sobel/scharr/Laplacian

    1 sobel算子 sobel算子可以计算图像梯度 计算图像梯度的作用是提取边界 1 X方向的梯度 以3x3的卷积核计算sobel算子为例 图中左边就是计算水平梯度时的卷积核 简单来说就是右边减左边 权重由卷积核规定 含义 当目标 P5点
  • 正点原子IMX6ULL阿尔法USB摄像头的远程调用(五)配带口罩检测

    本文介绍的是利用网上开源的配带口罩检测算法 结合IMX6ULL的USB摄像头制作一个小系统 首先向开源团队致敬 这个太强了 一共包括了大概有六七种检测方式 每一种识别率就很高 棒棒的 源码下载 源码地址 https gitee com mi
  • Unity Shader入门精要总结--透明效果

    前言 透明度测试 它采用一种 霸道极端 的机制 只要一个片元的透明度不满足条件 通常是小于某个阈值 那么它对应的片元就会被舍弃 被舍弃的片元将不会再进行任何处理 也不会对颜色缓冲产生任何影响 否则 就会按照普通的不透明物体的处理方式来处理它