
1. 项目概述为什么我们需要跨管线掌握景深如果你在Unity里做过一段时间的美术或者技术美术大概率会对“景深”这个效果又爱又恨。爱的是它几乎是提升画面电影感、引导玩家视觉焦点最直接有效的手段之一恨的是在不同的渲染管线里它的实现方式、参数调节和性能开销简直是天差地别。我见过太多项目从Built-in管线迁移到URP或HDRP时之前调得漂漂亮亮的景深效果直接“罢工”或者变得性能堪忧美术同学不得不从头再来。所以这个“跨管线实现指南”的核心价值就在这里它不是教你如何在某一个管线里把景深开关打开而是帮你建立起一套可迁移的知识体系。让你明白在Built-in、URP、HDRP这三种主流管线下景深效果背后的原理差异、实现路径和调优心法。无论你是接手一个老项目还是为一个新项目选择技术方案或者单纯想深入理解Unity的后处理栈这篇文章都能让你避开我踩过的那些坑直达效果与性能的平衡点。简单来说我们将从最经典但已“退役”的Built-in管线讲起理解其实现原理作为基础然后深入到目前应用最广泛的URP通用渲染管线掌握其轻量高效的景深方案最后攻克代表高品质的HDRP高清渲染管线解锁其基于物理的、电影级的高质量景深。你会发现虽然表面都是“模糊”但内核逻辑完全不同。2. 核心原理与管线差异从“后处理滤镜”到“物理模拟”在深入实操之前我们必须先理清一个根本问题为什么不同管线的景深实现起来不一样这源于它们截然不同的设计哲学和渲染架构。2.1 Built-in管线传统的后处理堆栈时代在Built-in管线也称前向渲染管线中景深是一个标准的后处理效果。它的工作流程非常直观渲染场景摄像机完成场景的颜色和深度缓冲渲染。应用后处理通过OnRenderImage方法或传统的Post Processing Stack v2插件对上一帧的渲染结果一张纹理进行处理。基于深度的模糊景深效果的核心是深度纹理。系统根据当前像素的深度值即距离摄像机的远近与一个设定的“对焦距离”进行比较。距离对焦平面越远的像素其模糊半径Kernel Size就越大。然后通过一个高斯模糊或散景模糊算法对原图进行采样和混合生成最终的模糊效果。Built-in景深的特点实现简单概念清晰易于理解。很多自定义Shader的教程都以此为基础。控制直观参数如对焦距离、模糊半径、光圈形状散景通常直接可调。性能开销相对固定模糊采样次数和范围决定了开销但缺乏精细的LOD控制。已停止更新Unity官方已不再为Built-in管线添加新功能这意味着一些更先进的算法和优化如TAA结合的抗锯齿可能无法使用。注意虽然Built-in管线逐渐淡出但理解它的原理至关重要。它揭示了景深最本质的“基于深度图的后处理模糊”逻辑这是所有高级实现的基础。2.2 URP管线模块化与效率优先URP的设计目标是跨平台高性能。它的景深实现被整合进了URP内置的渲染器特性Renderer Features和卷Volume系统中。你不再需要单独的后处理堆栈资产而是在URP渲染器资产中直接启用“Depth Of Field”这个后处理效果。URP景深的进化集成化效果直接作为URP包的一部分无需额外导入资源包但需在Package Manager中安装Universal RP和Post Processing。基于Volume框架效果通过Volume组件在场景中局部或全局应用可以混合、叠加非常适合制作不同区域的视觉效果如进入房间后景深变强。算法优化URP通常使用一种称为“散景模糊Bokeh Blur”的高效算法。它不像传统高斯模糊那样均匀模糊所有区域而是更智能地模拟镜头光圈形状在焦外高光点产生漂亮的光斑散景在非高光区域则使用性能更优的模糊方式。分级质量URP的景深设置通常提供“性能Performance”、“质量Quality”、“最高质量High Quality”等选项让你在移动端和PC端之间灵活权衡。URP与Built-in的核心区别URP将景深从“一个独立的后处理滤镜”变成了“渲染管线的一个可配置特性”使其更深度地集成到渲染流程中从而有机会做更多底层优化如与渲染目标、抗锯齿的配合。2.3 HDRP管线物理正确与电影级质量HDRP是为追求极致视觉效果的PC/主机平台设计的。它的景深不仅仅是“一个效果”而是对真实世界摄像机光学特性的物理模拟。HDRP景深的质变物理摄像机驱动这是最大的不同。在HDRP中你可以直接将景深的Focus Mode设置为“Use Physical Camera”。此时对焦距离、光圈大小Aperture、焦距等参数完全由摄像机组件上的物理属性驱动。这意味着如果你有摄影知识可以直接套用真实世界的参数如f/2.8的光圈效果会极其逼真。高质量算法HDRP的景深算法更为复杂和精确。它支持前后景分开控制Near Blur, Far Blur可以独立设置前景和背景模糊的开始/结束距离、采样数量和最大模糊半径。这在模拟浅景深、突出特定物体时非常有用。散景形状自定义通过Blade Count光圈叶片数和Curvature叶片曲率参数你可以精确控制焦外光斑的形状从完美的圆形到多边形的星芒创造出独特的视觉风格。分辨率与过滤质量HDRP允许你选择景深效果的计算分辨率如全分辨率、半分辨率、四分之一分辨率以及是否启用高质量的三次过滤High Quality Filtering为性能敏感的场景提供了精细的调控手段。HDRP的核心思想它不再满足于“看起来像”模糊而是要“计算出来”基于物理光学模型的模糊。这带来了无与伦比的真实感和艺术控制力但同时也对性能提出了更高要求并且要求使用者对摄影基础有更深的理解。3. Built-in管线景深实现经典方案的回顾与实操尽管Built-in管线已非新项目首选但大量存量项目、学习资源和自定义Shader开发仍基于此。掌握它是理解景深原理的必修课。3.1 使用传统Post Processing Stack v2这是Unity官方早期为Built-in管线提供的标准后处理解决方案。虽然已归档但依然稳定可用。实操步骤导入资源包通过Package Manager从Unity Registry中搜索并安装Post Processing版本通常为2.x或3.x这里指v2风格。创建后处理配置文件在Project窗口右键 - Create - Post-processing Profile。这会创建一个.asset文件。配置摄像机选中主摄像机。添加Post-process Volume组件。将刚创建的Profile文件拖入组件的Profile槽位。勾选Is Global使其影响整个场景。启用景深在Inspector中点击Post-process Volume组件下的Add effect...- Unity - Depth of Field。现在你可以调整景深的各项参数了。关键参数解析Focus Distance对焦平面的距离。你可以手动拖动滑块也可以启用Use Camera FOV来自动计算。Aperture光圈值f-stop。数值越小如f/1.4光圈越大景深越浅模糊范围越大。这是模拟摄影的关键参数。Focal Length焦距。较长的焦距如85mm会压缩空间感产生更明显的背景模糊。Kernel Size内核大小。决定模糊采样范围直接影响模糊强度和性能。通常有Small、Medium、Large等选项。避坑心得性能注意Kernel Size设置为Large或Very Large时在移动端或低配PC上可能造成明显的帧率下降。在移动项目上务必谨慎使用或考虑完全关闭。与抗锯齿的冲突如果同时启用了MSAA等抗锯齿可能会与后处理效果尤其是基于深度的产生冲突导致边缘闪烁或模糊异常。通常建议在后处理场景中使用基于摄像机的抗锯齿如FXAA、SMAA或TAA。深度纹理必须开启景深依赖深度缓冲。确保你的摄像机或Graphics Settings中启用了Depth Texture。如果景深不生效首先检查这里。3.2 手动编写简易景深Shader原理理解为了彻底搞懂原理我们可以尝试写一个极度简化的景深Shader。这能让你明白所谓的“模糊”是如何与深度信息结合的。Shader Custom/SimpleDepthOfField { Properties { _MainTex (Base (RGB), 2D) white {} _DepthTex (Depth Texture, 2D) white {} _FocusDistance (Focus Distance, Float) 10.0 _FocusRange (Focus Range, Float) 5.0 _BlurSize (Blur Size, Float) 1.0 } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include UnityCG.cginc struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; sampler2D _DepthTex; float _FocusDistance; float _FocusRange; float _BlurSize; float4 _MainTex_TexelSize; // 每个纹素的大小 v2f vert (appdata v) { v2f o; o.vertex UnityObjectToClipPos(v.vertex); o.uv v.uv; return o; } fixed4 frag (v2f i) : SV_Target { // 1. 采样当前像素的颜色和深度 fixed4 originalColor tex2D(_MainTex, i.uv); float depth tex2D(_DepthTex, i.uv).r; // 将深度值转换为线性视空间深度简化版实际更复杂 float linearDepth LinearEyeDepth(depth); // 2. 计算模糊系数基于深度与对焦距离的差值 float depthDiff abs(linearDepth - _FocusDistance); float blurFactor saturate(depthDiff / _FocusRange); // 0到1之间 // 模糊系数越大采样范围越大 float currentBlurSize blurFactor * _BlurSize; // 3. 简单的均值模糊仅作演示实际用高斯模糊 fixed4 blurredColor originalColor; int sampleCount 0; // 在周围像素采样 for (int x -2; x 2; x) { for (int y -2; y 2; y) { float2 offset float2(x, y) * _MainTex_TexelSize.xy * currentBlurSize; blurredColor tex2D(_MainTex, i.uv offset); sampleCount; } } blurredColor / sampleCount; // 4. 根据模糊系数混合原始颜色和模糊颜色 return lerp(originalColor, blurredColor, blurFactor); } ENDCG } } FallBack Diffuse }这段代码说明了什么它需要一张深度图_DepthTex通常由摄像机渲染后提供。它计算每个像素距离对焦平面有多远depthDiff。根据这个距离决定一个模糊强度blurFactor和采样范围currentBlurSize。最后根据模糊强度将原始清晰的像素颜色和周围采样模糊后的颜色进行混合。这就是景深最核心的逻辑。当然生产级的实现会复杂得多包括高性能的模糊算法如双重模糊、散景模拟、抗锯齿处理等但万变不离其宗。4. URP管线景深实战轻量高效的配置之道URP是目前Unity项目的绝对主流。它的景深配置流程标准化程度很高但要想调出好效果仍需理解其参数内涵。4.1 基础配置与启用确保URP环境通过Package Manager安装Universal RP包并创建一个URP Asset右键 - Create - Rendering - URP Asset (with Universal Renderer)。将其赋给Project Settings - Graphics中的Scriptable Render Pipeline Settings。启用后处理在URP Asset关联的Renderer如Universal Renderer Data中确保Post Processing选项是勾选的。创建Volume并添加效果在场景中创建一个空物体添加Volume组件。点击New创建一个新的Volume Profile或使用一个已有的。在Volume组件上点击Add Override-Post-processing-Depth of Field。完成以上步骤景深效果就已经应用到该Volume影响的摄像机了。如果Volume是Is Global则影响所有摄像机。4.2 核心参数深度解析URP的Depth of Field组件提供了几个关键模式对应不同的控制逻辑Mode: Gaussian使用经典的高斯模糊。性能较好但效果相对平淡缺乏光学特征如散景光斑。参数简单只有Start模糊开始距离、End模糊结束距离、Max Radius最大模糊半径。适合移动端或风格化渲染。Mode: Bokeh推荐使用。模拟镜头光圈形状能产生高质量的焦外散景。这是URP景深的精髓。Focus Distance: 对焦距离。Aperture: 光圈值。这是最重要的艺术控制参数。f值越小如2.8光圈越大景深越浅模糊越强。Focal Length: 焦距。与Built-in中类似控制视野和空间压缩感。Blade Count: 光圈叶片数。控制散景光斑的形状圆形、六边形、八边形等。叶片数越多光斑越接近圆形。Blade Curvature: 叶片曲率。值越大叶片越弯曲散景光斑的边缘越圆滑。Blade Rotation: 叶片旋转角度。实操技巧如何快速调出电影感先定焦点将Focus Distance对准你想要玩家关注的核心物体比如角色面部或一个关键道具。开大光圈将Aperture调到较低的值如f/2.0或f/1.8立刻获得强烈的背景虚化。调整焦距根据构图需要调整Focal Length。长焦如85mm能更好地隔离主体但会压缩空间广角如24mm则能保留更多环境信息。微调散景通过Blade Count和Curvature为高光点如灯光、反光添加风格化的光斑形状这是提升画面“高级感”的秘诀。4.3 URP景深性能优化指南URP景深在移动端使用时必须精打细算。以下是我的实战优化清单优先使用Bokeh (Fast) 模式URP通常提供一个Bokeh (Fast)选项它使用更优化的采样算法在视觉质量损失不大的情况下性能显著优于标准Bokeh模式。在移动平台上无脑选Fast模式。降低分辨率在URP Asset的Quality设置中可以降低渲染分辨率如设置为0.75倍。景深作为后处理效果其计算基于渲染分辨率降低分辨率能直接减轻GPU负担。配合FSR或DLSS等超分辨率技术可以在性能与画质间取得更好平衡。控制模糊半径Max Radius这是性能杀手。Max Radius决定了模糊采样的最大范围。在移动端尽量将其保持在较低水平如3-5。过大的半径10会导致采样数暴增。善用Volume混合不要全局使用高强度景深。利用Volume的Blend Distance和Weight只在特写镜头、室内场景等需要突出氛围的区域启用高强度的景深在开阔的室外场景则减弱或关闭它。注意透明物体景深基于不透明物体的深度缓冲。半透明物体如粒子、UI的渲染顺序在后处理之后因此不会被正确模糊。如果需要模糊UI需要额外的渲染层和自定义处理这非常消耗性能移动端应尽量避免。5. HDRP管线景深实战追求物理真实的艺术控制HDRP的景深是专业级的工具参数繁多但逻辑清晰。我们的目标是学会用摄影师的思维去使用它。5.1 物理摄像机工作流详解这是HDRP景深最强大也最推荐的工作流。它要求你的摄像机启用Physical Camera属性。配置流程启用Physical Camera在HDRP摄像机组件的General部分勾选Physical Camera。设置镜头属性Focal Length: 设置镜头的焦距如50mm标准镜头。Sensor Size: 设置传感器尺寸如全画幅的36x24mm。这会影响视野FOV。Aperture: 设置光圈值f-stop。这是控制景深虚化程度的核心。在Volume中配置景深添加Depth of Field覆盖。将Focus Mode设置为Use Physical Camera。此时Focus Distance参数将不再直接显示因为它由摄像机的对焦系统驱动。如何对焦在Use Physical Camera模式下你有两种对焦方式自动对焦使用摄像机的Focus Mode设置为Continuous或Single并指定一个Focus Target一个Transform。摄像机会自动计算到该目标的距离作为对焦距离。这在跟踪移动角色时非常有用。手动对焦将摄像机的Focus Mode设置为Manual然后直接调整Focus Distance参数。你也可以在Scene视图中看到摄像机上出现的对焦平面Gizmo直接拖动它来直观地对焦。为什么推荐物理模式因为它保证了视觉一致性。当你调整焦距Focal Length或光圈Aperture时景深的变化完全符合物理规律。例如将焦距从35mm切换到200mm即使物体在画面中的大小不变背景的虚化程度也会显著增加。这种 predictability可预测性对于电影级镜头语言的控制至关重要。5.2 高级参数Near Blur与Far Blur的独立控制HDRP允许你分别控制前景和背景的模糊这提供了无与伦比的艺术灵活性。Near Blur控制对焦平面前方物体的模糊。Start: 距离摄像机多近开始出现模糊。End: 距离摄像机多远时前景模糊达到最大强度。Sample Count: 采样数影响前景模糊的质量和性能。Max Radius: 前景模糊的最大半径。Far Blur控制对焦平面后方物体的模糊。参数同上。应用场景 想象一个镜头角色站在窗前对焦点在角色窗外是模糊的街景Far Blur窗玻璃上可能还有雨滴这些雨滴如果离镜头很近也可以被处理成前景模糊Near Blur。通过独立控制你可以让前景的雨滴模糊得柔和一些而让背景的街景模糊得更强烈从而创造出丰富的空间层次感。5.3 HDRP景深质量与性能的权衡表HDRP景深提供了多个质量杠杆。下表清晰地展示了如何根据项目需求进行配置参数/设置高质量电影/过场动画平衡质量PC游戏运行时性能优先主机/高端移动说明Focus ModeUse Physical CameraUse Physical Camera 或 ManualManualPhysical模式最真实但Manual在需要绝对控制时更直接。ResolutionFull ResolutionHalf ResolutionQuarter Resolution对性能影响最大。降到1/4分辨率性能提升显著质量损失在动态游戏中常可接受。High Quality Filtering启用视情况启用关闭启用后使用三次滤波模糊更平滑但消耗更大。Sample Count (Near/Far)8-105-73-5采样数直接影响模糊质量。前景采样可比背景略高因前景更易被注意。Max Radius (Near/Far)根据艺术需求通常 10通常 5限制最大模糊半径是控制性能的关键。避免无限制的极端模糊。Aperture Shape自定义 (Blade Count8)六边形 (Blade Count6)五边形或默认更多叶片数需要更多计算但散景更圆润美观。一个重要的性能技巧使用Volume优先级和混合。 在HDRP中你可以设置多个Volume并赋予不同的Priority。可以创建一个低优先级的全局Volume使用低质量的景深设置如Quarter Res。然后在需要特写的区域如对话镜头放置一个高优先级的局部Volume覆盖高质量设置如Half Res, High Quality Filtering。这样大部分时间运行的是高性能配置只在关键时刻才付出高质量的成本。6. 跨管线迁移策略与常见问题排雷当你需要将一个项目的景深效果从一条管线迁移到另一条时直接复制参数是行不通的。你需要的是策略和问题排查能力。6.1 从Built-in/URP迁移到HDRP这是最常见的升级路径。核心思想是从“数值控制”思维转向“物理模拟”思维。参数映射与转换对焦距离直接对应。在HDRP的Manual模式下设置相同的Focus Distance。模糊强度/光圈这是关键。在Built-in/URP中你可能用一个Blur Size或Aperture值来控制强度。在HDRP中你需要通过光圈值Aperture和焦距Focal Length共同作用来达到相似的虚化程度。一个粗略的起点是在HDRP中使用50mm焦距然后调整Aperture直到背景模糊程度看起来与之前“感觉”一致。可能需要配合调整Max Radius。散景形状如果原项目使用了自定义散景需要在HDRP中通过Blade Count和Curvature来近似模拟。工作流适应拥抱Volume系统放弃旧的Post-process Volume组件全面转向HDRP的Volume框架。学习物理摄像机花时间理解焦距、光圈、传感器尺寸之间的关系。网上有很多摄影的“景深计算器”可以帮助你从物理角度预判效果。6.2 从HDRP降级到URP这种情况较少但可能在针对低端平台时发生。核心是保留视觉感觉放弃物理精确性。效果近似HDRP中精细的前后景独立控制在URP中无法直接对应。你需要通过一个Focus Distance和Focus Range或Start/End来模拟一个整体的模糊过渡。HDRP的高质量散景在URP的Bokeh模式下可以较好地还原但可能需要降低Sample Count来保证性能。性能重估HDRP的高质量设置如Full Resolution High Quality Filtering在URP中可能根本不存在对应选项或者性能开销依然不可接受。必须根据URP的目标平台重新制定性能预算。6.3 高频问题与解决方案实录以下是我在项目和社区支持中反复遇到的典型问题问题1景深效果完全没有出现。排查步骤检查Volume是否生效确保摄像机在Volume的Collider范围内如果是局部Volume或Is Global已勾选。检查Volume的Weight是否大于0。检查后处理是否启用在URP/HDRP的渲染器资产中确认Post-processing已开启。检查深度纹理这是最常见的原因。在URP中检查摄像机或URP Asset的Opaque Texture设置深度信息包含其中。在HDRP中确保Frame Settings中Custom Passes或相关选项允许深度生成。检查抗锯齿某些抗锯齿如TAA可能与后处理有冲突。尝试切换为FXAA或关闭抗锯齿进行测试。问题2景深导致画面闪烁或边缘有光晕/黑边。原因与解决深度缓冲精度问题在远距离场景中深度值可能精度不足。尝试调整摄像机的远近裁剪平面Near/Far Clip Plane让远平面尽可能接近场景最远物体以优化深度值分布。半透明物体问题半透明物体不写入深度缓冲导致其边缘的景深计算错误。这是一个固有限制。对于重要的半透明物体如角色头发上的高光可能需要将其渲染到单独的层并用自定义方式处理。分辨率过低在HDRP中如果将Resolution设为Quarter且High Quality Filtering关闭在物体边缘容易产生锯齿状闪烁。可尝试升级到Half分辨率或轻微增加Max Radius。问题3移动设备上开启景深后帧率暴跌。性能优化组合拳首选URP Bokeh (Fast)模式。大幅降低分辨率在URP渲染器设置中将渲染缩放降至0.5-0.75。严格控制模糊半径确保Max Radius不超过5。使用动态开关写一个简单的脚本根据摄像机与主角的距离或游戏状态如战斗/探索来动态调整Volume的Weight甚至完全禁用景深。考虑替代方案对于极度性能敏感的场景可以考虑使用一个简单的径向模糊Radial Blur或自定义的屏幕空间遮罩来模拟“注意力集中”的效果而非全屏物理景深。问题4焦平面过渡非常生硬像一刀切。解决调整Focus RangeURP或Near/Far Blur的Start和End范围HDRP。让模糊有一个平滑的过渡区间而不是在某个距离上突然从清晰变成完全模糊。在HDRP中拉大End和Start之间的差值在URP中增加Focus Range的值。掌握这些跨管线的实现、调优和排错技巧意味着你不仅能在Unity中做出漂亮的景深效果更能让这个效果在任何技术环境下都稳定、高效地运行。这正是一名技术美术或图形程序员的核心价值所在——在艺术表现与技术约束之间找到那条最优的路径。