计算机图形学笔记---shader language

时间:2021-04-11 16:29:12

用shader language写的程序叫着色程序,着色程序又分为顶点着色程序(vertex shader program)和片段着色程序(fragment shader program ) 前者负责顶点坐标转换(几何方面的运算),后者负责像素颜色计算;前者的输出是后者的输入;二者同时存在,相互配合
也可以只有顶点着色程序,这样的话就用硬件默认的方式进行自动插值;
如果图形硬件使用Gourand明暗处理算法,就会出现马赫带效应(条带化)【即是指人们在明暗交界处感到亮处更亮,暗处更暗的现象。它是一种主观的边缘对比效应】
而片段着色程序是对每个片段进行独立的颜色计算,算法自己编写
这就不得不说GPU上的两个组件——
Programmable Vertex Processor(可编程顶点处理器,又叫顶点着色器)
Programmable Fragment Processor(可编程片段处理器,又叫片段着色器)
这两个处理器都有并行计算的能力,擅长不高于4阶的矩阵计算,片段处理器还可以查询纹理信息
计算机图形学笔记---shader language

寄存器的数据存放如下图所示:
计算机图形学笔记---shader language
对GPU而言,纹理等价为数组===做通用计算如数组排序、字符串检索等必须用到片段着色程序
注意:片段与像素的区别——片段是所有的三维顶点在光栅化后是数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素是经过深度值比较的。

Shader language目前有3种主流语言:基于OpenGL的GLSL(OpenGL Shading Language,也称为GLslang),基于Direct3D的HLSL(High Level Shading Language),还有NVIDIA公司的Cg (C for Graphic)语言。
GLSL与HLSL分别提基于OpenGL和Direct3D的接口,两者不能混用,事实上OpenGL和Direct3D一直都是冤家对头,
使用Cg语言进行研发,基于如下理由:
Cg是一个可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。Cg程序是运行在OpenGL和 DirectX标准顶点和像素着色的基础上的;Cg语言是Microsoft和NVIDIA相互协作在标准硬件光照语言的语法和语义上达成了一致。
Cg语言极力保留了C语言的大部分语义,力图让开发人员从硬件细节中解脱出来,Cg同时拥有高级语言的好处,如代码的易重用性,可读性提高等。
使用cg还可以实现动画驱动、通用计算(排序、查找)等功能。
下一篇博客我们会详细介绍神奇的Cg语言(这也是在游戏shader编写中常用的语言哦)