什么是Shader

Shader其实就是专门用来渲染图形的一种技术,通过shader,我们可以自定义显卡渲染画面的算法,使画面达到我们想要的效果。小到每一个像素点,大到整个屏幕

Shader分为两类 :

  1. 顶点Shader(3D图形都是由一个个三角面片组成的,顶点Shader就是计算每个三角面片上的顶点,并为最终像素渲染做准备)。
  2. 像素Shader,顾名思义,就是以像素为单位,计算光照、颜色的一系列算法。几个不同的图形API都有各自的Shader语言,在DirectX中,顶点shader叫做 Vertex Shader ,像素Shader叫做 Pixel Shader;在OpenGL中,顶点Shader也叫做 Vertex Shader ,但像素Shader叫做 Fragment Shader,也就是我们常说的片断Shader或者片元Shader。

Shader编程语言

既然Shader是一段代码,那必然要用一种语言来书写它,目前主流的有三种语言:

  1. 基于OpenGL的OpenGL Shading Language,简称GLSL。
  2. 基于DirectX的High Level Shading Language,简称HLSL。
  3. 还有NVIDIA公司的C for Graphic,简称Cg语言。

GLSL与HLSL分别是基于OpenGL和Direct3D的接口,两者不能混用。而Cg语言是用于图形的C语言,这其实说明了当时设计人员的一个初衷,就是让基于图形硬件的编程变得和C语言编程一样方便,自由。正如C++和 Java的语法是基于C的,Cg语言本身也是基于C语言的。如果您使用过C、C++、Java其中任意一个,那么Cg的语法也是比较容易掌握的。Cg语言极力保留了C语言的大部分语义,力图让开发人员从硬件细节中解脱出来,Cg同时拥有高级语言的好处,如代码的易重用性,可读性高等。

Cg语言是Microsoft和NVIDIA相互协作在标准硬件光照语言的语法和语义上达成了一致,所以,HLSL和Cg其实是同一种语言。

美术人员看到这里时也不用害怕,语法上并不难,而且在后续的章节中碰到相关的语法时我们会详细的进行说明。

什么是Unity Shader

显卡有NVIDIAATIIntel等等。。。

图形API有OpenGL、DirectX、OpenglES、Vulkan、Metal等等。。。

Shader编程语言有GLSL、HLSL、Cg等等。。。

Unity中有3种Shader(其实就是三种不同的写法):

  • Surface Shaders 表面着色器
  • Vertex/Fragment Shaders 顶点/片断着色器
  • Fixed Function Shaders 固定管线着色器