计算机图形学笔记整理:
1.写一个渲染管线的流程:
一、应用阶段:起点是CPU,把场景数据、摄像机位置、视椎体、模型、光源,设置材质(漫反射、高光反射颜色)、纹理、shader输出成渲染所需几何信息——渲染图元(点、线、三角面等)
1.把数据加载到显存中;硬盘->内存->显存
2.设置渲染状态;定义场景中的网格将被怎么渲染,使用了哪些顶点着色、片元着色、光源属性、材质等。
3.调用Draw Call;由CPU发起命令,通知GPU根据渲染状态在屏幕上绘制出图像的过程就叫一次Draw Call;
二、几何阶段:在GPU上进行,负责和每个渲染图元打交道,进行逐顶点、逐多边形的操作,决定需要绘制的图元是什么,怎么绘制它们,在哪绘制它们。
1.顶点着色器(Vertex Shader):完全可编程的,用于实现顶点的空间变换,逐顶点光照,计算顶点颜色等功能;
2.曲面细分着色器(Tessellation Shader):是一个可选的着色器,用于细分图元;
3.几何着色器(Geometry Shader):可选着色器,用于执行逐图元的着色操作或用于产生更多的图元;
4.裁剪(Clipping):不可编程,将不在摄像机视野内的顶点裁剪掉,并剔除某些三角图元的面片,这个阶段可配置;
5.屏幕映射(Screen Mapping):可配置可编程,此过程负责把每个图元的x,y坐标转换到屏幕坐标系(二维坐标系)下。
三、光栅化阶段:在GPU上执行,使用几何阶段传递来的数据产生屏幕上的像素,并渲染出最终的图像。主要决定每个渲染图元中的哪些像素应该被绘制在屏幕上,然后进行逐像素处理。两个目标,计算每个图元覆盖了哪些像素,计算这些像素的颜色。
1.三角形设置(Triangle Setup):计算光栅化一个三角网格所需的信息
2.三角形遍历(Triangle Traversal):检查每个像素是否被一个三角网格所覆盖,如果被覆盖就会产生一个片元(Fragment)
3.片元着色器(Fragment Shader):可编程,用于实现逐片元的着色操作,也叫像素着色器
4.逐片元操作(Per-Fragment Operations):可配置但不可编程,负责执行如修改颜色、深度缓存、进行混合等操作。对每一个片元进行一些操作,如:
(1)决定每个片元的可见性,这涉及了很多测试工作,如模板测试(Stencil Test)、深度测试(Depth Test)等;
(2)如果一个片元通过了所有测试,就需要把这个片元的颜色值和已经存储在颜色缓冲区的颜色进行混合(Blend);
2.对应到UNITY里面渲染一个cube的API如下:
一个cube上面的组件包括:mesh,meshrender,meshFilter
mesh里面包含的东西:vertices(顶点数据数组Vector3[])、triangles(三角形顶点索引数组,int[])、normals(法线向量数组,Vector3[])、uv(纹理坐标数组,Vector2[])。
meshRender的作用:把mesh渲染到屏幕上。
meshFilter的作用:从mesh获取数据
mesh,meshrender,meshFiler 这三者的联系和区别:
The Mesh Filter takes a mesh from your assets and passes it to the Mesh Renderer for rendering on the screen.