Real-Rime Rendering (1) - 渲染管线(Rendering Pipeline)
提要
渲染管线是实时渲染中最重要的部分,它的最主要的任务就是在给定一个虚拟的场景,包括相机,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最大的优势。
有意思的视频
参考
Real-Time Rendering 3rd
OpenGLProgramming Guide 7th
Fundamentals of Computer Graphics 2rd
Real-Rime Rendering (1) - 渲染管线(Rendering Pipeline)的更多相关文章
- Forward Rendering VS Deferred Rendering
http://gad.qq.com/article/detail/32731 Forward Rendering Deferred Rendering
- 【原】实时渲染中常用的几种Rendering Path
[原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...
- 渲染路径-实时渲染中常用的几种Rendering Path
http://www.cnblogs.com/polobymulberry/p/5126892.html?utm_source=tuicool&utm_medium=referral 回到顶部 ...
- 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 ...
- 39. Volume Rendering Techniques
Milan Ikits University of Utah Joe Kniss University of Utah Aaron Lefohn University of California, D ...
- Unity5 的新旧延迟渲染Deferred Lighting Rendering Path
unity5 的render path ,比4的区别就是使用的新的deferred rendering,之前的4的deferred rendering(其实是light prepass)也被保留了下来 ...
- Rendering on the Web
转自: https://developers.google.com/web/updates/2019/02/rendering-on-the-web Rendering on the Web Goog ...
- Rendering with Replaced Shaders
[Rendering with Replaced Shaders] 1.RenderType tag RenderType tag categorizes shaders into several p ...
- unity, 替换shader渲染(Rendering with Replaced Shaders)
实现特效,尤其是一些后处理特效,经常需要将各物体的shader替换为另一套shader进行渲染到纹理,再后再进行合成或以某种叠加方式叠加到最后的画面上去. 再复杂一点儿的,可能不同的物体所用的替换sh ...
随机推荐
- MySQL进口.sql文件和常用命令
MySQL进口.sql文件和常用命令 在MySQL Qurey Brower中直接导入*.sql脚本,是不能一次运行多条sql命令的.在mysql中运行sql文件的命令: mysql> so ...
- java回顾4 Java基本数据类型
为JAVA基本数据类型.我的实在是有兴趣引用数据类型.在这里,我说的是主应用程序数据类型. 为JAVA荐两个网址: 1.http://blog.sina.com.cn/s/blog_745b874b0 ...
- I2C驱动程序框架probe道路
基于Linux的I2C驱动器.采纳probe道路.根据这个框架,如下面就可以写任何支持I2C总线设备Linux驱动器. I2C设备连接到cpu具体i2c接口.被安装在cpu的i2c适配器.i2c设备和 ...
- XSS学习笔记(五)-XSS防御
如果只生产XSS的地方都与输入或输出相关联的.所以错过了主要矛盾.而且,我们将有一个解决问题的办法:您可以输入端砚格过滤,是可能的过滤输出时间,输出到用户的GET或POST中是否有敏感字符: 输入过滤 ...
- Moq 和RhinoMocks
Moq & RhinoMocks 使用Mock对象进行测试一般都会有以下三个关键步骤: 使用接口来描述需要测试的对象 为实际的产品代码实现这个接口 以测试为目的,在Mock对象中实现这个接口 ...
- js 上一天、下一天
function Previousday() { var curDate = new Date(CreateDate_Temp); * * * ); var strDate = preDate.get ...
- uploadfiy 动态传递Form 参数
参见 百度 http://jingyan.baidu.com/article/a3a3f8118b1c4d8da3eb8a60.html @{ ViewBag.Title = "Ind ...
- canvas绘制贝塞尔曲线
原文:canvas绘制贝塞尔曲线 1.绘制二次方贝塞尔曲线 quadraticCurveTo(cp1x,cp1y,x,y); 其中参数cp1x和cp1y是控制点的坐标,x和y是终点坐标 数学公式表示如 ...
- 响应式web前端框架Foundation & Bootstrap 对比
Foundation & Bootstrap都是易用.强大且灵活的前端框架,用于构建基于任何设备上的 Web 应用.提供流式布局,及多种 js UI 组件,如导航.表单.按钮.Tabs 等等. ...
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
原文:asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证 在前面的文章中我们曾经涉及到ControllerActionInvoker类GetPara ...