ShaderLab教程系列(一)

文章来自http://www.manew.com/thread-43291-1-1.html 

首先,第一步,我们先看shader有什么作用。我们在场景里面新建一个cube。我们可以看到下图:
 

ShaderLab教程系列(一)_第1张图片 

      在Hierarchy中选中这个新建的cube,我们可以在Inspector面板中看到

ShaderLab教程系列(一)_第2张图片 

 

      我们来做一个小动作,通过photoshop创建一张很傻冒的图,如下:

ShaderLab教程系列(一)_第3张图片 

      然后将该psd文件复制到项目中,并托给当前的cube。我们会看到

ShaderLab教程系列(一)_第4张图片 

      至此,我们已经粗略的看到了shader的作用。那么shader到底是什么,他存在的意义是什么,我们可以用它来做什么。

 

      接下来,我们首先需要的是重温旧知识,温故而知新是任意一个可以正常呼吸正常吃饭的人必须掌握的本领。

 

      我们遇到的第一个问题是何为模型,如这个cube到底是什么,他为什么就是cube,没有多一个角,也没有少一个角。他的信息是怎么存储的。何为模型,模型就是模型,有点废话。那么换个角度看问题,从程序角度看,模型到底是怎么存在的。如cube为啥没显示成sphere。

 

      模型=网格mesh+材质material。(此系列教程是shader,所以,此处不会引入bone相关的信息,后续,有时间,来做动画知识体系的时候,会介绍bone以及T-POSE等概念。)网格mesh中存储的信息为顶点,三角面(3damax等传统软件可以任意凸多边形,游戏引擎中为了计算方便,就都整成了三角面。)如果你见过蒙古包或者类似的帐篷之类的东西,你可以想象下,我们搭建一个帐篷,如果不是买的现成的帐篷的话,我们第一件事情是弄一些竹竿或者木棍之类的搭建出龙骨,然后把那个油布或者类似的东西往上面一包,问题解决。模型其实也是这个概念,mesh就相当于我们竹竿或者木棍搭建的龙骨,他需要存储的信息顶点(即那些竹子木棍的结点)、面(即那些点之间需要包油布)、纹理坐标(每个点对应油布的哪一个位置)、法线(这个有点抽象,即某个点反射光线的方向问题,主要用于视觉作用,对于shader来说,这个是重点)。材质球material就相当于油布,即我们到底有啥样的油布,当然他的信息远不止油布这么简单,更准确的说油布仅仅相当于material中shader的漫反射纹理,也是主纹理。于是,模型的实际构建过程就是先构建出骨架,然后将指定的油布按照指定的方式包到骨架上。

 

      我们的第一个知识点温故结束。接下来,我们需要温故的是GPU的问题。GPU存在的意义通俗点的说就是渲染,讲需要展示的物体形象的表现在显示器上,所以,可以形象的理解为绘图专家,你给他真实的三维场景的信息,他需要计算透视灯光等等各种因素,最后在二维的纸上形象的绘制出三维的场景,让你感觉栩栩如生。所以,通过这些浅显的知识,我们可以知道我们开篇的cube渲染出来需要经过的事情:CPU需要组装好CUBE的三维信息、灯光信息、摄像机信息等,然后将这些信息送交给GPU,GPU然后根据这些信息绘制出一张栩栩如生的图。(此处划分并不严格,只是为了形象说明。)而我们的shader存在的意义,也就是shader的功效就是用来让这个画纸栩栩如生。所以,shader的好坏的衡量标准就是尽量逼真的效果尽量低的性能消耗(万事万物都在干这个事情,希望的美好,现实的残酷,寻找折衷点自我YY的活着。)

 

你可能感兴趣的:(OpenGL)