文章目录

  • 前言
  • 一、混合公式
    • 1.说明
    • 1.常用公式
  • 二、问题
  • 总结
  • 参考

前言

本文介绍unity渲染中的透明度混合,和透明度混合相关问题。


一、混合公式

1.说明

unity上,Blend Src Dst, 其中Src是指当前片元着色器输出的颜色,Dst是指缓存区中的颜色,src 可以简单理解为当前输出的颜色,dst表示上一次渲染的颜色(背景颜色)。

混合方程:

 C¯result=C¯source∗Fsource+C¯destination∗Fdestination

C¯source:源颜色向量。这是来自纹理的本来的颜色向量。
C¯destination:目标颜色向量。这是储存在颜色缓冲中当前位置的颜色向量。
Fsource:源因子。设置了对源颜色的alpha值影响。
Fdestination:目标因子。设置了对目标颜色的alpha影响。

公式解析:

假设混合方式为:Blend SrcAlpha OneMinusSrcAlpha
1)假设贴图有一个不透明红色点, Color(1,0,0,1),该点背景色为不透明蓝色 Color(0,0,1,1)。最终颜色 = (1,0,0)* 1 +(0,0,1)(1 - 1) = (1,0,0)
2)假设贴图有一个半透明红色点, Color(1,0,0,0.8),该点背景色为不透明蓝色 Color(0,0,1,1)
最终颜色 = (1,0,0)
0.8 +(0,0,1)(1 - 0.8) = (0.8,0,0.2)
而假如0.8变为0.2时,
最终颜色 = (1,0,0)
0.2+(0,0,1)*(1 - 0.2) = (0.2,0,0.8)

OpenGL混合参考链接

1.常用公式

类似PS上的效果:
Blend SrcAlpha OneMinusSrcAlpha 正常
Blend OneMinusDstAlpha One 柔和相加(Soft Addtive)
Blend DstColor Zero 正片叠底(Multiply),即相乘
Blend DstColor SrcColor 两倍相乘(2x Multiply)

BlendOp Min
Blend One One 变暗(Darken)

BlendOp Max
Blend One One 变亮(Lighten)

Blend OneMinusDstColor One 滤色(Screen)
Blend One One 线性减淡(Linear Dodge)

二、问题

解决Unity在线性空间下,UI对于带Alpha半透明的贴图,在混合颜色时就会出现错误。(备注:Unity线性空间下的sRGB选项不会对Alpha进行处理)。

混合公式:
Gamma空间下的Alpha混合公式:color = (A.rgb * A.a) + (B.rgb * (1 - A.a))
Linear空间下的Alpha混合公式:color = ((A.rgb ^ 2.2 * A.a) + (B.rgb ^ 2.2 * (1 - A.a))) ^(1 / 2.2)

解决步骤:
1)所有UI素材取消勾选sRGB选项,得到的混合公式为:color = ((A.rgb * A.a) + (B.rgb * (1 - A.a))) ^(1 / 2.2) ;
2)然后在输出的颜色上做一次pow(2.2),可以用后处理实现,Universal Render Pipeline管道中可以在BlitPass中做处理。

总结

透明度混合可以实现很多复杂的效果,选择不同的混合模式,可以解决很多渲染上显示问题,比如RT在UI上的显示问题,RT上的特效和UI结合显示的问题等。

参考

OpenGL混合模式
20余种颜色混合模式

