Unity Shader Alpha Blend 填坑记录
这篇文章主要说的是关于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 填坑记录相关推荐
- Mac Xcode opencv C++环境配置 保姆级教程 填坑记录 19年最新版本
网上找了很多教程,照着做都失败了,整整弄了两天两夜,终于好了.网上根本没有人遇到我的坑么?都搜不到,国外也没搜到,呜呜- 版本说明: 1.(必备)MacBook系统:macOS Catalina(版本 ...
- Python美股量化交易填坑记录——13c.Vegas隧道交易机器人(实盘记录)
1.背景 上一篇帖子介绍了思路调整的过程,我的目标从"消灭止损单"(越来越保守)改为"追大肉"(允许有止损单,盈利超过损失就行). Python美股量化交易填坑 ...
- Python美股量化交易填坑记录——13b.Vegas隧道交易机器人(实盘记录)
1.背景 上一篇帖子介绍了该算法的原理和八天的实盘记录: Python美股量化交易填坑记录--13a.Vegas隧道交易机器人_ChristopherShen的博客-CSDN博客 经过八天实盘后,已经 ...
- ncnn填坑记录八:将自己训练的模型打包为APK并部署到安卓端运行
上一篇:ncnn填坑记录七:examples/squeezenet.cpp代码阅读 做一个分类任务,模型选取的mobilenetv3,训练好模型,并按前文依次转换为onnx.ncnn后,参考官方htt ...
- ncnn填坑记录五:在安卓端运行ncnn
上一篇:ncnn填坑记录四:pytorch模型转ncnn 下一篇:ncnn填坑记录六:Android Studio打包APK 一.安装Android Studio 下载地址:https://devel ...
- ncnn填坑记录一:安装protobuf、cmake和opencv
下一篇:ncnn填坑记录二:安装ncnn 一.protobuf安装 1.下载 git clone https://gitee.com/arcy/protobuf.git # 网络不好才在码云下载,建议 ...
- ubuntu16.04安装Intel 9260AC无线网卡填坑记录
由于本科毕设环境需要,本人在笔记本上安装了win10+ubuntu16.04双系统,但是由于之前给笔记本换过无线网卡,型号是intel 9260AC,当时还是比较新的,但是发现在Ubuntu系统里面无 ...
- 众里寻TiDB千百度,蓦然回首,这些填坑记录还在灯火阑珊处
前言 俗话说得好,架构重构一时爽,一直重构一直爽,又到了架构重构的时节:俗话又说了,饱暖思X欲,在产品技术架构稳定运行了好久之后,又迎来了躁动的撩拨,重构之心蠢蠢欲动:俗话最后说了,技术有风险,重构需 ...
- 在ThinkPad X280加装M.2硬盘上安装 Ubuntu 18.04.3 填坑记录
填坑背景 用了一段时间的X280后,突然想在M.2接口上加装一个 NVMe 2242 的SSD,发现 Lenovo 的BIOS设置的非常奇特.能够检测到这个硬盘,但是启动项里就是不能识别!或许是直接就 ...
- 使用Unity打包Assetbundle填坑记录(随时更新)
Unity版本=2017.4.13f1 问题1: Cannot mark assets and scenes in one AssetBundle 出现原因:使用Unity 打包场景文件为AssetB ...
最新文章
- 电脑任务管理器_安国戴尔电脑显示器维修,服务至上
- 好用的数据增强工具Augmentor(原图和mask扩充)
- sklearn 统计多分类和单分类结果的混淆矩阵API 写法 confusion_matrix 左边为真实值 上边为预测值
- CO-类的本质、description方法
- IOS学习之多线程(9)--NSOperation简单介绍
- javascript中变量的判断
- docker入门,基于ubuntu16.04
- 你在乎的--世界在乎的
- 从 Flash 到 WEBGPU,Web 图形技经历过的变革你了解吗?
- 传智播客8月C/C++基础班开班
- #35 insert
- python卡通滤镜_纯Python综合图像处理小工具(3)10种滤镜算法
- charles windows 和苹果手机进行连接抓包
- 《东周列国志》第三十九回 柳下惠授词却敌 晋文公伐卫破曹
- CentOS集群上安装Ganglia-3.6.1监控
- c语言判断一个数是否为偶数源代码,c语言判断一个数是否为偶数
- 计算机的应用软件在哪里,电脑软件卸载在哪里
- ArcBlock荣获“2018区块链之星”奖项
- 如何办理ITSS资质
- PDF格式转换器哪个好用