shader学习之基础纹理透明效果
2017-11-05 21:38
330 查看
Shader学习之透明效果
Cg语言Cg语言(C for Graphics)是为GPU编程设计的高级着色器语言,由NVIDIA公司开发
目前已没有积极开发与支持,更推荐使用GLSL或HLSL Windows
Cg的设计考虑了GPU的体系结构,如可编程多处理单元(顶点处理器、像素处理器、外加不可编程单元)。Cg语言允许分别为顶点和像素写程序。
Cg语言有6种数据类型:
float:32位浮点数
half:16位浮点数
int:32位整数
fixed:12位定点数
bool:布尔值
sampler*-代表纹理对象(texture object)
透明度测试
概念:只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物理的处理方式来处理它。
核心函数:clip函数
clip是Cg的一个函数
void clip(floatn x)
参数:裁剪时使用的标量或矢量条件
描述:如果给定参数的任何一个分量是负数,就会舍弃当前像素的输出颜色。
ShaderLab属性类型
Color,Vector,Range,Float,2D,Cube,3D
Unity中一些常用的包含文件
UnityCG.cginc:包含了最常使用的帮助函数、宏和结构体等
UnityShaderVariables.cginc:在编译Unity Shader时,会自动包含进来。包含了很多内置的全局变量,如UNITY_MATRIX_MVP
Lighting.cginc:包含了各种内置的光照模型,如果编写的是Surface Shader的话,会自动包含进来;
HLSLSuport.cginc:在编译Unity Shader时,会被自动包含进来。声明了很多用于跨平台编译的宏和定义
Texture的本质应该就是一张图片,后缀可以使jpg,png,psd等,psd格式的文件中可能包含更多的信息?
GPU的渲染流水线
GPU的渲染流水线就是指GPU渲染的过程
总的分为两个阶段
几何阶段
光栅化阶段
几何阶段的输出信息是屏幕坐标系下的顶点位置以及和它们相关的额外信息,如深度值、法线方向、视角方向等
光栅化阶段有两个重要的目标:
计算每个图元覆盖了哪些像素
为这些像素计算它们的颜色
GPU的渲染流水线接收顶点数据作为输入,这些数据随后被传递给顶点着色器。
顶点着色器介绍
顶点着色器的处理单位是顶点,也就是说,输入进来的每个顶点都会调用一次顶点着色器。
GPU利用本身的特性并行处理每一个顶点,这意味着这一阶段的处理速度会很快
主要工作:
坐标变换
顶点着色器必须完成的一个工作是:把顶点坐标从模型空间转换到齐次裁剪空间(齐次是指空间坐标最大为1?),类似代码如下:
o.pos=mul(UNITY_MVP,v.position)
顶点着色器可以在这一步中改变顶点的位置,这在顶点动画中是非常有用的。例如,我们可以通过改变顶点位置来模拟水面、布料等。
逐顶点光照
裁剪
这个阶段是可配置的,但是不可编程
将那些不在摄像机视野内的顶点裁减掉,并剔除某些三角图元的面片
屏幕映射
这个阶段不可配置,不可编程
负责把个图元的坐标转换到屏幕坐标系中
三角形设置
不可配置,不可编程
这个阶段会计算光栅化一个三角网格所需的信息。
上一阶段输出的都是三角网格的顶点,即我们得到的是三角网格每条边的两个端点。但如果要得到整个三角网格对像素的覆盖情况,就必须计算每条边上的像素坐标。为了能够计算边界像素的坐标信息,我们就需要得到三角形边界的表示方式。这样一个计算三角网格表示数据的过程叫做三角形设置
三角形遍历
不可配置,不可编程
三角形遍历阶段将会检查每个像素是否被一个三角网格所覆盖。如果被覆盖,就会生成一个片元。
找到那些像素被三角网格覆盖的过程就是三角形遍历。
也称为扫描转换
输出是一个片元序列
注意:
一个片元并不是一个真正意义上的像素,而是包含了很多状态的集合,这些状态用于计算每个像素的最终颜色。
片元着色器
DirectX中也称为像素着色器
相关文章推荐
- 《Unity Shader入门精要》笔记(三) 基础纹理及透明效果
- shader学习基础之十二矩阵的左乘还是右乘所导致的效果问题
- UnityShader入门精要学习笔记(十):透明效果-上部分
- shader学习基础之十一实现纹理的缩放平移和旋转,以及用c#代码合并两种贴图并且控制位置
- Unity Shader入门精要学习笔记 - 第8章 透明效果
- UnityShader入门精要学习笔记(十一):透明效果-下部分
- Unity Shader入门精要学习笔记 - 第8章 透明效果
- <Shader>透明效果+纹理融合 vertex和fragment
- shader学习基础之十四,毛玻璃效果解析
- Unity Shader 学习笔记(28) 噪声纹理、消融效果、水波效果、噪声雾效
- Shader 透明效果+纹理融合Code
- shader学习基础之十三,根据透明阴影图扭曲图片(褶皱)
- UnityShader入门精要学习笔记(九):基础纹理之渐变纹理与遮罩纹理
- salesforce 零基础学习(二十七)VF页面等待(loading)效果制作
- Unity Shader 学习笔记(十一) 混合纹理Shader实例
- css基础学习-效果网站收集
- shader学习基础之五(详解uv坐标,c#类似uv坐标的值以及贴图操作)
- Unity shader学习之屏幕后期处理效果之边缘检测
- Unity3D - Shader - 双面渲染的透明效果
- Shader学习笔记(六)_Time的使用,会动的纹理