提要

渲染管线是实时渲染中最重要的部分,它的最主要的任务就是在给定一个虚拟的场景,包括相机,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. Do a “git export” (like “svn export”)?(转)

    Probably the simplest way to achieve this is with git archive. If you really need just the expanded ...

  2. IC设计前端到后端的流程和eda工具。

    IC前端设计(逻辑设计)和后端设计(物理设计)的区分:以设计是否与工艺有关来区分二者:从设计程度上来讲,前端设计的结果就是得到了芯片的门级网表电路. 前端设计的流程及使用的EDA工具例如以下: 1.架 ...

  3. hdu Word Amalgamation(map)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1113 找单词 #include <iostream> #include <strin ...

  4. js敏感词过滤

    var filterWord={ words:"", tblRoot:{}, //敏感词文件 file:"sensitiveWords.txt", //载入敏感 ...

  5. C#关于图片的相关处理

    public class ImageHelper { /// <summary> /// 图片转换成字节流 /// </summary> /// <param name= ...

  6. IntelliJIDEA Getting+Started+with+Spring+MVC,+Hibernate+and+JSON

    https://confluence.jetbrains.com/display/IntelliJIDEA/Getting+Started+with+Spring+MVC,+Hibernate+and ...

  7. 通信网Project之——单源单宿最短路问题

    最主要的Vertex类: #ifndef VERTEX_H #define VERTEX_H #include <climits> #include <cstddef> #de ...

  8. Theano学习笔记(一)——代数

    标量相加 import theano.tensor as T from theano import function x = T.dscalar('x') y = T.dscalar('y') z = ...

  9. 勾选Create git respository的作用

    在Xcode中创建项目时会弹出Source Control选项,勾选Create git repository选项可以帮助我们对照以前项目中代码中修改的部分,为开发提供方便. 在项目完成到一定程度时, ...

  10. getch()、getche()和getchar()函数

    原文:getch().getche()和getchar()函数 getch().getche()和getchar()函数(1) getch()和getche()函数 这两个函数都是从键盘上读入一个字符 ...