写在前面
学习unity shaderLab有一段时间了,总感觉要补一些基础知识才能更加深入,于是前一段时间又开始看计算机图形学方面的书,现在向女神乐乐看齐,写一篇备忘录,总结一下图形学各个术语,理解一下一些基本问题。
什么是Shader
中文翻译为着色器,简单来说,shader就是专门用来渲染3D图形的一种技术,用过shader,程序开发人员可以进行GPU编程,自己编写显卡渲染画面的算法,使画面更漂亮、更逼真,要做出绚丽的游戏,掌握shader编程是必不可少的。shader一般分为两种,一种是顶点着色器(vertex shader),用来计算顶点位置,为后期渲染作准备。第二种的像素着色器(fragment shader),用来计算光照、颜色等一系列的算法,用来处理光栅化后生成的fragment。
渲染管线(Rendering Pipeline)
也被称为渲染流水线,渲染管线的绘制流程是面试中经常会被问到的问题,下面是一张大概的流程顺序(摘自GPU Programming And Cg Language Primer 1rd Edition)。粗略可分为应用程序阶段、几何阶段和光栅化阶段,应用程序阶段是程序员调用DirectX3D或者openGL时发生,主要的阶段是几何阶段和光栅化阶段。
几何阶段:主要负责大部分多边形和顶点操作,包括:模型和视点变换(object space到world space,world space 到 eye space)、光照和着色、投影、裁减、屏幕映射(每个图元的x和y坐标变换到了屏幕坐标系中,也就是eye space 到project and clip space),图元装配。完成这些步骤后,我们会得到一堆在屏幕坐标上的三角面片,这些面片是用于光栅化的,也就是下一个阶段。
光栅化: 主要负责给每个图元正确配色。
openGL和d3d是什么
这些就是应用程序接口(API),用于访问图形硬件中的可编程特性,初学者可从这些API开始下手,慢慢接触图形编程。openGL比DX最大的好处就是跨平台的特性,它不依赖硬件的接口。但是u3d中的坐标系和d3d相同,有u3d使用经验的可能比较容易入手。