当前位置:首页 » 硬盘大全 » 延迟渲染深度缓存
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

延迟渲染深度缓存

发布时间: 2022-07-04 21:57:33

‘壹’ 玩游戏画面贴图渲染延迟,是什么问题呢

你开了3D加速没?.老显卡的话,.显示器和主机的数据传输也有可能出现这样的问题,要是有多馀的显示器.换个显示器试试,如果没问题,就把显卡驱动更新一下,.在看看你自己的DX版本是几的..集显禁用了没.色彩换16和32试试.,,.最有可能的就是显卡驱动问题..个人觉得.,

‘贰’ 如何解决DOM被延迟渲染

dom 是文档对象模型,是需要加载在浏览器内存中的,而加载过程就需要渲染引擎来处理

不同厂商的浏览器引擎对dom的支持力度不太一样,貌似Firefox 最好吧

网页浏览器的排版引擎也被称为页面渲染引擎,它负责取得网页的内容(HTML、XML、图象等等)、整理信息(例如加入CSS等),以及计算网页的显示方式然后会输出至显示器或打印机。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要排版引擎。

‘叁’ Crysis的SSAO是怎么实现的

一个简单实用的SSAO实现

全局照明(global illumination, GI)是一个计算机图形学术语, 它指的是所有表面之间相互作用的光照现象(光线来回跳动, 折射, 或者被遮挡), 例如: 渗色(color bleeding), 焦散(caustics), 和阴影. 很多情况下, GI这个术语代表的只是渗色和逼真的环境光照(ambient lighting).
直接照明– 光线直接来自光源– 对于今天的硬件来说已经非常容易计算, 但这对于GI并不成立, 因为我们需要收集场景中每个面的邻近面信息, 这样的复杂度很快就会失控. 不过, 也有一些容易控制的GI近似模拟方式. 当光线在场景中传播和跳动时, 有一些地方是不容易被照到的: 角落, 物体之间紧密的缝隙, 折缝, 等等. 这就导致了这些区域看起来比它们周围要暗一些.
这个现象被称为环境遮蔽(ambient occlusion, AO), 一般用于模拟这种区域变暗的方法是: 对于每个面, 测试它被其它面”阻挡”了多少. 这样的计算比起全局光照来说要快得多, 但大多数现有的AO算法还没法实时地运行.
实时AO在屏幕空间环境遮蔽(Screen Space Ambient Occlusion, SSAO)出现之前一直被认为是达不成的目标. 它的第一次应用是在Crytek的”Crysis”这款游戏中, 之后的很多其它游戏也使用了这项技术. 在这篇文章中, 我会讲解一种简单明了, 但效果又好于传统实现的SSAO方法.

Crysis中的SSAO

准备工作

最初Crytek的实现是用一个深度缓冲做为输入, 粗暴地进行这样的工作: 对于每个深度缓冲中的像素, 采样周围3D空间中的一些点, 投影回屏幕空间并比较采样点和深度缓冲中相同位置的深度值, 以此判断采样点是在面前(没被遮挡)还是在面后(遇到一个遮挡体). 这样经过对深度缓冲的采样, 平均遮挡体的距离后得出就得到了一个遮闭缓冲. 但是这种方式存在一些问题(如自遮闭, 光环), 之后我会说明.
这里我叙述的算法的所有计算都是在2D空间中进行, 不需要进行投影变换. 它用到了每个像素的位置和法线缓冲, 所以如果你已经使用了延迟渲染的话, 一半的工作已经完成了. 如果没有, 你可以从深度缓冲中重建位置信息, 或者直接把每个像素的位置保存到浮点缓冲中去. 如果你是第一次实现SSAO, 那么我建议后者, 因为在这里我不会讲解如何从深度缓冲中去重建位置信息. 无论是哪种方式, 在接下来的文章中, 我会假设你已经有这两个缓冲可用. 另外, 位置和法线需要是视图空间的.
接下来我们要做的事情就是: 使用位置和法线缓冲生成一个每像素对应一个分量的遮闭缓冲. 怎么使用遮闭信息的决定权在你; 通常的方法是从场景的环境光照中减去它, 但是如果你愿意的话, 也可以用来做一些非真实(NPR, non-photorealistic)渲染效果.

算法

