Unity Shader基础-基本概念

Unity Shader基础-基本概念


1 渲染管线


  • 渲染阶段:应用阶段 – 几何阶段 – 光栅化阶段, 应用阶段输出渲染图元至几何阶段,几何阶段输出屏幕空间顶点信息至光栅化阶段。

  • 几何阶段:顶点着色器 – 曲面细分着色器 – 几何着色器 – 裁剪 – 屏幕映射。 顶点着色器(Vertex Shader)是可编程的,用于顶点空间变换、顶点着色等功能;曲面细分着色器(Tessellation Shader)是可选着色器,用于细分图元;几何着色器(Geometry Shader)是可选着色器,用于执行逐图元的着色操作。

  • 光栅化阶段:三角形设置 – 三角形遍历 – 片元着色器 – 逐图元操作。片元着色器(Fragment Shader)(DirectX中称为像素着色器(Pixel Shader)进行纹理采样等操作。

详见:游戏开发之从零开始了解渲染管线


2 着色器与材质


  • 着色器(Shader):实际上就是一小段程序,它负责将输入的网格(Mesh)以指定的方式和输入的贴图或者颜色等组合后输出,绘图单元再依据该输出将图像绘至屏幕。

  • 材质(Material):着色器加上对应输入的贴图或颜色等内容,以及着色器的特定参数设置,这些内容打包存储在一起得到一个材质,将材质赋予合适的渲染器(Renderer)即可渲染输出。


3 Shader主流编程语言


Shader Language目前主要有3种语言:

  • 基于OpenGL的OpenGL Shading Language,简称GLSL;

  • 基于DirectX的High Level Shading Language,简称HLSL;

  • 还有NVIDIA公司的C for Graphic,简称Cg语言。

GLSL与HLSL分别基于OpenGL和Direct3D的接口,两者不能混用。Cg是一个可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。Cg语言和OpenGL、Direct3D并不是同一层次的语言,而是OpenGL和DirectX的上层,即Cg程序是运行在OpenGL和DirectX标准顶点和像素着色的基础上的。Cg由NVIDIA公司和微软公司相互协作在标准硬件光照语言的语法和语义上达成了一致开发。所以,HLSL和Cg其实是同一种语言。

Unity官方主要是用Cg/HLSL编写Shader程序片段,一般情况下Unity会把Cg/HLSL交叉编译成优化过的GLSL,保证更好的跨平台性。


4 其它内容

  • Draw Call:CPU给GPU发出的命令,命令指向一个要被渲染的图元列表。

  • 坐标系:Unity中模型与世界空间使用左手坐标系,而观察空间使用右手坐标第。


5 Unity Shader实用工具



参考


Tags: Unity Shader Vistied:
Share: Twitter Facebook LinkedIn