标签:
最近在学习Shader,将学习的一些心得和案例以及基础知识罗列了一下。这一篇是unity之Shader的基础篇之基础,更多的是一些概念。该篇将分以下几个部分:Vertex Program:从GPU中提取图元信息(顶点位置、法向量、纹理坐标等)完成顶点坐标空间转换,法线向量空间转换光照计算等操作。
Fragment Program:将Vertex Program的输出作为输入对每个片段的颜色进行计算,最后将处理后的数据送光栅操作模块进行光栅化。
什么是片段,它和像素有什么不一样?:片段其实就是所有的三维顶点在光栅化之后得到的数据集合,这些数据没有经过深度值的比较,而在屏幕上显示的像素都是经过深度值比较的。
2.3.3、Cg表达式与控制语句:关系操作符、逻辑操作符、数学操作符、位移操作符以及Swizzle操作符:
float4(a, b, c, d).xyz 等价于 float3(a, b, c)
float4(a, b, c, d).xyy 等价于 float3(a, b, b)
float4(a, b, c, d).wzyx 等价于 float4(d, c, b, a)
float4(a, b, c, d).w 等价于 float d
中float a 和float1 a是基本等价的,两者可以进行类
型转换;float、bool、half等基本类型声明的变量也可以使用swizzle操作符。例
如:
float a = 1.0;
float4 b = a.xxxx;
2.3.4、Cg语言的其他一些特性
齐次坐标的本质是什么?
1、两条平行线是否可以相交一点?
在欧氏几何空间,同一平面的两条平行线不能相交,这是我们都熟悉的一种场景。
然而,在透视空间里面,两条平行线可以相交,例如:火车轨道随着我们的视线越来越窄,最后两条平行线在无穷远处交于一点。
2、为什么叫齐次坐标?
简而言之,齐次坐标就是用N+1维来代表N维坐标
3、齐次坐标的本质是什么?
我们可以在一个2D笛卡尔坐标末尾加上一个额外的变量w来形成2D齐次坐标,因此,一个点(X,Y)在齐次坐标里面变成了(x,y,w),并且有
X = x/w
Y = y/w
例如,笛卡尔坐标系下(1,2)的齐次坐标可以表示为(1,2,1),如果点(1,2)移动到无限远处,在笛卡尔坐标下它变为(∞,∞),然后它的齐次坐标表示为(1,2,0),因为(1/0, 2/0) = (∞,∞),我们可以不用”∞"来表示一个无穷远处的点了
证明两条直线可以相交:
3、Unity中如何使用Cg编写Shader
3.1、Shader程序的基本结构:首先是一些属性定义,用来指定这段代码将有哪些输入。接下来是一个或者多个的子着色器,在实际运行中,哪一个子着色器被使用是由运行的平台所决定的。子着色器是代码的主体,每一个子着色器中包含一个或者多个的Pass。在计算着色时,平台先选择最优先可以使用的着色器,然后依次运行其中的Pass,然后得到输出的结果。最后指定一个回滚,用来处理所有Subshader都不能运行的情况(比如目标设备实在太老,所有Subshader中都有其不支持的特性)。
3.2,Shader的程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
Shader "Cg
basic shader"
{ //
定义Shader的名字 SubShader{ //
Unity会选择最适合GPU的subshader块 Pass{ //
一个shader会有多个Pass块 CGPROGRAM //
开始Unity的shader #pragma
vertex vert //定义一个顶点程序,名为vert #pragma
fragment frag//定义一个片段程序,名为frag float4
vert(float4 vertexPos : POSITION) : SV_POSITION { return mul(UNITY_MATRIX_MVP,
vertexPos); //这行代码的作用是使用Unity内置的矩阵UNITY_MATRIX_MVP将顶点输入参数vertexPos进行转换,并将转换后的值作为返回顶点程序的输出参数,片段程序的输入参数 } float4
frag( void )
: COLOR //
f片段程序 { return float4(1.0,
0.0, 0.0, 1.0);) //该片段程序返回一个片段输出参加(也即语义COLOR),该代码的意思是设置一个不透明的红色((red
= 1, green = 0, blue = 0, alpha = 1)) } ENDCG //
here ends the part in Cg } } }
|
标签:
原文地址:http://blog.csdn.net/zhangxiao13627093203/article/details/51940436