对场景中的任意像素, 可以这么计算它的环境遮闭: 把所有周围的像素当做小球, 计算它们的贡献度之和. 为了简单起见, 我们把所有的小球当成点: 遮挡者仅仅是没有朝向的点, 那么被遮挡者(接受遮闭的像素)只是一个<位置, 法线>对.
因此, 每个遮挡者的遮闭贡献度取决于两个因素:
到被遮挡者的距离“d”.
被遮挡者的法线”N”与两者(遮挡者与被遮挡者)之间向量”V”的夹角.

有了这两个因素, 一个计算遮闭的简单公式就出来了:
Occlusion = max( 0.0, dot( N, V) ) * ( 1.0 / ( 1.0 + d ) )
第一项max( 0.0, dot( N,V ) ), 直觉上来说就是位于被遮挡者正上方的的点比其它点的贡献度更大. 第二项的作用是按距离线性衰减效果, 当然你也可以选择使用平方衰减或其它衰减函数, 但凭个人喜好了.

这个算法非常简单: 从当前像素周围采样一些邻近点, 用上面的公式统计出遮闭贡献度. 为了收集遮闭, 我使用45o和90o时旋转的4次采样 (<1,0>,<-1,0>,<0,1>,<0,-1>), 并且使用一张随机法线纹理做镜像.
一些小技巧可以加速计算: 如使用一半大小的位置和法线缓存, 当然如果你愿意的话, 同时也可以对最后的SSAO缓存应用一个双向的模糊以减少采样产生的噪点. 注意这两个技巧是可以应用于任何SSAO算法的.
这个屏幕空间的方案与 “Hardware Accelerated Ambient Occlusion Techniques on GPUs” [1]十分相似, 主要是采样模式和AO函数的不同. 另外也可以理解成“Dynamic Ambient Occlusion and Indirect Lighting” [2]的图像空间版本.
代码中有些值得提下的细节:

半径除以p.z, 按到摄像机的距离进行了缩放. 如果你忽略这个除法, 所有的屏幕上的像素会使用同样的采样半径, 输出的结果就失去了透视感.
在for循环中, coord1是位于90o的原始采样坐标, coord2是相同的坐标, 只不过旋转了45o.
随机纹理包含了随机的法线向量, 所以这是你的平均法线贴图. 下面这张是我使用的随机法线纹理:

它被平铺到整个屏幕, 被每个像素使用下面的纹理坐标采样:
g_screen_size * uv / random_size
“g_screen_size” 包含了屏幕的宽和高(像素单位), “random_size”是随机纹理的大小(我使用的是64x64). 采样出的法线用来镜像for循环中的采样向量, 以此获得每个屏幕像素各不相同的采样模式. (详见参考文献中的“interleaved sampling”)
最后, shader减少到只需要遍历几个遮挡者, 为它们调用我们的AO函数, 累积出最后的结果. 其中共有4个artist变量:
g_scale: 缩放遮挡者和被遮挡者之间的距离.
g_bias: 控制被遮挡者所受的遮挡圆锥宽度.
g_sample_rad: 采样半径.
g_intensity: AO强度.
当你调节它们同时观察效果的变化, 可以很直观地达到想要的效果.

‘肆’ vray帧缓冲区的作用

Vray的渲染而改变内容的那一部分图形内存区域叫做帧缓存(frame buffer)。

一个支持Vray渲染的窗口 (即帧缓存) 可能包含以下的组合:
· 至多4个颜色缓存
· 一个深度缓存
· 一个模板缓存
· 一个积累缓存
· 一个多重采样缓存
为了能够执行双缓存构架,大多数图形硬件同时支持前后缓存。这将允许应用程序在显示前缓存(可见的)的时候渲染到后缓存(离屏缓存)。当渲染结束的时候,这两个缓存进行交换,以便已经完成渲染的缓存像前缓存一样进行显示,这样渲染就能在后缓存重新开始了。一旦使用双缓存,在绘制过程当中用户将不能看到图像。这种技术通常被用来实现实时交互的平滑动画。
如果为左眼和右眼各实现一个颜色缓存的话,那么就可以支持立体视觉效果了。双缓存技术由前后缓存来支持。因此一个双缓存的立体视觉将会有4各颜色缓存:前左,前右,后左,后右。一个普通的(非立体的)双缓存窗口将会仅仅有前后两个缓存。一个单缓存的窗口将会只有一个缓存。
如果绘制3D对象时需要剔除隐藏表面的话,深度缓存是必要的。这个缓存在每个象素上存储了显示对象的深度值。当绘制附加对象的时候,会在每个象素上进行深度比较,这样就能决定新的对象是否可见。
模板缓存用来进行复杂的掩模(masking)操作。一个复杂的形状可以存储在模板缓存里,然后绘制子序列操作可以使用模板缓存里的内容来决定是否更新象素。
积累缓存是一个颜色缓存,不过典型地它有比颜色缓存更高的精度。这就允许一些图像通过积累产生一些合成的图像。比如说一个作用就是可以在积累缓存里对一个对象随着他的运动绘制一些帧数。在积累缓存中的象素除以帧数以后,结果图像就展现出了运动模糊效果。相似的技巧也可以用来模拟景深效果以及高质量的全屏抗锯齿。
而通常的,当一个对象被绘制的时候,对于某个图元是否影像屏幕上的象素,会做一个单独的决议。多重采样缓存正是这样一个缓存,它允许每个渲染的对象在象素内被采样多次,以进行高质量的全屏抗锯齿,而不必对这个对象渲染多次。每个象素内的采样包括:颜色,深度,模板信息。每个象素采样的次数当然是必须的。当窗口包含多重采样缓存的时候,它将不回包括单独的深度或者是模板缓存。随着对象的渲染,颜色样本会被组合生成一个单一的颜色值,然后这个颜色值被传递,并写入到颜色缓存里。因为他们包括窗口中每个象素的多个颜色、深度以及模板样本(通常是4,8或者是16),因此多重采样缓存会消耗相当数量的离屏缓存。

