首页 > 代码库 > Unity3D 开发之shader教程(浅谈GPU渲染之shader language概述)
Unity3D 开发之shader教程(浅谈GPU渲染之shader language概述)
尊重他人智慧成果,欢迎转载,请注明作者 心若透明 地址 http://www.cnblogs.com/ubanck/p/4110618.html
在上一篇博客里,大致讲解了一下3D渲染的原理,即从一个简单的模型到渲染到屏幕的过程!其中提到了重要的坐标变换方式,说的不够清楚!今天来谈谈shader语言的执行过程
从硬件上讲,GPU内部有顶点着色器与片段着色器,从渲染管线来看,顶点着色器控制这顶点的坐标转换过程,片段着色器控制像素的颜色计算过程。顶点着色器将顶点转换完成,输入到片段着色器进行处理(片段着色器具有检索纹理信息的能力,对于GPU而言,纹理等价于数组,暂时顶点着色器还不具备)
顶点着色程序从寄存器中提取出图元信息,所谓的图元信息包括(顶点的位置,法向量,纹理坐标),这些信息是来自于应用程序端,如果有DX或者OpenGL编程经验的,应该对这个很了解。获得图元信息之后,顶点着色程序完成 顶点坐标空间转换、法向量空间转换,光照计算等操作过程。
上一篇文章提到顶点坐标一开始是在模型空间坐标系,然后到世界空间坐标系等等,而光照计算也在这个阶段完成,因为光照会牵涉到法向量,所以需要在世界空间坐标系中做处理。完成这些之后,数据传输给了片段着色器,这个时候的数据里面包含的是纹理坐标和光照信息等等,片段着色器拿到之后,进行每个片段的颜色计算,最后将处理后的数据送到光栅化操作模块,所谓的光栅化操作模块执行的操作就是将颜色赋值到对应的像素点,这个操作就叫做光栅化!
那么我们可以这样说,顶点着色程序主要进行几何方面的计算,而片段着是器主要是针对最终的颜色进行计算。笔记:片段是啥?顶点好理解,像素也好理解,那啥是片段呢?片段其实就是光栅化之后的数据集合,这些数据还没经过深度值比较,而像素是经过比较了的。
讲完了GPU的执行过程与基本原理,那就该到正题了,就得说到我们的shader编程了,只要一说到编程,就会提到语言,shader语言现在说起来应该是三种 DX的HLSL(high level shading language),OpenGL的GLSL(OpenGL shading language)还有nvidia的CG(C for Graphics)!!!HLSL和GLSL的本质上是差不多的,而CG语言运行在DX和OpenGL的上层,能被这两者很好的支持,并且因为我本身目前使用Unity3D开发游戏,还有就是CG写起来很方便,所以shader的讲解就会围绕CG来讲!CG的语法我就不详细讲解了,这玩意儿可以参考官方文档,而且你看名字就能感觉到,肯定跟C差不多。相关的函数:http://http.developer.nvidia.com/Cg/index.html。
到这里基础全部铺垫完毕,其中那些变换的细节需要参与的数学公式推导暂时不表,读者只需要知道用公式那么算就好,推导过程可以参见《3D数学基础:图形与游戏开发》一书,里面对这方面进行了比较详细的讲解。
下一篇:会正式讲解unity shader,当然,期间总会牵涉到部分别的知识,我们会一一的扩展到,讲解的,在下才疏学浅,如果有什么说的不对的地方,请各位看官斧正,欢迎惠顾,不胜荣幸!!!
Unity3D 开发之shader教程(浅谈GPU渲染之shader language概述)