Shader是描述虚拟对象表面材质应该如何进行着色的一段叙述,在Dev中,shader的着色完全交由GPU(Graphic Processor Unit)进行,并针对每一个
Vertex或是
Pixel做计算,因此,Shader可以再区分为
顶点着色器(Vertex Shader) 与
像素着色器(Pixel Shader)。要特别注意的是,目前市场上所贩卖的显示卡,并非都有处理Shader的能力,即使有部分显示卡可以处理Shader,也要注意是不是支持最新版本的Shader,而Pixel Shader的最新版本也是3.0。
Shader 所使用的语言在一开始,是使用汇编语言,并且成功运用在
Xbox与
DirectX8上,但是,毕竟使用低阶的
机器语言对于处理复杂的3D图学算法并不是一件容易的事,因此
NVIDIA与Microsoft分别发展出类似C语言的语法,NVIDIA最早发展出CG,而Microsoft一直到 DirectX 9的版本才将这部分整合进---HLSL(High Level Shading Language),虽然HLSL在DirectX 8的时候就已经存在了,不过那时还只是支持汇编语言的语法。
截至目前为止,Virtools Dev支持的版本为3.0版,必须将Virtools Dev更新至 3.0.0.80,并安装DirectX 9.0C 的版本才可能执行,说可能是因为还牵涉到使用者的显卡。
Shader包含3个部分,分别叙述如下:
1. States(状态值):这部分描述着色固定流程(Fixed-Pipeline)所用到的相关变量,如材质颜色(Material Color)、材质的
贴图(Material Texture)、混色方式(blending option)、预设的
3D转换方式(Predefined 3D transformations)与 2D贴图坐标值转换(2D Texture coordinate transformation),或是称为 TexGen,可使用在环境反射贴图(environment mapping)上…等。
State可以说是描述材质最基本、直接的方式,state只针对每一个材质或是物体作用,而且仅止于一次,并不会对每一个顶点(
vertex)或是像素(
pixel)有执行的动作。
对于程序设计师而言,必须充分了解什么是「State」,才可以完全掌握Shader的制作。
2.
顶点着色器指令(Vertex Shader Instructions)
顶点着色器指令定义如何运算、操作每一个已经着色完成的面所包含的顶点数据,在运算、操作过程中,GPU将只使用 State 所定义的顶点属性(如顶点颜色、顶点法向量或是
贴图轴坐标…等)做计算。
3.
像素着色器指令(Pixel Shader Instructions)
像素着色器指令定义如何运算、操作每一个已经着色完成的面所包含的像素数据,在运算、操作过程中,GPU将只使用「着色状态值」(Render State)所定义的像素属性(如像素颜色、像素混色或是Z值…等)做计算。
因为Virtools支持HLSL,所以之后谈的都会以HLSL为主,像是Cg / Cgfx / OLGL ...等可能会着墨较少啰
Shader Model(在3D图形领域常被简称SM)就是“优化渲染引擎模式”。事实上,Shader(渲染或称着色)是一段能够针对3D对象进行操作、并被GPU所执行的程序。通过这些程序,程序员就能够获得绝大部分想要的3D图形效果。在一个3D场景中,一般包含多个Shader。这些Shader中有的负责对3D对象表面进行处理,有的负责对3D对象的纹理进行处理。