Shader(译为渲染或着色)是一段能够针对3D对象进行操作、并被GPU所执行的程序,ShaderModel的含义就是“优化渲染引擎模式”,我们可以把它理解成是GPU的渲染指令集。历代DirectX每逢重大版本升级时最主要的更新内容就包括在了ShaderModel之中:
ShaderModel 1.0 → DirectX 8.0
ShaderModel 2.0 → DirectX 9.0b
ShaderModel 3.0 → DirectX 9.0c
ShaderModel 4.0 → DirectX 10
ShaderModel 4.1 → DirectX 10.1
ShaderModel 5.0 → DirectX 11
高版本的ShaderModel是一个包括了所有低版本特性的超集,对一些指令集加以扩充改进的同时,还加入了一些新的技术,现在我们就来看看DX11 SM5.0都有哪些新特性:
由于统一渲染架构的特性,Shader Moder 5.0是完全针对流处理器而设定的,所有类型的着色器,如:像素、顶点、几何、计算、Hull和Domaim(位于Tessellator前后)都将从新指令集中获益。
特性1:覆盖采样
功能:直接为像素着色器输出覆盖采样信息。
效果:边缘侦测更加精确,抗锯齿运算效率和效果更佳。
特性2: Gather 函数加速纹理拾取
功能:在一个纹理指令里读取4点采样值,可针对特定颜色分别采样,自动识别能做阴影映射的值。
效果:更快,更好的阴影过滤实现环境光遮蔽(SSAO)。
特性3:粗糙偏导数
功能:用数学函数定义简单的二维纹理图案,如方格地毯或用数学函数定义随机高度场,生成表面粗糙纹理及几何纹理。
效果:高性能,高画质纹理过滤。
特性4:类型转化类指令
功能:将数据值在32bit浮点,和16bit浮点直接相互转换。
效果:简单高效译码双精度支持。
特性4:位操作类指令
功能:转位、排序、封包、压缩、解压。
效果:数据压缩解压缩速度提升,传输率提高。
其中,覆盖采样及Gather4纹理拾取两项指令是从在DX10.1基础上发展而来的,SM5.0要比SM4.1更加智能和灵活,它可以针对特定颜色分别采样、还能自动识别可做阴影映射的值,精度和效率都进一步提高。
由于DX10.1与DX10在指令方面的相似性,现有的DX10.1游戏可以很容易的通过更新程序代码升级支持DX11,从而获得更好的运行效率,比如《风起云涌》、《潜行者》、《科林麦克雷》将会率先引入DX11。
shader model是DriectX中集成的一个指令集,其主要作用就是优化渲染过程,DriectX11中包含了最新的shader model5.0。
shader model的作用对于游戏玩家来说并不明显,但对程序开发人员却十分重要,比如为游戏中的物理设置一种材质,或采用不同的光源都需要调用shader model指令集。
最新的shader model 5.0比上一版本有了很大改进,不仅简化了编程过程,也同时减少了程序的复杂程度,从而降低程序中BUG的出现几率。
举个简单的例子,以往程序员如果要创建金属和塑料两种材质,并使用点光源和面光源,需要输入如下代码:
renderPlasticSpot()... / /渲染塑料使用点光源
renderPlasticOmni()... / /渲染塑料使用面光源
renderMetalSpot()... / /渲染金属使用点光源
renderMetalOmni()... / /渲染金属使用面光源
而借助新的shader model 5.0指令集可以讲上面的程序缩减为
Light myLight; Material myMaterial; Render() myMaterial.render (); myLight.shade ();
可以看到shader model 5.0通过简化过程,将有效提升游戏运行效率。