高级着色器语言(High Level Shader Language,HLSL)是由
微软开发并拥有的类C高级着色器语言,专用于
Direct3D图形接口平台及XNA框架。该语言自DirectX 9起用于构建可编程3D图形管线,其最初的开发目标是为辅助着色器汇编语言,后成为统一着色器模型必备语言。HLSL支持编写
顶点着色器、
像素着色器及计算着色器,通过与DirectML结合提升图像处理性能,相比低阶Shader Language显著降低编写复杂特效时的编程错误率。该语言与NVIDIA Cg高度相似,是
GLSL的技术先辈,但与
OpenGL标准不兼容。
开发背景介绍
正如通用处理器上的软件开发从汇编语言程序设计逐渐过渡到高级语言程序设计一样,着色程序丌发也在经历着同样的发展过程。低级着色语言虽然能够满足大多数图形应用的需要,允许开发者写出性能优异的着色程序,以最大程度地利用
图形处理器的硬件能力,但是它不可避免的具有下述问题:
1)对底层图形硬件具有强烈的依赖性。虽然DirectX、OpenGL等3DAPI可以通过定义虚拟机抽象底层硬件的体系结构,但是正如我们所看到的,用他们编写着色程序时仍然不得不选择某一个具体版本的低级着色语言来匹配底层的图形硬件。
2)低级着色语言难以学习,开发效率较低。难学习、难使用是汇编语言的通性,而图形处理器的向量体系更加增大了学习和使用的难度。
3)无法直接利用大量现存的Rendemaan shader。
4)不能利用广泛使用的各种优化编译技术,开发者必须手工优化汇编代码。
为此,高级着色语言进入研究者的视野。2001年Pat Hanrahan等在siggraph上提出了一个实时过程着色系统:斯坦福着色系统[Pat2001]。该系统出三部分组成,第一部分是对可编程图形流水线的一个拙象,第二部分是一个类似于Renderman着色语言的高级着色语言,第三部分是一个支持多后端的后端编译器。此后不久,商业化的高级着色语言相继出现,它们是Cg、DirectX HLSL与OpenGL glslang。Cg山nVidia公司和微软公司联合丌发而成,是一种增加了向量与矩阵处理能力的类c语苦。Cg的设计目标是成为一种通用的面向硬件的语言。它既可以用来开发用于渲染的着色程序,也可以用来开发在图形处理器上运行的科学计算程序。cg是~个跨平台的高级着色语言,通过定义不同的配置(profile),cg编译器可以为不同的低级着色语言后端生成代码,既支持DirectX所有版本的低级黄色语言,也支持OpenGL所有版本的低级着色语言.同时还支持nVidia专有的所有版本的低级着色语言。DirectX HLSL类似于cg,但是它的后端仅支持DirectX各个版本的低级着色语言。
Glslang是OpenGL Shading Language的简称,它是OpenGL 2.0规范的一部分,是OpenGL平台上的高级着色语言。Glslang在OpenOL管理委员会的监督下,由3D Labs公司制定规范和提供参考实现。它的设计目标是能够体现当前和未来图形硬件能力,易于使用,功能强大,可以明显减少日渐增加的OpenGL扩展数目。
研究意义与现实意义
1)使用高级着色语言是实现商质量实时渲染应用的必然选择。要充分利用图形硬件的可编程能力,摆脱低级着色语言对具体图形硬件的依赖性,提高工作效率,降低开发成本,利用已经存在的大量优秀Renderman shader,以实现电影质量实时图形渲染,就必然要使用高级着色语言。
2)现代图形处理器的硬件能力越来越强,正在由专用图形处理器向着通用流处理器的方向发展。在图形处理器上进行通用计算具有很好的应用前景,并且当前已经取得令人满意的成绩。例如斯坦福大学的Brook项目[Buck031]。高级着色语苦的功能也会相应的发展,添加越来越多的高级语言特性。这点从各种高级着色语言保留的关键字就可以看出来。
3)‘t'i-能对于实时图形渲染具有举足轻重的意义。开发者只有在确信HLSL编译器产生的代码在性能上可以和手写LLSL代码相比时才会选择使用HLSL。因此,必须对HLSL的优化编译进行深入研究。
范例