‘伍’ n卡的渲染延迟是什么

n卡的渲染延迟指的是英伟达显卡的画面所导致的与游戏中发生的动作之间的延迟。

延迟着色的基本原理是,通过MRT(multiple render targets)将几何体(geometry)渲染到屏幕空间,渲染过程并不包括光照着色(light shading),深度缓冲。

法向量缓冲以及颜色缓冲作为不同的缓冲区被写入,这些缓冲区能够提供足够的信息使Fragment Shader每一个光源针对每一个像素完成光照计算。

在GTC 2020主题演讲中,NVIDIA宣布推出Ampere架构,这是NVIDIA发布的第八代GPU架构,包含超过540亿个晶体管,性能相较于前代提升了高达20倍,也是NVIDIA 8代GPU历史上最大的一次性能飞跃。

NVIDIA A100是首款基于NVIDIA Ampere架构的GPU。作为一款通用型工作负载加速器,A100还被设计用于数据分析、科学计算和云图形。

‘陆’ 游戏渲染延迟多少算正常

游戏渲染延迟60FPS算正常,满足基本要求,100+FPS是流畅,高质量要110-120左右。换个好电脑,基本要求达到还是不难的。

只要FPS大于等于60就算正常,画面会很流畅的。延迟越低越好,跟网速有关,一般在30-60之间为佳。游戏中ping值正常,FPS高达300左右,但是画面却很卡。显卡性能非常好,可以一秒钟输出300帧左右的图像,但是普通显示器刷新率比较低,一般为60Hz。

延迟着色的基本原理是,通过MRT(multiple render targets)将几何体(geometry)渲染到屏幕空间,渲染过程并不包括光照着色(light shading),深度缓冲。

法向量缓冲以及颜色缓冲作为不同的缓冲区被写入,这些缓冲区能够提供足够的信息使Fragment Shader每一个光源针对每一个像素完成光照计算。

‘柒’ 虚幻4怎么延迟改变材质

首先在看这个系列之前,你需要具备以下:
(1)至少要敲过简单的渲染器,不管是拿dx敲还是拿gl敲或者vk之类的。
(2)对虚幻引擎有一定了解,对虚幻的渲染有一定了解。可以看我前几篇文章,或许可以有所帮助。
(3)C++基础。其实本人c++水平也是一般般(常常受到公司程序大牛的鄙视,不过我是美术)。
(4)至少一块RTX显卡可以用来做实时光线追踪(2019年)
随着引擎版本的更新,后续会逐步加入新版本。那么下面就正式开始吧!
【概览虚幻4渲染管线】
首先,虚幻有很多个管线的。Mobile管线和Deferred管线。首先找到
在这个函数里你将会看到很多熟悉的函数名称
虚幻就是通过调用这些函数来一步步绘制的。是不是很眼熟?这个就是各大论坛啦,博客啦讲的虚幻渲染流程的真面目。
下面就是官方的DrawOrder了。那么这个顺序是怎么来的呢。就是上面那个函数的调用顺序。
再打开这个Render函数,你就将看到延迟渲染一帧所调用的各个函数。(反正我看了半天就看到个大概的渲染顺序之外,还是啥也不知道)
那么当我们把一个模型托到场景里,这个模型被渲染出来的整个流程到底是什么样的呢?这个流程其实是非常庞大的。下面我就来一个一个拆分。
(1)第一步:资源准备阶段。这个阶段包括顶点缓冲区的准备,索引缓冲区的准备。这一步由场景代理管理完成。当然从磁盘里读取模型资源这些就涉及到StaticMesh这些了。想了解这一步可以去看我以前的博客,或者直接去看UPrimitiveComponent,UMeshComponent,UStaticMeshComponent,UCableComponent,UCustomMeshComponent。当你把这些源码全部研究一遍后,这个阶段算是了解了。这个阶段我不打算再描述了,因为已经有了很多现成的代码了。
(2)第二步就是shader资源的准备了,这个又是一个非常大的话题了。可以去看我以前关于给改材质编辑器和加shadingmode的文章便可以有个大概的了解。这一步我还会进一步阐述。
(3)第三步就是绘制了。
我们先不看Render函数那些复杂的调用,我们把精力先集中到shader层面来。一张画面是怎么开始绘制的呢?

