Unity中的CG编写Shader系列(Blend)
来源:互联网 发布:宜宾县网络电视台 编辑:程序博客网 时间:2024/06/03 19:40
原文地址:http://www.cnblogs.com/daxiaxiaohao/p/4059310.html
1.不透明度
当我们要将两个半透的纹理贴图到一个材质球上的时候就遇到混合的问题,由于前面的知识我们已经知道了片段着色器以及后面的环节的主要工作是输出颜色与深度到帧缓存中,所以两个纹理在每个像素上的颜色到底以怎样的形式混合在一起最后输出到帧缓存中是我们现在首要讨论的内容。
1.混合(blending)
上一篇文章中的管道环节中的“逐帧操作”环节中的一项操作就是混合操作,可见混合操作是不可编程的固定功能环节。
在混合操作中,我们将片段着色器中计算出来的颜色称之为 “源颜色”,帧缓存中对应的像素已经存在的颜色叫做“目标颜色”。混合操作就是将源颜色与目标颜色以一些选项进行结合。
既然是固定功能环节,那么这些选项我们只能选择,不能编写。
我们选择混合的选项的过程是通过以下面的等式来进行RGBA颜色的计算的:
float4 result = SrcFactor * fragment_output + DstFactor * pixel_color;
Unity中的Shader 通过ShaderLab语法表达的混合操作过程为,例:
Blend SrcAlpha OneMinusSrcAlpha //alpha blending Blend One OneMinusSrcAlpha //premultiplied alpha blending Blend One One //additive Blend SrcAlpha One //additive blending Blend OneMinusDstColor One //soft additive Blend DstColor Zero //multiplicative Blend DstColor SrcColor //2x multiplicative Blend Zero SrcAlpha //multiplicative blending for attenuation by the fragment's alpha
所以混合操作的基本语法为
Blend SrcFactor DstFactor
选项代号
与之等价的代码
One
float4(1.0)
Zero
float4(0.0)
SrcColor
fragment_output
SrcAlpha
float4(fragment_output.a)
DstColor
pixel_color
DstAlpha
float4(pixel_color.a)
OneMinusSrcColor
float4(1.0) - fragment_output
OneMinusSrcAlpha
float4(1.0 - fragment_output.a)
OneMinusDstColor
float4(1.0) - pixel_color
OneMinusDstAlpha
float4(1.0 - pixel_color.a)
其中float4(1.0)的写法我们前面已经见过,等价于float4(1.0,1.0,1.0,1.0)
并且其中所有向量的分量区间都是[0,1]区间。
- Unity中的CG编写Shader系列(Blend)
- 解读Unity中的CG编写Shader系列一
- 解读Unity中的CG编写Shader系列二
- 解读Unity中的CG编写Shader系列三
- 解读Unity中的CG编写Shader系列目录
- 解读Unity中的CG编写Shader系列4——unity中的圆角矩形shader
- 解读Unity中的CG编写Shader系列4——unity中的圆角矩形shader
- 解读Unity中的CG编写Shader系列4——unity中的圆角矩形shader
- 解读Unity中的CG编写Shader系列1——初识CG
- 解读Unity中的CG编写Shader系列1——初识CG
- 解读Unity中的CG编写Shader系列1——初识CG
- 解读Unity中的CG编写Shader系列1——初识CG
- 解读Unity中的CG编写Shader系列1——初识CG
- 解读Unity中的CG编写Shader系列1——初识CG
- [Shader 着色器]解读Unity中的CG编写Shader系列4——unity中的圆角矩形shader
- 解读Unity中的CG编写Shader系列2——shader的输入输出参数
- 解读Unity中的CG编写Shader系列2——shader的输入输出参数
- 解读Unity中的CG编写Shader系列2——shader的输入输出参数
- sublime text3 使用ctrl+b,只有bulid结果,没有代码输出结果
- 等待唤醒机制与简单的生产消费者模型
- 某名企关于衍生词替换成词根的面试题
- java生成UUID
- 多线程经典面试题
- Unity中的CG编写Shader系列(Blend)
- C++常用数据类型转换的区别
- JAVA集合框架基础
- 对Guava Cache的封装和使用(包括一个管理页面实现了查看统计信息、情况、查看记录等)
- 前端<tr>分页实现
- AndroidStudio中的NDK开发初探
- React 的数据载体:state、props、context
- Java 高并发缓存与Guava Cache
- JAVA