提要

渲染管线是实时渲染中最重要的部分,它的最主要的任务就是在给定一个虚拟的场景,包括相机,object,灯光,纹理等等,生成一副2D的图像。

最基础的渲染管线如下图所示:

主要的阶段包括三个:Application,Geometry,Rasterizer,每个阶段都可能分成更小的管线,有些小的阶段会并行执行。下面来一个个讨论。

The Application Stage

主要任务:碰撞检测,加速算法,变换动画,外部接口的输入等等。

它不能被细分成更小的阶段。

为了获得更好的表现,这个阶段通常会用多核执行的方式进行加速。

The Geometry Stage

主要任务:负责每个多边形,每个定点的操作。

可以对阶段进行细分,如下图:

每个小阶段的描述如下:

Model&View Thansform(模型变换和视口变换)

要获得三维时间坐标系场景的显示必须先建立观察用的坐标系,然后将对象描述转换到观察坐标系并投影到观察平面上。

模型转换相当与改变模型在世界坐标的位置,在Opengl中,主要有三个函数用于执行模型变换,它们是glTranslate*()、glRotate*()、glScale()。这些函数通过移动、旋转、拉伸或者反射,对物体进行变换,实质上是相当与产生一个适当的移动,旋转或缩放矩阵,然后以这个矩阵为参数调用glMultMatrix*(),也就是把当前矩阵与变换矩阵相乘,得到当前位置。

视口变换相用于修改观察点的位置和方向,opengl中用到的函数就是glLookAt().

Vertex Shading(定点着色)

为了产生真实可感的场景,不仅要渲染物体的形状和位置,它的appearance也要进行渲染。

生成材质的光照效果称为着色,在每个定点都存储着与着色相关的信息(颜色,法向量等),着色的结果计算好之后就会传递到Rasterizer Stage进行插值计算。

Projection(投影)

投影指的时将空间的场景投射到2D平面进行显示。

常见有两种投影方式,一种是平行投影(parallel projection),一种是透视投影(perspective projection)。

机械制图中的投影方式就是平行投影,投影的比例一定和原图一样。

照相机和人眼的观察方式属于透视投影,物体近大远小,符合素描中的透视关系。

Clipping(裁剪)

只有在视口空间的物体或物体的部分才需哟啊显示出来,当一些图元只是部分出现在视口中的时候,就需要对其进行裁剪。

Screen Mapping(屏幕映射)

只有在视口空间中的图元会到达这个阶段。

视口的坐标会被转换到screen的坐标。

ScreenMapping的阶段就负责将视口上坐标对应到屏幕坐标。

Rasterizer Stage(光栅化阶段)

目标:渲染每个像素的颜色。

可以分割成:

Triangle Stage ->Triangle Traversal -> Pixel Shading-> Merging

总结

这并不是渲染流水线的唯一组织形式,电影的渲染通常使用的时micro polygon pipelines, 学术研究和predictive rendering通常使用的光线追逐,现在一些渲染工具也使用了光线追踪渲染器,比如Blender。而OpenGL的渲染管线如下图所示:

通常硬件的渲染流水线都是确定的,比如任天堂的Wii,但如今可编程的GPU却给我们带来了另外的机会:在流水线的各个阶段去编写自己的代码,这也是现代GPU最大的优势。

有意思的视频

Crysis 2 - Behind The Scenes: Rendering Pipeline - 
http://www.youtube.com/watch?v=-JVWU3hTdIw


参考

Real-Time Rendering 3rd

OpenGLProgramming Guide 7th

Fundamentals of Computer Graphics 2rd

Real-Rime Rendering (1) - 渲染管线(Rendering Pipeline)的更多相关文章

  1. Forward Rendering VS Deferred Rendering

    http://gad.qq.com/article/detail/32731 Forward Rendering Deferred Rendering

  2. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  3. 渲染路径-实时渲染中常用的几种Rendering Path

    http://www.cnblogs.com/polobymulberry/p/5126892.html?utm_source=tuicool&utm_medium=referral 回到顶部 ...

  4. Rendering in UE4(Gnomon School UE4 大师课笔记)

    Rendering in UE4 Presented at the Gnomon School of VFX in January 2018, part two of the class offers ...

  5. 39. Volume Rendering Techniques

    Milan Ikits University of Utah Joe Kniss University of Utah Aaron Lefohn University of California, D ...

  6. Unity5 的新旧延迟渲染Deferred Lighting Rendering Path

    unity5 的render path ,比4的区别就是使用的新的deferred rendering,之前的4的deferred rendering(其实是light prepass)也被保留了下来 ...

  7. Rendering on the Web

    转自: https://developers.google.com/web/updates/2019/02/rendering-on-the-web Rendering on the Web Goog ...

  8. Rendering with Replaced Shaders

    [Rendering with Replaced Shaders] 1.RenderType tag RenderType tag categorizes shaders into several p ...

  9. unity, 替换shader渲染(Rendering with Replaced Shaders)

    实现特效,尤其是一些后处理特效,经常需要将各物体的shader替换为另一套shader进行渲染到纹理,再后再进行合成或以某种叠加方式叠加到最后的画面上去. 再复杂一点儿的,可能不同的物体所用的替换sh ...

随机推荐

  1. MySQL进口.sql文件和常用命令

    MySQL进口.sql文件和常用命令 在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一次运行多条sql命令的.在mysql中运行sql文件的命令: mysql> so ...

  2. java回顾4 Java基本数据类型

    为JAVA基本数据类型.我的实在是有兴趣引用数据类型.在这里,我说的是主应用程序数据类型. 为JAVA荐两个网址: 1.http://blog.sina.com.cn/s/blog_745b874b0 ...

  3. I2C驱动程序框架probe道路

    基于Linux的I2C驱动器.采纳probe道路.根据这个框架,如下面就可以写任何支持I2C总线设备Linux驱动器. I2C设备连接到cpu具体i2c接口.被安装在cpu的i2c适配器.i2c设备和 ...

  4. XSS学习笔记(五)-XSS防御

    如果只生产XSS的地方都与输入或输出相关联的.所以错过了主要矛盾.而且,我们将有一个解决问题的办法:您可以输入端砚格过滤,是可能的过滤输出时间,输出到用户的GET或POST中是否有敏感字符: 输入过滤 ...

  5. Moq 和RhinoMocks

    Moq & RhinoMocks 使用Mock对象进行测试一般都会有以下三个关键步骤: 使用接口来描述需要测试的对象 为实际的产品代码实现这个接口 以测试为目的,在Mock对象中实现这个接口 ...

  6. js 上一天、下一天

    function Previousday() { var curDate = new Date(CreateDate_Temp); * * * ); var strDate = preDate.get ...

  7. uploadfiy 动态传递Form 参数

    参见 百度 http://jingyan.baidu.com/article/a3a3f8118b1c4d8da3eb8a60.html @{    ViewBag.Title = "Ind ...

  8. canvas绘制贝塞尔曲线

    原文:canvas绘制贝塞尔曲线 1.绘制二次方贝塞尔曲线 quadraticCurveTo(cp1x,cp1y,x,y); 其中参数cp1x和cp1y是控制点的坐标,x和y是终点坐标 数学公式表示如 ...

  9. 响应式web前端框架Foundation & Bootstrap 对比

    Foundation & Bootstrap都是易用.强大且灵活的前端框架,用于构建基于任何设备上的 Web 应用.提供流式布局,及多种 js UI 组件,如导航.表单.按钮.Tabs 等等. ...

  10. asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证

    原文:asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证 在前面的文章中我们曾经涉及到ControllerActionInvoker类GetPara ...