通过这个我们便能知道一个大概的绘制流程(千万别以为虚幻只有这几步,不过主要的大概的流程是这样)。先绘制那些深度啊,初始化视口啦我们先不管。我们来看下这个BasePass。这个BasePass干的事情就是把GBuffer画出来。
这里就是像素着色器的入口。绘制完这一步后,我们就有了GBuffer然后再绘制剩下的。环境遮罩骤就先不说了。来看看最重要的光照部分。
光照部分的入口在这里:
虚幻的TiledDeferredLighting的渲染方式。不知道这个的去看毛星云的RTR3的博客的光照那节,讲得特别好。这里给个传送门:
https://blog.csdn.net/poem_qianmo/article/details/77142101
这里会调用
GetDynamicLighting这个函数会调用
这里会接着调用
看到这里就很熟悉了,看过前面我修改shadingmode的博客应该会对这里很熟悉。
lighting绘制完了之后就会绘制一些反射啊之类的东西了,然后就是透明物体啊后期啊。这些后面会慢慢分析他们。我们先把两个最重量级的研究了。
接下来我们研究一下fog渲染阶段。找到FogRendering.cpp你就会发现,其实绘制fog的是一个globalshader。前面绘制各个物体的是materialshader。
你会发现绘制fog的是一个globalshader。虚幻一共有这么几种shader:Globalshader materialshader和meshshader。
这篇博客只是一个概述性和引导性的。只是说明一下虚幻绘制的一个大概情况。下一卷我将演示一下怎么自己写个shader,引擎识别它,编译它,然后如何cpu和gpu进行信息交流的
4.20的Unreal渲染模块有了较大改动。
主要是为了配合引擎新增特性和性能优化。不过大体上的流程还是和上个版本的保持一致。
为了给LTC让道,所以shader做了大面积重构。
ShadingModel改为了IntergrateBxDF
下面会对绘制流水线详细写一遍,由于量巨大所以我会慢慢更新。
(1)【InitView】
引擎代码注释写得非常简单:Initialize scene's views.Check visibility, build visible mesh commands, etc.
这是渲染管线的开始,这步是为渲染管线准备绘制当前帧所需要各种资源。后面的管线就是判断一下画不画,绑定一下状态和RT然后就画画画就好了。这一阶段做的事情非常多也非常杂。首先来看看一些主要的
ComputeVisibility
可见性剔除有很多种技术,引擎会使用多种方法进行组合剔除,把没必要渲染的东西剔除干净,最大限度在渲染之前就做到最省。
虚幻提供了几种剔除方法
他们各有优劣,可以根据不同平台和情况进行选择。
VisibilityMap
在后面会把视口中可见性属性是非可见的物体剔除掉。
PrecomputedVisibilit
在场景中可以使用预烘焙的可见性数据。
如果当前视口场景中有可见性烘焙数据就会启用可见性烘焙的剔除方式
ViewFrustomCulled
做完前面的步骤后,还会进行视锥体剔除,并且大部分情况下,视口会使用视锥体剔除
进行视锥体剔除后可以减少大部分没必要绘制的图元
这时再配合各种其它的剔除方法就可以进一步剔除
而这里的“其它的剔除方法”包括但不限于PrecomputedVisibility,Distance,DynamicOcclusion
DistanceOcclusion
不在距离范围内就不绘制,非常简单有效的绘制方式。这种剔除方式挺适合地面上摆的小物件,摆的一些decal或者小道具,对大型建筑不适合。
Hardware Occlusion Queries
硬件的可见性剔除。这种方法将每帧的可见性检查作为每个Actor的查询发出。 Actor的可见度在一帧之后被回读 - 如果相机移动得非常快,有时会产生不利影响,导致它们“弹出”。 硬件遮挡的成本随着在GPU上执行的查询的数量而变化。 使用距离和预计算可见性方法可以减少GPU每帧执行的查询次数。
在各种剔除后,在InitView的最后会根据这些数据建立MeshPass
(2)【EarlyZ-PrePass】
EarlyZ由硬件实现,我们的渲染管线只需要按照硬件要求渲染就可以使用earlyz优化了,具体步骤如下:
(1)首先UE4会把场景中所有的Opaque和Mask的材质做一遍Pre-Pass,只写深度不写颜色,这样可以做到快速写入,先渲染Opaque再渲染Mask的物体,渲染Mask的时候开启Clip。
(2)做完Pre-pass之后,这个时候把深度测试改为Equal,关闭写深度渲染Opaque物体。然后再渲染Mask物体,同样是关闭深度写,深度测试改为Equal,但是这个时候是不开启clip的,因为pre-pass已经把深度写入,这个时候只需要把Equal的像素写入就可以了。
关于EarlyZ的具体详解可以去看参考文章【1】
首先渲染prepass的第一步肯定是渲染资源的准备啦。primitive资源会在InitView的时候准备好。
然后会再BeginRenderingPrePass函数中设置各种绘制管线的绑定,包括关闭颜色写入,绑定Render target
然后再调用draw之前会把各种UniformBuffer和渲染状态设置好
然后调用draw
最后完成PrePass的绘制
(3)【ShadowDepthPass】
根据不同的灯光类型会绘制不同种类的shadowmap。总的来说绘制shadowmap的时候不会使用遮挡剔除。
Unreal渲染shadowmap目前我就找到个视锥剔除
shadowdepthpass可能是在basepass之前,也可以是之后,具体看EarlyZ的方式
我们的灯光种类繁多大致可以分为两类,一类使用2Dshadowmap的,一类使用Cubemapshadowmap的
上图的1部分就是渲染2DshadowMap,2部分渲染的就是Cubemapshadowmap,这一步只是渲染出shadowmap供后面的Lightingpass使用。
(4)【BasePass】
BasePass使用了MRT技术一次性渲染出GBuffer。
再上一次GBuffer的数据分布
BasePass把GBuffer渲染出来之后就可以供后面的LightingPass使用了。我们的材质编辑器再Surface模式下也是在生成MaterialShader为BasePass服务
这部分可以去看看我的材质编辑器篇有详细介绍。
也是通过一系列设置绑定渲染状态资源等,最后调用dispatchdraw
可以注意到,MRT0是SceneColor而不是BaseColor
Scene在BasePass中做了简单的漫反射计算
这一步用到了,这个测试场景我是烘焙过的,我把烘焙数据去掉,SceneColor其实是这样的:
啥也没有黑的
BasePass会在这个阶段把预烘焙的IndirectLiting计算到SceneColor这张RT上供后面的pass使用
(5)【CustomDepthPass】
上面的图渲染了一个球的customdepth(在红圈处可以看到一个球,可能不是很明显哈)。CustomDepth没啥特别的,就是把需要绘制CustomDepth的物体的深度再绘制一遍到CustomDepthBuffer上。
(6)PreLightingPass
虚幻封装了一套方便画PostPass的机制,后面的绘制SSAO,Lighting,SSR,Bloom等各种pass都是用的这逃Context的机制。
PreLighting这步主要是在用前面的GBuffer算decals和SSAO为后面的Lighting做准备。
SSAO使用的是FPostProcessBasePassAOPS这个C++shader类。
对应的USF是PostProcessAmbientOcclusion
并且使用Computeshader来加速计算。
(7)【DirectLightPass】
LightPass也非常复杂,整个pass的代码有几千行,shader代码也有几千行非常恐怖的系统。我们先找到入口函数:
(1)方向光
根据不同的情况,使用不同的渲染策略
渲染不同情况下的灯光大体分类如下。还会根据不同的渲染方式分类。
比如一般的方向光:
在渲染方向光的时候因为不需要考虑分块,所以直接把每盏灯挨个画出来就可以了
下面我只放了一盏方向光
下面我放三盏方向光:
(2)TileDeferredLighting
如果灯光不渲染阴影,并且灯光没用IES并且灯光数目达到80盏以上(4.22)并且启用了TileDeferred管线,那么虚幻4就会使用TileDeferredLight来计算光照,虚幻实现TileDeferrdLight使用的是一个Computeshader
有很多灯光使用的潜规则。
(8)【ScreenSpaceReflectionPass】

