Cg语言学习笔记(1)

最近在学习Unity3d Shader编程,Unity3d Shader使用的是Cg语言,网上找了一下Cg的教程,发现《Cg教程-可编程实时图形权威指南》不错,在学习此书的过程中记录一下笔记。博主菜鸟一枚,个人能力有限,有什么说的不对的地方,还请提出。

1.什么是Cg语言

  • Cg是NVIDIA和微软共同开发的为可编程图形硬件设计的语言。它与OPENGL API和微软 DirectX的HLSL都兼容。CG程序是在计算机的图形处理器(GPU)上执行的。
  • Cg是一个可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。 Cg语言和OpenGL、DirectX并不是同一层次的语言,而是OpenGL和DirectX的上层,即,Cg程序是运行在OpenGL和 DirectX标准顶点和像素着色的基础上的。

2.顶点,片段,图形流水线

图形硬件渲染流水线:

Cg语言学习笔记(1)_第1张图片

  • 顶点变换
    在每个顶点上执行一系列的数学操作:把顶点位置变换到屏幕位置以便光栅器使用,为贴图产生纹理坐标,以及照亮顶点以决定它的颜色。
  • 图元装配和光栅化
    根据伴随顶点序列的几何图元分类信息把顶点装配成几何图元。
    图元通过剪裁(到可视平截体)、挑选(丢弃一些多边形)。
    光栅化(光栅化会把每个几何图元所覆盖的像素分解成像素大小的片段),结果是像素位置的集合和片段的集合(一个片段有一个与之相关联的像素位置、深度值和经过插值的参数)。
  • 插值,贴图和着色
    在片段属性需要的时候插值,执行一系列的贴图和数学操作,为每一个片段确定一个最终的颜色。
  • 光栅操作
    每个片段可由许多测试来测试(包括剪切,alpha,模版,深度测试…),没通过测试则丢弃该片段,否则就更新该像素颜色值,通过了深度测试就用片段的深度值代替像素的深度值,最后用混合把片段的最后颜色和对应的像素颜色结合在一起,帧缓存写操作用混合颜色代替像素颜色。

3.可编程图形流水线

Cg语言学习笔记(1)_第2张图片

可以看出,顶点着色器控制顶点坐标转换过程;片段着色器控制像素颜色计算过程。这样就区分出顶点着色程序和片段着色程序的各自分工:
Vertex program负责顶点坐标变换;
Fragment program负责像素颜色计算;前者的输出是后者的输入。

3.1可编程顶点处理器

Cg语言学习笔记(1)_第3张图片

3.2可编程片段处理器

Cg语言学习笔记(1)_第4张图片

  • 从图片可以看出,顶点着色器控制顶点坐标转换过程;片段着色器控制像素颜色计算过程
  • 顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。
  • 顶点着色程序与片断着色程序通常是同时存在,相互配合,前者的输出作为后者的输入。不过,也可以只有顶点着色程序。如果只有顶点着色程序,那么只对输入的顶点进行操作,而顶点内部的点则按照硬件默认的方式自动插值。
  • 片断着色程序是对每个片断进行独立的颜色计算,并且算法由自己编写,不但可控性好,而且可以达到更好的效果。最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。
  • 所谓片断就是所有的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素都是经过深度比较的。

总结:本节中了解了什么是cg语言,图形渲染流程,顶点处理器,片段处理器。下一节开始将详细介绍Cg语言。

你可能感兴趣的:(Cg语言)