TBDR

扫盲 | 延迟渲染(1)

首先我们来简单复习一下GPU的工作方式

1

我们要在屏幕上画两个正方体,一个在前一个在后

2

GPU会根据我们的命令提交顺序来绘制,在这里我们先让GPU画后面一个正方体。

当渲染命令提交后,GPU会立刻对数据进行顶点变换、光栅化并着色(读贴图,算光照,等等),将结果花在屏幕上

3

然后我们让GPU画前面一个正方体

移动GPU渲染原理的流派——IMR、TBR及TBDR

作者:借你一秒

移动GPU相对桌面级的GPU只能算是未长大的小孩子,虽然小孩子在某些场合也能比成人更有优势(比如杂技、柔术之类的表演),但在力量上还是有先天的差别,主要表现在理论性能和带宽上。

  与桌面GPU动辄256bit甚至384bit的位宽、1.2-1.5GHz的高频显存相比,移动GPU不仅要和CPU共享内存带宽,而且普遍使用的是双32bit位宽、LPDDR2-800或1066左右的内存系统,总带宽普遍在10GB/s以内,悲催的Tegra 3使用的还是单通道内存模式,搭配DDR3L的带宽不过6.4GB/s。

目前GPU性能最强大的iPad 4带宽也不过17GB/s(图片源于Anandtech)

PowerVR 图形架构探索:tile-based渲染

我一直热衷于讲述我为何加入Imagination公司的故事。这个故事沿着以下路线发展:尽管我获得了图形方面的工作offer,而且是在阳光充足气候的城市,但最终我还是选择了PowerVR Graphics公司,在英国这个明显没有太多阳光的地方工作,因为我对砖墙式延迟渲染(TBDR)技术如何能在现实中应用实在是太感兴趣了。一直到现在,我的图像职业生涯大多时候聚焦在如今的概念简化的直接模式渲染器(IMRs)——大多指GeForces和Radeons显卡。

无意冒犯那群设计GeForces和Radeons显卡的家伙——他们中的一些人也是我的朋友,我也很了解这群人,但是现代分离式IMR 图形处理器上的前端架构并不是世界上最激动人心的事情。这些GPU中包含大量的专用带宽设计,以一种效率低下的方式进行像素描绘工作,但确实是一种概念简单并且能在芯片中简单表现出来的方式,从而使得GPU架构相对容易地进行设计、规范,并且已经被硬件团队构建出来了。

直接模式渲染器运行机制

Imagination:软件生态也是优势

2013年全球微处理器销售额将以史上最快的增长速度突破610亿美元,这主要归功于连接到互联网的手机和平板电脑的强劲需求。据调研机构Gartner的预测,2015年全球200~300美元中价位智能移动设备(智能手机/平板电脑)出货量将达5.8亿台,并且用户主要使用的功能是影音编辑和分享。

得益于浮点运算优势,GPU可以有效地接替来自CPU在图形渲染过程中产生的几乎所有计算负荷,并且速度十分惊人。因此,当系统检测需要更复杂的计算时,运算会从CPU切换到GPU工作模式,在一些测试环境下,渲染性能可以轻易地从十几帧每秒加速到上百帧每秒。在GPU技术的支持下,芯片供应商和设备制造商可提供诸如3D UI、实时视频图像处理、具有逼真图像体验的游戏应用和增强实境等丰富的应用模式。

所以,今后整个行业对GPU的重视会大大超过CPU本身,因为今后主流消费者使用移动设备主要的用处是多媒体娱乐,视频和游戏的处理都更加依赖GPU的计算能力。GPU在移动处理器中的重要程度已经日益凸显,高通移动处理器的一大卖点就是自己的Adreno GPU。

网友 匿名 问:如何看待PowerVR的----TBDR?

如何看待PowerVR的----TBDR?

Q&A:PowerVR图形架构分块延时渲染 (TBDR)是什么?

Q:PowerVR图形架构分块延时渲染 (TBDR)是什么?