(9)【TranslucencyPass】
透明物体会放在最后渲染,但是在后期的前面。需要看是否在DOF(景深)后合并。
对于这个上图的那个场景来说,透明物体渲染的buffer是长下面这样的:
最后在后期中组合
如果没有启用r.ParallelTranslucency透明物体只能挨个渲染。
如果启用了就可以走上面的并行渲染分支。
透明物体的渲染在实时渲染中一直比较迷,会有各种问题。比如排序等等。在默认情况下是走AllowTranslucentDOF的。AllowTranslucentDOF是什么意思呢,代码的注释里有解释。
Translucent物体的渲染有几种模式:
这里的代码我们在BasePassPixelShader.usf里能找到
对于非透明物体来说basepass是渲染GBuffer的,但是对于透明物体来说,BasePass是渲染基础的+Lighting的,会在这里一次性渲染完,如果我们想改透明物体的shading方式,就需要用在这里改了。

‘捌’ Vray的帧缓存有什么用

Vray的渲染而改变内容的那一部分图形内存区域叫做帧缓存(frame buffer)。

一个支持Vray渲染的窗口 (即帧缓存) 可能包含以下的组合:
· 至多4个颜色缓存
· 一个深度缓存
· 一个模板缓存
· 一个积累缓存
· 一个多重采样缓存
为了能够执行双缓存构架,大多数图形硬件同时支持前后缓存。这将允许应用程序在显示前缓存(可见的)的时候渲染到后缓存(离屏缓存)。当渲染结束的时候,这两个缓存进行交换,以便已经完成渲染的缓存像前缓存一样进行显示,这样渲染就能在后缓存重新开始了。一旦使用双缓存,在绘制过程当中用户将不能看到图像。这种技术通常被用来实现实时交互的平滑动画。
如果为左眼和右眼各实现一个颜色缓存的话,那么就可以支持立体视觉效果了。双缓存技术由前后缓存来支持。因此一个双缓存的立体视觉将会有4各颜色缓存:前左,前右,后左,后右。一个普通的(非立体的)双缓存窗口将会仅仅有前后两个缓存。一个单缓存的窗口将会只有一个缓存。
如果绘制3D对象时需要剔除隐藏表面的话,深度缓存是必要的。这个缓存在每个象素上存储了显示对象的深度值。当绘制附加对象的时候,会在每个象素上进行深度比较,这样就能决定新的对象是否可见。
模板缓存用来进行复杂的掩模(masking)操作。一个复杂的形状可以存储在模板缓存里,然后绘制子序列操作可以使用模板缓存里的内容来决定是否更新象素。
积累缓存是一个颜色缓存,不过典型地它有比颜色缓存更高的精度。这就允许一些图像通过积累产生一些合成的图像。比如说一个作用就是可以在积累缓存里对一个对象随着他的运动绘制一些帧数。在积累缓存中的象素除以帧数以后,结果图像就展现出了运动模糊效果。相似的技巧也可以用来模拟景深效果以及高质量的全屏抗锯齿。
而通常的,当一个对象被绘制的时候,对于某个图元是否影像屏幕上的象素,会做一个单独的决议。多重采样缓存正是这样一个缓存,它允许每个渲染的对象在象素内被采样多次,以进行高质量的全屏抗锯齿,而不必对这个对象渲染多次。每个象素内的采样包括:颜色,深度,模板信息。每个象素采样的次数当然是必须的。当窗口包含多重采样缓存的时候,它将不回包括单独的深度或者是模板缓存。随着对象的渲染,颜色样本会被组合生成一个单一的颜色值,然后这个颜色值被传递,并写入到颜色缓存里。因为他们包括窗口中每个象素的多个颜色、深度以及模板样本(通常是4,8或者是16),因此多重采样缓存会消耗相当数量的离屏缓存。

‘玖’ 渲染延迟多少算正常

延迟渲染技术带来一个很重要的缺点就是不能使用基于硬件实现的多重采样抗锯齿功能。因为渲染过程发生在第二步,所以我们在第二步需要多个样本。但是,在第二步我们只有每一个像素的一个样本。