解读Unity中的CG编写Shader系列七(不透明度与混合)
2015-06-23 17:46
633 查看
转自http://www.itnose.net/detail/6098539.html
在混合操作中,我们将片段着色器中计算出来的颜色称之为 “源颜色”,帧缓存中对应的像素已经存在的颜色叫做“目标颜色”。混合操作就是将源颜色与目标颜色以一些选项进行结合。
既然是固定功能环节,那么这些选项我们只能选择,不能编写。
我们选择混合的选项的过程是通过以下面的等式来进行RGBA颜色的计算的:
float4 result = SrcFactor * fragment_output + DstFactor * pixel_color;
我还是用图形表达上面这个等式吧:
Unity中的Shader 通过ShaderLab语法表达的混合操作过程为:
其中这2个代号分别可以选择的选项如下表:
其中float4(1.0)的写法我们前面已经见过,等价于float4(1.0,1.0,1.0,1.0)
并且其中所有向量的分量区间都是[0,1]区间。
1.不透明度
当我们要将两个半透的纹理贴图到一个材质球上的时候就遇到混合的问题,由于前面的知识我们已经知道了片段着色器以及后面的环节的主要工作是输出颜色与深度到帧缓存中,所以两个纹理在每个像素上的颜色到底以怎样的形式混合在一起最后输出到帧缓存中是我们现在首要讨论的内容。1.混合(blending)
上一篇文章中的管道环节中的“逐帧操作”环节中的一项操作就是混合操作,可见混合操作是不可编程的固定功能环节。在混合操作中,我们将片段着色器中计算出来的颜色称之为 “源颜色”,帧缓存中对应的像素已经存在的颜色叫做“目标颜色”。混合操作就是将源颜色与目标颜色以一些选项进行结合。
既然是固定功能环节,那么这些选项我们只能选择,不能编写。
我们选择混合的选项的过程是通过以下面的等式来进行RGBA颜色的计算的:
float4 result = SrcFactor * fragment_output + DstFactor * pixel_color;
我还是用图形表达上面这个等式吧:
Unity中的Shader 通过ShaderLab语法表达的混合操作过程为:
Blend SrcFactor DstFactor
其中这2个代号分别可以选择的选项如下表:
选项代号 | 与之等价的代码 |
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) |
并且其中所有向量的分量区间都是[0,1]区间。
2.顺序无关的不透明度
1.加法混合
相关文章推荐
- 解读Unity中的CG编写Shader系列十 (光滑的镜面反射(冯氏着色))
- 解读Unity中的CG编写Shader系列八(多光源漫反射)
- Unity3D插件之NGUI:Lable
- Unity5.0 天空盒(CubeMap)
- Unity3D手游-横版ACT游戏完整源码下载
- Unity3d《Shader篇》漫反射
- Unity使用Shader控制物体材质的透明度(Lambert版和非光照版)
- unity3D游戏开发之雾效、水效和音效
- unity, 设置帧率上限
- Unity C#单例模式
- 解读Unity中的CG编写Shader系列八(镜面反射)
- unity官方文档翻译——Android
- 微软企业库Unity学习笔记(一)
- Unity3D中组件事件函数的执行顺序
- Unity3D内容加密保护
- Unity3D游戏开发之路:一月工作总结
- Unity跨平台原理
- unity3D创建英雄选择栏
- unity学习笔记
- 如何用unity3D编辑英雄技能冷切框