UDN
Search public documentation:

BokehDepthOfFieldCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 虚幻引擎3中的DirectX 11 >Bokeh(散景)景深
UE3 主页 > 后期处理特效 > Bokeh(散景)景深

散景景深


概述


以下是使用数码相机拍摄的真实世界的图片,显示了其中有些部分处于焦内有些部分处于焦外的物体。

PhotoReference.jpg

焦外部分构成了一个圆形,称为Bokeh(日语)。通过那些严重处于焦外的小亮物体可以看得更加清楚。

我们想模拟这种效果,并接受可以获得高效实时实现的近似效果。和其他很多景深渲染方法一样,我们在后期处理过程中对彩色图像实施这个处理。通过使用基于每个像素的景深信息和所谓的Circle of Confusion(散光圈)函数,我们可以计算某个图像部分应该具有的清晰程度和模糊程度。

BokehDOFTeaser.jpg

这个实时渲染的图像所描画的焦内的对象是清晰,焦外的对象是模糊的。Bokeh形状模拟5叶片镜头光圈。

激活Bokeh景深


注意: 这个功能需要几何体着色支持,目前仅针对Direct3D 11(如何激活它,可以在这里找到)实现了该功能。

打开激活的后期处理链,点击(或添加)Uber后期处理特效。在景深组中,您可以找到相关设置:

EditorEffect.jpg

请确保将 Type (类型) 设置为 "BokehDOF"。
Quality(质量) 允许您在质量和性能之间进行权衡,但是效果较小。理想情况下,该设置为Low(低级),仅当有明显效果差异并性能足够好时才提高质量。
BokehTexture 可以是任何2D贴图,但是理想情况下它应该:

  • 是灰度图 (正确的颜色边纹是依赖于屏幕位置的,但是添加颜色变换到图像上可以使其看起来像颜色边纹)。 *不大于128 x 128 (过大则浪费内存)。
  • 有黑边 (较大的方块渲染较大的贴图,通过双线性过滤Bokeh形状将具有抗锯齿效果)。
  • 是未压缩的或有亮度的。
  • 具有适当的亮度 (参照样本)。

Bokeh形状


美工人员可以在后期处理链中指定Bokeh贴图。以下图像展示了不同的贴图(左下角)如何影响渲染的图像:

BokehShapes.png

半透明


对于不透明对象来说,把景深作为后期处理来实施是非常好的,因为每个像素(或片段)有相关的深度。然而,半透明对象的渲染却不能和后期处理方法很好地协同使用。忽略这个问题,会导致半透明物体或者太清晰或者太模糊(由它们的背景决定)。

我们通过提供控制半透明对象是否受到景深影响的方法来解决了这个问题(不是材质设置,以后我们不需要DX11就可以进行这项操作):

SeparateTranslucency.jpg

另外,有一个新的材质节点 "DepthOfFieldFunction",它使您可以调整着色(比如,淡出或混合到一种模糊状态):

MaterialNode.jpg

已知限制(低级细节)

  • 因为该技术使用分辨率为原来一半的图像作为源,所以渗透到错误层中的明亮像素会有较小的失真。
  • 该特效可以和全屏抗锯齿(MSAA)协同工作,但是像素中非常亮的部分可能会渗透到错误的层中。可以通过在uberpostprocesseffect MSAA中提高采样来避免这个问题。 。
  • 没有处理多个层之间的遮挡。这会导致较小的颜色渗透。
  • 所有的焦外模糊效果都不会受到运动模糊的影响 (这意味着或者丢失运动模糊或者丢失 MotionBlurSoftEdge将会柔和其边缘的清晰轮廓)。

优化(低级细节)


为了获得更好的性能,该算法仅应用到半分辨率图像上,稍后再和全分辨率图像重新结合。重新结合的步骤是基于每个像素完成的,忽略MSAA(为了简化和性能)。在某些情况下,这会产生质量问题(可以通过禁用MSAA来验证)。

在当今的显卡上,当使用合理的较小的Bokeh半径时,性能是较好的。较大的半径将迅速导致渲染速度变慢(半径增加2倍,渲染的性能消耗要增加4倍)。

几何体着色器处理2x2的块。如果一个2x2的块的内容是合适的(在代码中定义了启发式功能),那么将仅产生整个块中的一个小块,否则它将为每个像素产生一个小块(总共4个小块)。以下图像显示了为什么某些区域仅使用一个小块渲染(绿色),而某些区域需要使用4个小块渲染(红色),其他东西显示为全分辨率场景颜色。

BokehDoFOptimized.jpg