Unity Shader学习1——简述

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://linsh-tech.blog.csdn.net/article/details/51364604

一、什么是Shader:

        Shader,就是着色器,是一种运行在GPU上的程序。GPU——Programmable Graphics Processing Unit,即可编程图形处理单元,也成为可编程图形硬件,至于GPU上的编程,实质上就是GPU允许应用程序指定一个序列的指令进行顶点操作控制。Shader的作用是:

        对三维物体进行着色处理、光与影的计算、纹理颜色的呈现等,从而将游戏引擎中一个个作为抽象的几何数据存在的模型、场景和特效,以和真实世界类似的光与影的形式呈现与玩家的眼中。(简单点的理解就是:利用GPU编程使得构件出来的对象近似于真实世界中的对象呈现出来的处理)通过Shader可以改变物体的形状、大小、位置以及旋转等


二、Shader发展和架构:

1.发展简史:

        学过OpenGL的人应该知道,OpenGL的发展历程就是从固定管线的渲染发展到可编程管线的渲染。其实,Shader也是相似的,最初的Shader编程采用的也是固定管线,如今也发展为可编程流水线。

        微软图形软件库DirectX,定义了一系列的SM,即Shader Model(Shader模型),用于描述Shader的特性和能力,而且与DirectX的版本具有对应关系如下:

        SM 1.0 ——》DirectX 8.0,SM 2.0 ——》DirectX 9.0,

        SM 3.0 ——》DirectX 9.0c,SM 4.0 ——》DirectX 10.0,

        SM 5.0 ——》DirectX 11.0

        说到DirectX我们自然而然地想起与之比肩的另外一个图形软件库标准OpenGL,它对于SM的也具有版本对应关系:

        SM 4.0 ——》OpenGL 3.3,SM 5.0 ——》OpenGL 4.3


2.内容架构:

        Shader分为两种基础类型:顶点Shader片段Shader,它们的特点分别是:

顶点Shader:具有可以处理、变换,最终会渲染到屏幕上的网格物体的顶点位置的功能,但它不能生成新的顶点;

片段Shader:会对一个片段(预备像素)进行各种测试,如Z深度测试、Alpha比较测试,能通过各种测试的片段,最终会被写入渲染的输出帧中,从而成为屏幕上的一个可见像素。


3.Shader的实例化:

        从上文我们已经知道了Shader是GPU中的一种编程程序,那么与CPU中运行的普通编程语言(C语言、C++等)中的类相似,GPU中的Shader也相当于一个类,能够进行实例化,生成对象,然后可以对此对象进行各种属性的设置,例如设置贴图和颜色。


4.Shader的实现语言:

        GPU与CPU是截然不同的,这不仅仅再其硬件结构的差异上,这也就决定了在两者运行环境下的编程过程也是不同的。目前面向GPU的编程,有3种高级图像语言,分别是:

        a.微软的HLST(High Level Shading Language),是通过Direct3D图形软件库来写Shader程序的语言;

        b.OpenGL提供的GLSL(OpenGL Shading Language)来写Shader程序;

        c.NVIDIA提供的Cg(C for graphics)语言(以HLST为基础,很相似),兼容Direct3D和OpenGL图形接口


        考虑到最大化的跨平台支持,选择使用兼容性最高的Cg作为编写Shader的语言,但假如只针对Unity 3D引擎,也可以选择GLSL。

展开阅读全文

没有更多推荐了,返回首页