这篇文章主要说的是关于Unity Shader 中对Alpha的Blend
Blend 透明度混合.通过参数来调整透明度,真正的透明效果.
Blend的位置在SubShader 中,CGPROGRAM前.用例如下

Shader "Example/Diffuse Bump" {Properties {_MainTex ("Texture", 2D) = "white" {}_BumpMap ("Bumpmap", 2D) = "bump" {}}SubShader {Tags { "RenderType" = "Opaque" }==注意看这里==Blend One OneCGPROGRAM#pragma surface surf Lambert
//      略ENDCG} Fallback "Diffuse"}

好的.我们着重来看下Blend One One 部分
混合命令有一下这些:

参数 描述
Blend Off 关闭混合(默认)
Blend SrcFactor DstFactor 片元产生的颜色乘以SrcFactor,加上屏幕上已有的颜色乘以DstFactor,得到最终的颜色(写入颜色缓存),示例: float4 result = SrcFactor * fragment_output + DstFactor * pixel_color
Blend SrcFactor DstFactor,SrcFactorA, DstFactorA 同上,只不过使用单独的因子SrcFactorA和DstFactorA来混合透明度通道
BlendOp BlendOperation 用其他的操作来取代加法混合
BlendOp OpColor,OpAlpha 同上,只不过对于透明度通道使用不同的操作

测试在Unity 中 Blend SrcFactor DstFactor,SrcFactorA, DstFactorA 命令失效,unity只认 Blend SrcFactor DstFactor 这种形式, “,” 后面的参数不认,但是调试中发现Unity生成的是 Blend One One,One One 这样的4个参数的形式.很是不解

混合操作(BlendOp) 具体操作
Add 加法:float4 result = SrcFactor * fragment_output + DstFactor * pixel_color
Sub 减法( 源-目标): float4 result = SrcFactor * fragment_output - DstFactor * pixel_color
RevSub 减法(目标-源): float4 result = DstFactor * pixel_color - SrcFactor * fragment_output
Min 较小值(逐个通道比较)
Max 较大值(逐个通道比较)

常用的混合命令有:

Blend SrcAlpha OneMinusSrcAlpha // 传统透明度
Blend One OneMinusSrcAlpha // 预乘透明度
Blend One One // 叠加
Blend OneMinusDstColor One // 柔和叠加
Blend DstColor Zero // 相乘——正片叠底
Blend DstColor SrcColor // 两倍相乘

Blend 参数值说明. fragment_output 为片元产生的颜色,pixel_color为缓存区的颜色
Blend {code for SrcFactor} {code for DstFactor}

Code 代表的值
One float4(1.0, 1.0, 1.0, 1.0)
Zero float4(0.0, 0.0, 0.0, 0.0)
SrcColor fragment_output
SrcAlpha fragment_output.aaaa
DstColor pixel_color
DstAlpha pixel_color.aaaa
OneMinusSrcColor float4(1.0, 1.0, 1.0, 1.0) - fragment_output
OneMinusSrcAlpha float4(1.0, 1.0, 1.0, 1.0) - fragment_output.aaaa
OneMinusDstColor float4(1.0, 1.0, 1.0, 1.0) - pixel_color
OneMinusDstAlpha float4(1.0, 1.0, 1.0, 1.0) - pixel_color.aaaa

之前看过一些文章,误以为Blend One One 最后产生的值也会对透明度产生影响,后来经过实际测试,发现没有效果,因为按照公式 float4 result = SrcFactor * fragment_output + DstFactor * pixel_color
result是包括含透明度的,其实不然,虽然result包含透明度的值,但是最终呈现到屏幕后Alpha会被舍弃,而这一步是最后一步计算颜色的地方,所以One*fragment_output 得到的值还是原来的值,透明度没有被改变,
如果是 Blend SrcAlpha One,那么就变成了

Blend SrcAlpha One
result=fragment_output.aaaa*fragment_output.rgba+float4(1,1,1,1)*pixel_color
result=fragment_output(a*r,a*g,a*b,a*a)+pixel_color

颜色值与Alpha相乘,颜色值被改变.

先写到这里,有纰漏之处还望指教.
参考链接 https://en.wikibooks.org/wiki/Cg_Programming/Unity/Transparency

Unity Shader Alpha Blend 填坑记录相关推荐

  1. Mac Xcode opencv C++环境配置 保姆级教程 填坑记录 19年最新版本

    网上找了很多教程,照着做都失败了,整整弄了两天两夜,终于好了.网上根本没有人遇到我的坑么?都搜不到,国外也没搜到,呜呜- 版本说明: 1.(必备)MacBook系统:macOS Catalina(版本 ...

  2. Python美股量化交易填坑记录——13c.Vegas隧道交易机器人(实盘记录)

    1.背景 上一篇帖子介绍了思路调整的过程,我的目标从"消灭止损单"(越来越保守)改为"追大肉"(允许有止损单,盈利超过损失就行). Python美股量化交易填坑 ...

  3. Python美股量化交易填坑记录——13b.Vegas隧道交易机器人(实盘记录)

    1.背景 上一篇帖子介绍了该算法的原理和八天的实盘记录: Python美股量化交易填坑记录--13a.Vegas隧道交易机器人_ChristopherShen的博客-CSDN博客 经过八天实盘后,已经 ...

  4. ncnn填坑记录八:将自己训练的模型打包为APK并部署到安卓端运行

    上一篇:ncnn填坑记录七:examples/squeezenet.cpp代码阅读 做一个分类任务,模型选取的mobilenetv3,训练好模型,并按前文依次转换为onnx.ncnn后,参考官方htt ...

  5. ncnn填坑记录五:在安卓端运行ncnn

    上一篇:ncnn填坑记录四:pytorch模型转ncnn 下一篇:ncnn填坑记录六:Android Studio打包APK 一.安装Android Studio 下载地址:https://devel ...

  6. ncnn填坑记录一:安装protobuf、cmake和opencv

    下一篇:ncnn填坑记录二:安装ncnn 一.protobuf安装 1.下载 git clone https://gitee.com/arcy/protobuf.git # 网络不好才在码云下载,建议 ...

  7. ubuntu16.04安装Intel 9260AC无线网卡填坑记录

    由于本科毕设环境需要,本人在笔记本上安装了win10+ubuntu16.04双系统,但是由于之前给笔记本换过无线网卡,型号是intel 9260AC,当时还是比较新的,但是发现在Ubuntu系统里面无 ...

  8. 众里寻TiDB千百度,蓦然回首,这些填坑记录还在灯火阑珊处

    前言 俗话说得好,架构重构一时爽,一直重构一直爽,又到了架构重构的时节:俗话又说了,饱暖思X欲,在产品技术架构稳定运行了好久之后,又迎来了躁动的撩拨,重构之心蠢蠢欲动:俗话最后说了,技术有风险,重构需 ...

  9. 在ThinkPad X280加装M.2硬盘上安装 Ubuntu 18.04.3 填坑记录

    填坑背景 用了一段时间的X280后,突然想在M.2接口上加装一个 NVMe 2242 的SSD,发现 Lenovo 的BIOS设置的非常奇特.能够检测到这个硬盘,但是启动项里就是不能识别!或许是直接就 ...

  10. 使用Unity打包Assetbundle填坑记录(随时更新)

    Unity版本=2017.4.13f1 问题1: Cannot mark assets and scenes in one AssetBundle 出现原因:使用Unity 打包场景文件为AssetB ...

最新文章

  1. 电脑任务管理器_安国戴尔电脑显示器维修,服务至上
  2. 好用的数据增强工具Augmentor(原图和mask扩充)
  3. sklearn 统计多分类和单分类结果的混淆矩阵API 写法 confusion_matrix 左边为真实值 上边为预测值
  4. CO-类的本质、description方法
  5. IOS学习之多线程(9)--NSOperation简单介绍
  6. javascript中变量的判断
  7. docker入门,基于ubuntu16.04
  8. 你在乎的--世界在乎的
  9. 从 Flash 到 WEBGPU,Web 图形技经历过的变革你了解吗?
  10. 传智播客8月C/C++基础班开班
  11. #35 insert
  12. python卡通滤镜_纯Python综合图像处理小工具(3)10种滤镜算法
  13. charles windows 和苹果手机进行连接抓包
  14. 《东周列国志》第三十九回 柳下惠授词却敌 晋文公伐卫破曹
  15. CentOS集群上安装Ganglia-3.6.1监控
  16. c语言判断一个数是否为偶数源代码,c语言判断一个数是否为偶数
  17. 计算机的应用软件在哪里,电脑软件卸载在哪里
  18. ArcBlock荣获“2018区块链之星”奖项
  19. 如何办理ITSS资质
  20. PDF格式转换器哪个好用

热门文章

  1. 实对称矩阵的相似对角化
  2. Insyde BIOS@G50-80 初探
  3. C语言运算符优先级列表(超详细)
  4. Ubuntu修改IP地址不生效解决办法
  5. 晨曦记账本记账收支,统计结余
  6. 文档数据库mongodb与列式数据库hbase详细比较
  7. 抖音上最火的七个Excel视频教程专栏,利用休闲时间也能成为Excel高手。
  8. 15个网页数据采集中最常遇到的问题(干货)
  9. scala安装与配置(详细步骤)
  10. 《论文阅读》D3DLO: DEEP 3D LIDAR ODOMETRY