透明度混合(Alpha blending)相关推荐

  1. 图片正常模式混合(透明度混合)公式

    一.描述 所有内容摘自维基 在处理图象时可能需要手撸图片混合的代码,此时混合公式就十分重要.而正常混合(Normal Blending)模式是最常用的一种格式(比如PS的默认图层混合模式).想手动实现 ...

  2. unity shader学习---透明度测试,透明度混合

    unity实现透明效果 效果图 理论 Alpha Test Alpha Blend 改进 开启深度写入的半透明效果 双面渲染的透明效果 代码部分 效果图 Alpha Test Alpha Test W ...

  3. unity物体设置透明度_透明度混合(Alpha blending)

    文章目录 前言 一.混合模式 1.说明 2.常用公式 二.问题 总结 参考 前言 本文介绍unity渲染中的透明度混合,和透明度混合相关问题. 一.混合公式 1.说明 unity上,Blend Src ...

  4. RGBA alpha 透明度混合算法实现和测试

    目录 1.算法叙述 1.1.透明度混合算法1 1.2.AlphaBlend算法介绍 1.3.简易Alpha混合算法 2.算法实现代码和测试 2.1.透明度混合算法1实现代码 2.1.AlphaBlen ...

  5. iOS之深入解析预乘透明度Premultiplied Alpha

    一.前言 Premultiplied Alpha 的概念,做过游戏开发的应该都知道,Xcode 的工程选项里有一项 Compress PNG Files,会对 PNG 进行 Premultiplied ...

  6. 【Unity Shader】实现透明度测试和透明度混合

    本篇开始将进行<入门精要>初级篇最后一部分的学习,完成透明效果的学习. 1 Unity中实现透明效果的方法 一个像素的RGBA参数中的最后一项A指的就是透明度Alpha.在之前的实践中,一 ...

  7. Unity_Shader学习笔记_02_透明度测试,透明度混合,半透明.shader入门精要

    关于透明度测试,主要是通过clip函数来实现裁剪功能 函数:void clip(float4 x);void clip(float3 x);void clip(float2 x);void clip( ...

  8. 8.2透明度混合-关闭写入

    //透明度混合 //使用当前偏移的透明度作为混合因子,与已经存储在绿色缓冲中的颜色进行混合.得到颜色. //使用混合命令Blend //可以得到真正的半透明效果 //关闭深度写入会造成错误排序的情况 ...

  9. unity物体设置透明度_URP自学笔记5. 透明度混合与透明度测试

    1.概述 本节中我们回顾一下两种透明方法,透明度混合与透明度测试.透明度混合用于实现半透明,透明度测试则用于实现消融效果之类"消失"效果. 2.透明度混合 透明度混合是一种混合方式 ...

  10. unity 半透明混合问题_Unity Shader 透明度混合的双面渲染(十八)

    效果: 双面渲染的透明度混合的物体.png 原图: transparent_texture.png Shader代码: Shader中2个Pass代码一样,一个只渲染背面,一个只渲染正面 // 透明度 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第23期)
  2. 大中型网站集群架构企业级高标准全自动实战项目征集
  3. 微软的100道算法面试题(一)
  4. Codeforces 1196E Connected Component on a Chessboard
  5. 43行代码AC——HDU 1757 A Simple Math Problem(矩阵快速幂,附快速幂讲解)
  6. 如何使用 API 的方式给 SAP service cloud Registered product 上传图片
  7. P4735 最大异或和
  8. 利用dft的定义计算dft的matlab程序_CP2K教程系列之静态计算(Pymatflow篇)
  9. python变量和字符_Python变量和字符串
  10. windows连接远程服务器报错‘SSH‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件 解决方案
  11. Qt加载RGB内存数据,并显示彩色图
  12. HTML和CSS面试题—整理过的48题,关注收藏,持续更新
  13. IT战略规划与企业架构
  14. Maxwell个人初学经验及资料分享
  15. 前端人事面试问题总结
  16. 常用排序算法总结与英文翻译
  17. 看完就会flink基础API
  18. 零信任态势评估:CIS安全控制内容与实施
  19. 幻数浅析(Magic Number)
  20. 微信小程序原生tabBar基础模板

热门文章

  1. 可视化任务编排拖拉拽的数据集成工具
  2. 504PHP,php504错误怎么解决_后端开发
  3. 元宇宙专题001 | 他们居然将元宇宙和心理学写到一起了
  4. 【业务安全-01】业务安全概述及测试流程
  5. sublime复制一行_sublime怎么快速复制一行,快捷键是什么?
  6. 2014年度江西省科学技术奖授奖项目名单
  7. 从零开始vue项目使用cesium开发三维地图(一)
  8. 司马相如——草根逆袭凭借千古情诗赢得白富美,从此走向人生巅峰
  9. 局域网计算机组建立,win10怎么建立局域网工作组_win10组建局域网工作组的基本步骤-win7之家...
  10. 编制现金流量表3个步骤!