着色器

着色器

整理来至《GPU编程与CG语言之阳春白雪下里巴人》


Shader Language

HLSL的全称是“High Level Shading Language”(Direct3D)
Cg语言的全称为“C for Graphic”(NVIDIA)
GLSL的全称是:OpenGL Shading Language(OpenGL)

Shader 包含顶点着色器和片断着色器:

顶点着色器:负责顶点坐标变换;
片断着色器:负责像素颜色计算;

顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。


基本数据类型:

Cg支持7种基本的数据类型:
float,32位浮点数据,一个符号位。浮点数据类型被所有的profile支持(但是DirectX8 pixel profiles在一些操作中降低了浮点数的精度和范围);
half,16为浮点数据;
int,32位整形数据,有些profile会将int类型作为float类型使用;
fixed,12位定点数,被所有的fragment profiles所支持;
bool,布尔数据,通常用于if和条件操作符(?:),布尔数据类型被所有的profiles支持;
sampler*,纹理对象的句柄(the handle to a texture object),分为6类:sampler, sampler1D, sampler2D, sampler3D, samplerCUBE,和samplerRECT。DirectX profiles不支持samplerRECT类型,除此之外这些类型被所有的pixel profiles和 NV40 vertex program profile所支持(CgUsersManual 30页)。由此可见,在不远的未来,顶点程序也将广泛支持纹理操作;
string,字符类型,该类型不被当前存在的profile所支持,实际上也没有必要在Cg程序中用到字符类型,但是你可以通过Cg runtime API声明该类型变量,并赋值;因此,该类型变量可以保存Cg文件的信息。 

绑定类型:

Cg支持的绑定语义类型包括POSTION位置),COLOR(颜色),NORMAL(法向量),Texcoord(纹理坐标)等类型。


数学函数:







几何函数:


纹理查询函数:



光源:

环境光(Ambient Light):
从物体表面所产生的反射光的统一照明,称为环境光或背景光(计算机图形学第二版389页)。没有空间或方向性;在
所有方向上和所有物体表面上投射的环境光强度是统一的恒定值。

点光源:
是发光体的最简单的模型,光线由光源出发向四周发散。

平行光:
即光线都从同一个方向照射。通过模拟方向光和物体表面的交互模式,可以渲染出具有高真实感(明暗变化、镜面反射等)的三维场景。

缓冲区:

z buffer(深度缓冲区):

又称为depth buffer,即深度缓冲区,其中存放的是视点到每个像素所对应的空间点的距离衡量,称之为Z值或者深度值。可见物体的Z值范围位于【0,1】区间,默认情况下,最接近眼睛的顶点(近裁减面上)其Z值为0.0,离眼睛最远的顶点(远裁减面上)其Z值为1.0。使用z buffer可以用来判断空间点的遮挡关系,著名的深度缓冲区算法(depth-buffer method,又称Z缓冲区算法)就是对投影平面上每个像素所对应的Z值进行比较的。

stencil buffer(模板缓冲区):

它是一个额外的buffer,通常附加到z buffer中,例如:15位的z buffer加上1位的stencil buffer(总共2个字节);或者24位的z buffer加上8位的stencil buffer(总共4个字节)。每个像素对应一个stencil buffer(其实就是对应一个Z buffer)。Z buffer和stencil buffer通常在显存中共享同一片区域。Stencil buffer对大部分人而言应该比较陌生,这是一个用来“做记号”的buffer,例如:在一个像素的stencil buffer中存放1,表示该像素对应的空间点处于阴影体(shadow volume)中。

frame buffer(帧缓冲区):

用于存放显示输出的数据,这个buffer中的数据一般是像素颜色值。Frame buffer有时也被认为是color buffer(颜色缓冲器)和z buffer的组合(《实时计算机图形学(第二版)》12页)。那么frame buffer位于什么地方呢?在webMediaBrands网站上摘录了一段英文说明,即frame buffer通常都在显卡上,但是有时显卡会集成到主板上,所以这种情况下frame buffer被放在内存区域(general main memory)。

color buffer(颜色缓冲区):


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值