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 柔和相加(soft Additive) 
Blend DstColor Zero //multiplicative 正片叠底 (Multiply)相乘 
Blend DstColor SrcColor //2x multiplicative 两倍相乘 (2X Multiply) 
Blend Zero SrcAlpha //multiplicative blending for attenuation by the fragment's alpha

所以混合操作的基本语法为

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)

其中float4(1.0)的写法我们前面已经见过,等价于float4(1.0,1.0,1.0,1.0)

并且其中所有向量的分量区间都是[0,1]区间。

Shaderlab blend的更多相关文章

  1. unity shaderlab Blend操作

    原文链接: http://www.tiankengblog.com/?p=84 Blend混合操作是作用于在所有计算之后,是Shader渲染的最后一步,进行Blend操作后就可以显示在屏幕上.shad ...

  2. Unity ShaderLab学习总结

    http://www.jianshu.com/p/7b9498e58659 Unity ShaderLab学习总结 Why Bothers? 为什么已经有ShaderForge这种可视化Shader编 ...

  3. Unity3D ShaderLab压缩混合纹理贴图

    Unity3D ShaderLab压缩混合纹理贴图 纹理可以用于存储大量的数据,我们可以把多个图像打包存储在单一的RGBA纹理上,然后通过着色器代码提取这些元素, 我们就可以使用每个图片的RGBA通道 ...

  4. Unity中的CG编写Shader系列(Blend)

    1.不透明度 当我们要将两个半透的纹理贴图到一个材质球上的时候就遇到混合的问题,由于前面的知识我们已经知道了片段着色器以及后面的环节的主要工作是输出颜色与深度到帧缓存中,所以两个纹理在每个像素上的颜色 ...

  5. Shader 入门笔记(三) ShaderLab 初识

    Unity中,Unity Shader 都是ShaderLab 来编写的.ShaderLab 是Unity提供的编写Unity Shader 的一种说明性语言. 1)Properties :定义了着色 ...

  6. Unity shader学习之Alpha Blend

    通过 ShaderLab 的 AlphaBlend 能够实现真正的半透明效果. 使用 AlphaBlend 时,需要关闭深度写入 ZWrite Off,但得非常小心物体的渲染顺序, RenderQue ...

  7. Unity Shaderlab: Object Outlines 转

    转 https://willweissman.wordpress.com/tutorials/shaders/unity-shaderlab-object-outlines/ Unity Shader ...

  8. ShaderLab

    [ShaderLab] Shader is the root command of a shader file. Each file must define one (and only one) Sh ...

  9. U3D shaderlab 相关指令开关

    Subshader { [Tags] [CommonState] Passdef [Passdef ...] }Tags分为SubShader Tags和Pass Tags,Tags放在SubShad ...

随机推荐

  1. SAP 4代增强

    *20170325 160000 以下之外, 还有:.替代, -用过一次:.BTE -没用过,需要学习: 第二代增强和第三代增强的差别: 1.Tcode 不同:第二代: CMOD 增强管理,SMOD ...

  2. Java for LeetCode 117 Populating Next Right Pointers in Each Node II

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  3. 【Java 语言生态篇】Junit 测试单元

    01 概述   JUnit是一个由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework).Junit测试是白盒测试.JUn ...

  4. nodejs 基础篇整合

    nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了.如果你正好喜欢前端,想走的更高,走的更远.no ...

  5. 使用python转换编码格式

    之前有写过一个使用powershell转换文档格式的方法,然而因为powershell支持不是很全,所以并不好用.这里使用python再做一个. 思路 检测源码格式,如果不是utf8,则进行转换,否则 ...

  6. bzoj5093: [Lydsy1711月赛]图的价值

    不难想到考虑每个点的贡献,ans=n*sigema(1~n)i C(n-1,i)*(2^C(n-1,2))*i^k 直接套第二类斯特林拆柿子即可.提示:sigema(1~n)i C(n,i)*C(i, ...

  7. 数据库,序列化数据为json字符串

    create PROCEDURE [dbo].[usp_SerializeJSON] @ParameterSQL as varchar(max) AS BEGIN declare @SQL nvarc ...

  8. PYTHON 爬虫笔记七:Selenium库基础用法

    知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...

  9. <%!%>声明的变量和在<%%>中声明的变量的区别

    通过写一个demo,查看Jsp_Servlet源码可知: <%!%>声明的变量是类似类的成员变量,<%%>中的变量是方法中的变量. 参考博客: http://www.cnblo ...

  10. unreal network

    frame move buffer: save move position recive server sync:All moves earlier than the ClientAdjustPosi ...