A:PowerVR架构以称为“分块延时渲染”(TBDR) 的概念为基础。相对于多数PC机以及游戏主机图形引擎所采用的即时渲染 (IMR) 技术,TBDR注重尽可能在场景处理的早期将渲染图像所需的处理最小化,这样只有最终用户实际看到的像素会占用处理资源。该方法能在提升处理吞吐量的同时将内存使用和功耗降至最低,但复杂程度也更高。

TBDR的所有部分都在硬件中处理,对软件开发者完全不可见,可确保最高的兼容性和性能。PowerVR独特的智能参数管理技术可以在有限的内存空间下进行TBDR渲染,无需使用过多的内存便可确保高复杂度分块的兼容性。

PowerVR GPU架构概述

首先,让我们浏览一下PowerVR TBDR架构。

PowerVR TBDR架构

该架构有两个主要特点:镶嵌和延迟渲染。
镶嵌是用于提高显示器上图像渲染效率的过程。它将几何数据分为小的矩形区域,这些矩形区将显示为一个图像,即拼贴。

镶嵌和延迟渲染

分别对每个拼贴进行栅格化和加工。长远来看,这对处理能力的需求更低,这是因为GPU可以使用片上缓冲对颜色、深度和模板缓冲区进行读取-修改-编写操作,而不是在系统内存中收发数据而浪费带宽。

延迟的情况下,有一个隐藏面消除(HSR)的过程,可以完全排除透支。

Vulkan:显示的依赖项和同步机制

几乎Vulkan的每一种操作都需要某种形式的同步。Vulkan不提供隐式的次序保证,也包括命令缓存中私有的一些命令。不同的架构的处理过程完全是不同的;TBDR(基于碎片的延迟渲染)型GPU在任何碎片处理器之前,执行完所有的定点处理操作,而IMR(立即型渲染)GPU会采用流水线一起执行所有操作。通过采用显示的声明,各个操作之间没有确定的执行次序,因此它能让应用程序的执行尽可能的快,同时可以根据用户要求,让用户请求确定的程序执行次序。

这与OpenGL ES是相反的,在OpenGL ES中可以假定任何事情都是有确定次序的,一个具体的应用实现不得不四处选择,才能实现优化效果。

对于CPU和GPU都是同样的,Vulkan能够让主机等待所有来自GPU的事件请求,以及能够直接触发GPU的一些事件。

网友freshthomas:TBDR 的一个细节问题

shader TileBasedDeferredRendering.fxml中函数

[numthreads(BLOCK_X, BLOCK_Y, 1)]
void TBDRUnifiedCS(uint3 gid : SV_GroupID, uint3 gtid : SV_GroupThreadID, uint GI : SV_GroupIndex)

计算每个block的逻辑如下

uint2 tile_start = gid.xy * TILE_SIZE + gtid.xy;
for (uint tile_y = 0; tile_y < TILE_SIZE; tile_y += BLOCK_Y)
{
for (uint tile_x = 0; tile_x < TILE_SIZE; tile_x += BLOCK_X)
{
uint3 coord = uint3(tile_start + uint2(tile_x, tile_y), 0);

TBDR的HSR流程细节和使用AlphaBlend的效率提升程度?

本文首发于知乎,经小编整理发布。

最近在死磕TBDR为什么用AlphaBlend会比AlphaTest有效率提升的问题,望专业人士解答。

看了很多文章都简单的说用AlphaBlend会比AlphaTest有效率提升,但是看了PowerVR_Series5_Graphics.SGX_architecture_guide_for_developers.1.0.8.External.pdf,OpenGLInsights和一篇比较的帖子:
mobile - Why should I prefer alpha blending to alpha testing?
后,觉得AlphaBlend是不会有多少提升的。

我现在理解的HSR流程是FragmentShade前会先这么做一遍Fragment处理
1.通过投射来找到最近的Fragment
2.如果这个Fragment是Opaque的则仅取其做渲染丢弃其他,如果是带AlphaTest或者AlphaBlend的则取所有此位置的Fragment
3.将之前的投射结果写入DepthBuffer(如果前景是个半透明树叶,AlphaTest的透明部分会被cutout掉,AlphaBlend和Opaque会保持)

同步内容
--电子创新网--
粤ICP备12070055号