实时渲染(一)——图形渲染管线

在渲染管线中是最慢的阶段决定整个渲染的速度。

我们一般使用吞吐量(throughput)来描述一个阶段的处理速度,而不是帧率。因为帧率会受到设备更新的限制而导致实际速度比帧率所标示的更慢。

一个例子:

假设一个设备为60赫兹,这意味着这个设备16.666666ms刷新一次,这时恰好有一管线阶段花费了62.5ms执行完成,由于63大于16.666666*3,小于16.666666*4,所以他实际上想要最终完成工作必须等待下一次设备刷新。所以真实的执行时间折算下来其实不止62.5ms而是趋近于66ms。当然,如果关闭了垂直同步就另当别论了。



一个渲染管线可以粗略的按照执行顺序分成三大阶段:

  1. 应用阶段
  2. 几何阶段
  3. 光栅阶段

这些阶段又可以细分为更多的子阶段,注意这些都是功能性的分配,在实现上为了效率等因素往往会合并一些阶段或者拆分一些阶段等等。

下面是一张图:

一、应用阶段

这个阶段的目标就是为几何阶段产生合适的图元数据,一般来说,很多工作都在这个阶段完成,诸如碰撞检测、动画、输入、当然还有一些加速管线的算法,比如层次视椎剔除(hierarchical view frustum culling)等等。

二、几何阶段

几何阶段集中于逐多边形操作和逐顶点操作。

  1. 模型-视图转换:模型坐标-->世界坐标-->相机坐标
  2. 顶点着色:计算着色方程根据材质数据(位置、法线、颜色、其他着色方程需要的数据等等)决定光照效果,结果可以是(颜色、向量、纹理坐标或者其他种类的着色数据)。通常在世界空间中发生、有时候会把相关实体转换到其他空间,并在此空间进行计算。
  3. 投影:略
  4. 裁剪:在单位立方体之外的基元被舍弃,而完全在单位立方体之内的基元被保留;相交的基元则进行剪切,生成新的顶点,而老的被丢弃。
  5. 屏幕映射:只有已裁剪的部分才会被传递给屏幕映射,坐标仍然是3维的。将x/y转换成平面坐标。转换后的x/y叫做屏幕坐标。有一个注意事项是:如何把浮点数映射到像素以及某些系统之间屏幕做坐标原点的问题。

三、光栅阶段

  1. 建立三角形:计算三角形表面差值等数据,这个数据将会用于下一阶段的扫描转换,以及几何阶段生成的各种着色数据的插值。
  2. 遍历三角形:检查每个被三角形覆盖了中心的像素,并为何三角形重叠的部分生成片段。查找那些在三角形之内的像素或者采样的过程叫做扫描转换。生成的每个在三角形内的片段都是根据三角形顶点插值出来的,这些片段的数据包括深度以及各种来自几何阶段的着色数据。
  3. 像素着色:插值完毕的着色数据输入其中,执行所有的逐像素着色操作,并将一个或者多个颜色传递给下一个阶段。纹理技术也在此阶段实现。
  4. 合并:每个像素的信息被存储在颜色缓冲中,它是颜色的矩形数组(每个颜色拥有红、绿、蓝三部分)。合并阶段负责将着色阶段生成的片段颜色和当前缓冲中存储的颜色进行组合。并且包含可见性检测、模板操作等等。


最后要梳理一下各种shader通常都做什么:

vertex shader:模型-视图转换,顶点着色,投影

geometry shader:操作图元顶点(primitive概念看下方)——图元着色、销毁/创建图元

pixel(fragment) shader:像素着色

几何primitive: points、lines、triangles

时间: 2024-10-11 21:27:18

实时渲染(一)——图形渲染管线的相关文章

【《Real-Time Rendering 3rd》 提炼总结】(二) 第二章 图形渲染管线 The Graphics Rendering Pipeline

本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/70544201 这篇文章是解析计算机图形学界"九阴真经总纲"一般存在的<Real-Time Rendering 3rd>系列文章的第二篇.将带来RTR3第二章内容"Chapter 2 The Graphics Rendering Pipeline 图形渲染管线"的总结.概括与提炼. 文章分为全文内

