中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

【URP】Unity[后處理(li)]景深DepthOfField

專欄-直達

Unity URP中的(de)(de)(de)景(jing)深(Depth of Field)是一種模(mo)擬(ni)真實(shi)相(xiang)機光(guang)學特(te)性的(de)(de)(de)后處理(li)(li)效果,通過模(mo)糊近處或遠處的(de)(de)(de)物體來突出焦(jiao)點(dian)區域,增強畫面層(ceng)次感和真實(shi)感。其發展經歷了從(cong)Built-in管線的(de)(de)(de)基礎實(shi)現到URP/HDRP的(de)(de)(de)物理(li)(li)化演進過程,早期采用高斯模(mo)糊近似,現代則引入散景(jing)(Bokeh)等(deng)更(geng)接近真實(shi)光(guang)學特(te)性的(de)(de)(de)算法。

核心作用

  • ?視覺引導?:突出主體對象,弱化背景干擾
  • ?增強真實感?:模擬攝影鏡頭物理特性
  • ?藝術表現?:通過散景光斑創造氛圍

實現原理

基于深度(du)緩沖區(qu)計算彌散圈(quan)(Circle of Confusion),通過(guo)多(duo)Pass模(mo)(mo)糊(hu)處理非焦點區(qu)域。URP提(ti)供兩種(zhong)模(mo)(mo)式:

  • ?高斯模式?:性能優先,僅支持遠場模糊
  • ?散景模式?:質量優先,模擬光圈葉片光學特性

Unity URP中的景深(Depth of Field)效果基于光學(xue)透鏡(jing)的物(wu)理特性模擬,其核心原理是通過計算混淆圈(Circle of Confusion, CoC)來實現虛實分層。

光學基礎原理

  • ?透鏡成像特性?:真實相機(ji)中,只有特定距離(焦平面)的(de)物(wu)體能清晰成(cheng)(cheng)像(xiang),其(qi)他距離的(de)物(wu)體會在(zai)傳感器(qi)上形成(cheng)(cheng)彌散圓斑(CoC),其(qi)直(zhi)徑(jing)與光(guang)圈大小成(cheng)(cheng)正比(bi)。URP通過高斯模(mo)糊或散景模(mo)式模(mo)擬這一現象,前者計(ji)算效率高但物(wu)理準(zhun)確(que)性(xing)較低,后者更接(jie)近真實光(guang)學效果。

  • ?CoC計算?:每個像素的(de)模糊程(cheng)度取決于其深度值(zhi)與焦點距(ju)離(li)的(de)差值(zhi)。計算公式為:

    CoC = |(d_l * f * (z - z_f)) / (z * (f + z_f))|

    其中d_l為光圈直徑,f為焦距,z為物體距離,z_f為對焦平面距離5。URP在Shader中通過深度紋理(_CameraDepthTexture)獲取每個像素的z值。

URP實現流程

  • ?預處理階段?:生成包含CoC數據(ju)的紋(wen)理。通過(guo)比較像(xiang)素深度與焦點距離(li),標記需要模(mo)糊(hu)的區域(近(jin)景或遠景)。示例(li)參數包括:

    csharp
    [Range(0.1f, 100f)] public float focusDistance = 10f;// 焦點距離
    [Range(0.1f, 10f)] public float focusRange = 3f;// 清晰范圍
    [Range(1f, 10f)] public float bokehRadius = 4f;// 散景強度
    
  • ?模糊處理?:根據(ju)CoC數(shu)據(ju)對非焦點(dian)區域進行分層模糊。URP提供兩種方式:

    • ?高斯模糊?:使用降采樣+上采樣的多Pass模糊,適合性能敏感場景
    • ?散景模糊?:模擬光學透鏡的虛化效果,在高亮區域生成光斑(Bokeh),需額外計算亮度閾值
  • ?合成階段?:將模糊后的圖(tu)像與原圖(tu)按CoC權(quan)(quan)重混合(he)。清晰區(qu)域(yu)的權(quan)(quan)重為,模糊區(qu)域(yu)根據CoC半徑插值。

示例代碼邏輯

以下(xia)為簡化版CoC計算Shader代碼片(pian)段:

hlsl
float4 Frag(Attributes input) : SV_Target {
    float depth = SampleDepthTexture(_CameraDepthTexture, input.uv);
    float linearDepth = Linear01Depth(depth);
    float coc = saturate(abs(linearDepth - _FocusDistance) / _FocusRange);
    return float4(coc, coc, coc, 1);
}

該(gai)代碼(ma)生成CoC圖,白色(se)表示完(wan)全模(mo)糊,黑(hei)色(se)表示完(wan)全清(qing)晰(xi)。完(wan)整實現(xian)還需結合多(duo)尺度模(mo)糊和(he)色(se)調映(ying)射處理(li)。

性能優化

  • ?降采樣?:在Half/Quarter分辨率下計算模糊,減少像素處理量
  • ?動態調整?:根據平臺性能切換高斯/散景模式,移動端建議使用高斯模糊
  • ?焦點追蹤?:通過射線檢測動態更新focusDistance,實現自動對焦效果

完整實現流程

  • URP_DepthOfFieldSetup.cs

    using UnityEngine;
    using UnityEngine.Rendering;
    using UnityEngine.Rendering.Universal;
    
    public class URP_DepthOfFieldSetup : MonoBehaviour
    {
        [SerializeField] private VolumeProfile volumeProfile;
    
        void Start()
        {
            var depthOfField = volumeProfile.Add<DepthOfField>();
            depthOfField.mode.value = DepthOfFieldMode.Bokeh;
            depthOfField.focusDistance.value = 5f;
            depthOfField.aperture.value = 5.6f;
            depthOfField.focalLength.value = 50f;
        }
    }
    
  • DoF_Shader.shader

    Shader "Custom/DoF"
    {
        Properties { _MainTex ("Texture", 2D) = "white" {} }
        SubShader
        {
            Pass {
                // 深度采樣與模糊處理
            }
        }
    }
    

參數詳解

參數 作用 典型值
Focus Distance 焦點平面距離 3-10m
Aperture 光圈大小(f值) 1.4-16
Focal Length 鏡頭焦距(mm) 35-200mm
Blade Count 光圈葉片數 5-9片

實際應用案例

  • ?角色特寫?:聚焦角色面部,模糊環境
  • ?場景過渡?:動態調整焦點實現鏡頭語言
  • ?UI突出?:模糊游戲界面背景

性能優化建議

  • 移動端使用高斯模式
  • 控制Blur Iterations≤3
  • 采用DownSample降低分辨率

專欄-直達
(歡迎點贊留言探討,更(geng)多人加入進來能更(geng)加完(wan)善(shan)這個(ge)探索(suo)的過(guo)程(cheng),??)

posted @ 2025-11-05 08:58  SmalBox  閱讀(62)  評論(0)    收藏  舉報