结合着看书,也搜索了一些关于FLSL的资料,关于Shader Language的理解还是感觉模模糊糊的。所以今天总计一下不同的总结方式,也好理解一下这门语言到底是用来做什么的。
1、Shader Language原理:
Shader Language,称之为着色语言,我们经常见到的就是OpenGL的GLSL和Dx的HLSL,还有NVIDIA的Cg语言。Shader language编写的程序称之为shader program。着色程序分为两类:vertex shader program顶点着色程序和fragment shader program片段着色程序。
首先阐述一下GPU上两个组件:Programmable Vertex Processor可编程定点处理器,又称顶点着色器和Programmable Fragment Processor 可编程片段处理器,又称片段着色器。定点和片段处理器被分离成可编程单元,可编程定点处理器是一个硬件单元,可以云顶点程序,而可编程片段处理器则是一个可以运行片段程序的单元。这两个处理器都拥有非常强大的并行计算能力,并且非常擅长于矩阵(不高于4阶)计算,片段处理器还可以告诉查询纹理信息。
上图GPU渲染管线,可以看出定点着色器控制定点坐标转换过程;片段着色器控制像素颜色计算过程。这样就区分出定点着色程序和片段着色程序的各自分工:Vertex program负责定点坐标变换;Fragment program负责像素颜色计算;前者的输出是后者的输入。
这样我们就能够理解Shader Language主要是用来做什么的了,下一个定义很困难,但是我们至少明白这个语言就是用来做特效用的以及纹理和顶点之间的着色方式的变幻使用。上一次总结的几次转换过程在这里得一一对应起来。如果深入研究的话,真的是一个大坑,这应该是研究生课题了吧,本科生的我,唉!学无止尽,学无止尽!