浅谈 GPU图形渲染管线

 图形渲染管道被认为是实时图形渲染的核心,简称为管道.管道的主要功能是由给定的虚拟摄像机.三维物体.灯源.光照模型.纹理贴图或其他来产生或渲染一个二维图像.由此可见,渲染管线了实时渲染技术的底层工具.图像中物体的位置及形状是通过它们的几何描述.环境特征.以及该环境中虚拟摄像机的摆放位置来决定的.物体的外观受到了材质属性.灯源.贴图以及渲染模式(sharding modles)的影响.         很多计算机图形学的书籍都把渲染管线分为三个阶段:应用程序阶段.几何阶段.光栅化阶段. 1.  应

如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染技术!

7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等.Unity大中华区技术经理成亮表示,实时渲染技术的跨平台性能让游戏体验变得更好 Unity大中华区技术经理成亮做了<解秘Unity2018最新实时渲染技术>的主题演讲,分享了2018年Unity在实时渲染方面实现的三个重要技术,包括图形相关的可编程渲染管线.基于渲染管线推出的Shader Graph.PostProcess工

图形渲染管线简介

The Graphics Rendering Pipeline 渲染管线,这章主要讲光栅化渲染管线. 毕业前实习时,也实现过一个简单的软光栅化渲染管线,再复习一下. 在计算机图形学领域,shading指基于表面相对灯光的角度.距灯光的距离.相对于相机的角度和材质的属性等来修改物体/表面/多边形的颜色,进而创造一个具有真实感效果的过程. In computer graphics, shading refers to the process of altering the color of an o

图形渲染管线与shader(更新中)

恢(zheng)复(shi)更(kai)新(shi)后的第一天. 唔-不如来说说图形管线和着色器的事吧.趁着刚给别人讲完.(说来还是一段惨痛的经历-TAT) ? (请自行脑补分割线) ? 着色器,也就是平时各种地方说的shader,是开发者为了开发需求而为GPU(图形处理器)编写的一个小程序.GPU有着高度并行化的特点,但运算的能力就没有CPU那么厉害,无法完成较为复杂的运算.但同时,它往往拥有CPU无法企及的庞大的计算单元数量(Iris 540:48,GTX 980Ti : 2560),这些单

可编程图形渲染管线

着色程序分为两类:vertex shader program(顶点着色程序)和fragment shader program(片断着色程序).为了清楚的解释顶点着色和片断着色的含义,我们首先从阐述GPU上的两个组件:Programmable Vertex Processor(可编程顶点处理器,又称为顶点着色器)和 Programmable Fragment Processor(可编程片断处理器,又称为片断着色器). 顶点和片段处理器被分离成可编程单元,可编程顶点处理器是一个硬件单元,可以运行顶点

Xcode6的 实时渲染 在storyboard修改自定义属性

在storyboard 中修改属性可以看到 对应的界面效果,但是自定义类怎么实现呢?Xcode6的 实时渲染可以帮我们实现. 只需要加几句简单代码就可实现,如下图:

[Xcode] Attributes Inspector 界面自定义实时渲染属性

在工程里面新建文件 Cocoa Touch Class  模版选对应的 比如 对 ImageView 扩展 就创建UIImageView 这个对应的类可以在 Identity Inspector 里面看默认的类名字 import UIKit @IBDesignable // 添加这个实现StoryBoard实时渲染结果 class addAttributes: UIImageView { @IBInspectable var cornerRadius: CGFloat = 0 { // @IBI

【原创】UE4实时渲染流程显示

UE4的实时渲染流程,简单易懂! 原文地址:https://www.cnblogs.com/tianshanhangui/p/10041443.html

克服VR眩晕之帧数 提升UE4内容实时渲染效率

克服VR眩晕之帧数:提升UE4内容实时渲染效率 Li Wen Lei, HuNing 在 2015/10/29 23:00:31 | 新闻 Share on Facebook Share on Twitter Share on Google+ Share on LinkedIn VR已经成为了当今最火热的一个话题,带上头盔之后,从此进入一个奇妙的世界,在这里你不再是观众,你参与这个世界发生的每一件事件.整个世界从此与众不同.在赛道上飞驰,在战场上纵横     但是生理机制让我们的大脑在身体并没有