读书笔记——实时渲染(二)

graphics rendering pipeline(图形渲染管线)

      graphics rendering pipeline(图形渲染管线 or the pipeline 管线)是实时图形学的核心,主要功能是根据给定的虚拟摄像机、three-dimensional object(三维物体)、光源以及其他来生成或者渲染一个二维图像。

一、architecture(架构)

        图形渲染管线包含几个阶段(stages),而每个阶段又包含几个任务(tasks),各个阶段并行(parallel)执行,且每一个阶段依赖于前一个阶段的结果。4个主要阶段:application(程序)、geometry processing(几何处理)、rasterization(光栅化)和pixel processing(像素处理)

二、应用程序阶段

       开发者对应用程序有完全的控制权,CPU中执行(execute),可以完全自行决定实现方式,此阶段的算法可以提高后续阶段的性能。一些应用程序也可以在GPU中使用一个单独的模块——computer shader(计算着色器)。应用程序阶段输出是渲染图元,数个处理核心并行执行——超标量结构(superscalar construction)。碰撞检测(collision detection)、加速算法(acceleration algorithms)

 

三、几何处理阶段

      几何处理阶段在GPU中发生,分成4个功能阶段:vertex shading(顶点着色)、projection(投影)、clipping(裁剪)、screen mapping(屏幕映射)

3.1vertex shading

         vertex shading有两个任务:计算顶点的位置和计算想要的输出数据(normal and texture coordinates 法线和纹理座标)。传统上,物体的阴影计算:在顶点位置和法线上应用光线方程。物体颜色只存储在顶点上,三角形颜色使用顶点插值得到。可编程的顶点处理单元也叫做vertex shader(顶点着色器)。现在,GPU的发展,顶点着色器变得通用,不用计算着色方程,设置与顶点关联的数据(顶点动画)。

3.1.1顶点位置的计算

        一组座标系:

模型座标(model coordinate ),模型完全没有变换,每个模型都可以和一个模型的转换相关联;

世界座标(world coordinate or world space 世界空间):世界座标唯一

视图转换(view transform)目的将世界座标转换成观察空间(view space or camera space相机空间),将摄像机放置于原点,朝向向上。在摄像机视野中的物体才会被渲染。

3.1.2输出类型计算

真实场景包含内容:渲染对象的形状和位置以及外观(材质、灯光)

shading(着色):决定光照对材质的影响的操作,包含计算不同点的着色方程,计算阶段:集合处理和像素处理。顶点会存储各种材质数据:点的位置、法线、颜色值

 单位立方体(the unit cube or canonical view volume 标准观察体积)(-1,-1,-1)到(1,1,1)的单位立方体

3.2投影

投影有两种:orthographic projection(正交投影or parallel projection平行投影)和 perspective projection (透视投影)

正交投影:变换后的平行线依旧平行

透视投影:模拟人类的感知,物体离摄影机越远,投影后物体就越小

投影之后,z座标存储在z缓存中,不存储在图像中,模型从三维变成二维

3.3可选顶点处理

        在投影之后,GPU中有几个可选的顶点处理:tessellation(细分)、geometry shading(几何着色)、stream output(流输出)

细分:使用合适数量的三角形生成曲面(curved surface),细分将patch(小片)顶点集转换成更大的顶点集,从而创建三角形集合。

细分阶段包含一系列阶段:hull shader(壳着色器)、tessellator(细分器)、domain shader(域着色器)

几何着色器:将各种图元的输入转换成顶点

流输出:将顶点输出为数据进一步处理

3.4裁剪

       只有部分体积位于观察空间类的对象将进行裁剪。图元在单位立方体上进行裁剪,新顶点会代替就顶点。裁剪使用投影生成的4值齐次座标。几何阶段的最后一步将座标转换成窗口座标(window coordinate)

3.5屏幕映射

      经过剪裁的图元会传递到屏幕映射阶段,屏幕映射负责在屏幕上寻找座标,图元的x和y座标会转换成屏幕座标。屏幕座标和z座标叫窗口座标。z座标会重新映射为z座标。窗口座标和重新映射的z座标会传递到光栅阶段。

OpenGL支持笛卡尔座标系,左下角为原点,DirectX有时左上角为原点

四、rasterization(光栅化)

        光栅化的目标是找到图元内的所有像素简称图片像素。光栅阶段有两个子阶段:triangle setup(三角形设置 or primitive assembly 图元装配)和triangle traversal(三角形遍历)。

光栅化也叫scan conversion(扫描转换)将屏幕空间的顶点和与顶点相关的着色信息转换为屏幕上的像素。

       如何判断三角形是否和像素重叠,可以使用点采样的方法。最简单的是单点采样,像素的中心位于三角形内侧被认为处于三角形内。以及supersampling(超级采样)或multisampling antialiasing(多重采样抗锯齿)每一个像素多于一个采样。另一种方式的使用保守光栅化,像素有部分在三角形内侧就认为像素在三角形内

4.1triangle setup(三角形设置)

计算三角形的各种数据,三角形微分、方程、以及几何阶段生成的阴影数据的插值,这些都有硬件完成。

4.2triangle traversal(三角形遍历)

中心被三角形覆盖的像素会生成一个fragment(片段)。寻找三角形内的采样或像素叫做三角形遍历

五、像素处理

       像素处理阶段分成两个子阶段:pixel shading(像素着色)和merging(合并)。像素处理是针对在图元内的像素或采样,是每一个像素和每一个采样的计算

5.1像素着色

        任何逐像素计算都在此阶段进行。使用专门的硬件完成,GPU。将经过插值的着色数据作为输入,最终结果是一个或多个颜色传递给下一个阶段,最重要的是texturing(贴图)

5.2merging(合并)

         每一个像素的信息都存在颜色缓存中,合并阶段的任务是将像素着色阶段生成的fragment(片段)颜色和当前存储在缓存中的颜色想结合。这一阶段也叫做ROP,raster operations pipeline(光栅操作管线 or render output unit 渲染输出单元 )

合并阶段解决可见性问题(没有看懂)

stencil buffer(模板缓存):记录被渲染图元的位置的一种离屏缓存,每个像素8位。

frame buffer(帧缓存):包含系统中的所有缓存

当图元到达光栅阶段,从摄像机角度可见的图元就会显示在屏幕上,屏幕显示颜色缓存中的颜色。

为了避免人眼能够看清楚绘制过程,使用double buffer(双缓存)back buffer和front buffer,一个不显示绘制,一个显示,然后交换。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章