博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Real-Rime Rendering (1) - 渲染管线(Rendering Pipeline)
阅读量:7240 次
发布时间:2019-06-29

本文共 1622 字,大约阅读时间需要 5 分钟。

提要

渲染管线是实时渲染中最重要的部分,它的最主要的任务就是在给定一个虚拟的场景,包括相机,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 - 

参考

 Real-Time Rendering 3rd

OpenGLProgramming Guide 7th

Fundamentals of Computer Graphics 2rd

 

你可能感兴趣的文章
LOJ#2087 国王饮水记
查看>>
Shell编程中的变量作用域
查看>>
数位DP
查看>>
PLSQL Convert Object to String
查看>>
Linux 串口驱动设计二
查看>>
jQuery方法判断checkbox是否选中以及改变checkbox的选中状态
查看>>
CSS样式设置小技巧
查看>>
PDF 补丁丁 0.4.2.1063 测试版发布:新增检查新版本功能
查看>>
Module的加载实现
查看>>
统计学 学习第一季第一集《统计学习方法》第一章 统计学方法概论 简要概述...
查看>>
css学习_css补充知识
查看>>
python 08day--软件包的管理及ssh、samba、apache服务
查看>>
ThinkPPHP学习(一)生成图片验证码
查看>>
KFC ajax
查看>>
学长哈哈的店公告
查看>>
python 读取 xlsx
查看>>
ethereum/EIPs-1271 smart contract
查看>>
Football
查看>>
java中文件上传下载将file转为MultipartFile
查看>>
冲刺第三天
查看>>