Chapter 2. The Graphics Rendering Pipeline 图形绘制流水线 金小刚 Email: jin@cad.zju.edu.cn 浙江大学CAD&CG国家重点实验室,教I 三楼
主要内容 流水线的主要功能是根据给定的虚拟摄像机、三维物体、光源、光照模型、纹理等绘制一幅二维图像。 A chain is no stronger than its weakest link 流水线的速度是由最慢的部分(bottleneck)而非最快部分决定的。 我们这章主要集中讲功能(function)而非具体实现(implementation)。
Each stage may be a pipeline Architecture(体系结构) Three conceptual stages: Application Geometry Rasterizer Each stage may be a pipeline
Application Stage(应用层):CPU 用软件来实现,用户可完全控制(而其它层则建立在硬件之上) 应用层的输出为Rendering primitives(如点、线和三角形) Processes:碰撞检测、纹理动画、基于变换的动画、Morphing、响应输入设备(键盘、鼠标、VR头盔)的操作等
The Geometry Stage(几何层) 主要处理大部分多边形和顶点操作 Model & view Transform Lighting Projection Clipping Screen Mapping 几何层可进一步细分为上述功能层
Model and View Transform Model space World space Model transform Model coordinates World coordinates Camera or eye space View transform Camera coordinates
Lighting and Shading 用光照方程计算模型每个顶点的颜色(根据法向、光源、材料、纹理等) 模型通常用三角形表示(大部分图形硬件支持) 光亮度插值技术:主要是Gouraud shading
Projection 光照计算后的下一步是投影变换,把视域体(view volume)变换为一单位立方体 两种投影方法:正交投影(orthographic or parallel projection)和透视投影(perspective projection) 正交投影:视域体从长方体变换为单位立方体。特点:平行线在变换后仍是平行线 透视投影:视域体从平头锥体变换为单位立方体。物体离摄像机越远,在屏幕上的投影越小,与人的视觉系统相符
Clipping 只有全部或部分可见的物体需要传到光栅化层。 完全可见:直接传到光栅化层; 完全不可见:不需要绘制; 部分可见:需要裁剪 由于裁剪在投影变换之后,只需把几何对单位立方体裁剪,使得裁剪变得简单。
新顶点 单位立方体 x x Clipping z z 新顶点
Screen Mapping 单位立方体 (x2,y2) Screen mapping Test OOO (x1,y1)
The Rasterizer Stage(光栅化层) 目的:计算每个象素的颜色。 处理Per-pixel operations 每个象素的信息存在颜色缓存(color buffer) 采用双buffer技术:绘制在back buffer进行,当绘制完成后,再交换到front buffer 在该层解决可见性问题: 大部分图形硬件采用Z-buffer技术 Z-buffer:存贮离摄像机最近点场景的Z值
Z-buffer 算法 如果某象素新的Z值比Z-buffer中的原有值小,则用新的Z值和颜色更新该象素; 优点:简单、可用硬件实现、与物体绘制顺序无关。算法复杂度为O(n) 但处理透明物体困难。
光栅化层中的buffer Color buffer: 每个象素的颜色值 Z buffer:每个象素的Z值 Alpha buffer: 每个象素的不透明度 Stencil buffer(模板缓冲区) : 用来产生特效的强大工具。是OpenGL的一部分,通常每个象素包含1~8 Bits。基本体素可用各种函数绘制到模板缓冲区,然后用其内容来控制绘制到Color buffer和Z buffer的几何体素。 例子:先把一填充园绘制到模板缓冲区,后续的几何体素只有在填充园区域内绘制,而其它区域不绘制。
光栅化层中的buffer(续) Frame buffer:常指系统中所有的buffer,但有时仅指Color buffer和Z buffer Accumulation buffer(累积缓存): 1990由Haeberli和Akeley提出。在该缓存内,图像可以通过一系列操作累积。 实例:用来产生运动模糊(motion blur)、反走样、软影、景深(depth of field)效果。
总 结 CPU GPU Application Geometry Rasterizer 硬件加速 总 结 CPU GPU Application Geometry Rasterizer 硬件加速 硬件加速从流水线的末端开始,然后逐步往高层发展,目前有些应用层的工作已经可以用可编程硬件来实现。 硬件实现的唯一好处:速度! 在实时绘制中,速度是关键!
Graphics Pipeline: GPU CPU GPU Graphics State Vertex Processor Pixel Processor Application Vertex Processor Assembly & Rasterization Pixel Processor Video Memory (Textures) Vertices (3D) Xformed, Lit Vertices (2D) Fragments (pre-pixels) Final pixels (Color, Depth) Render-to-texture Note: Vertex processor does all transform and lighting Pipe widths vary Intra-GPU pipes wider than CPUGPU pipe Thin GPUCPU pipe Many caches and FIFOs not shown Soon: render-to-vertex-array Here’s what’s cool: Can now program vertex processor! Can now program pixel processor!
Graphics Pipeline: GPU CPU Geometry Storage Geometry Processor Rasterizer Fragment Processor Framebuffer Texture Storage + Filtering Vertices Pixels
Texture Storage + Filtering Possible Bottlenecks CPU transfer transform raster texture fragment frame buffer CPU Geometry Storage Geometry Processor Rasterizer Fragment Processor Framebuffer Texture Storage + Filtering CPU/Bus Bound Vertex Bound Pixel Bound