圖形學離線渲染中常用的透視攝像機模型時根據小孔成像的原理建立的,其實現通常是從向成像平面上發射ray,並把trace這條ray的結果作為成像平面上對應交點的采樣結果。即:
圖片來自《Fundamentals of Computer Graphics》
現實中的鏡頭拍攝的圖像有景深(Depth of field)的效果,譬如:
圖片來自網絡
顯然,上圖中的耳機被放在攝像機的焦平面附近,成像很清晰;背景中的景物則離焦平面較遠,呈現出模糊的效果。對離線渲染而言,這一效果有利於加強渲染結果的真實性和層次感。但之前提到的攝像機模型過於簡單,要得到景深,需要更精確的攝像機模型。
圖片來自網絡
上圖是網絡上給出的關於景深的一張示意圖,看起來復雜駭人。但稍微分析就能知道,使得不在焦平面上的景物顯得模糊的最根本原因恰恰是焦平面的概念本身,如下圖——
圖片來自網絡
可以看到,假如在原來的透視攝像機模型中加入一個凸透鏡,那么成像過程將不再是“一根”光線穿過小孔到達成像平面上的一點,而是許多光線透過凸透鏡匯聚到成像平面上的一點。
物體恰好在焦平面上的情形
顯然,假如有一物體正好在焦平面上,那么從上面某一點發射的光線通過凸透鏡在成像平面上也會匯聚於一點,於是就得到了清晰的圖像。但是,當物體不在焦平面上時,匯聚到成像平面上某一點的光線將不再全部來自於物體上的一點,而是來自於物體上的一小片區域,這就形成了模糊的效果,也就是最終看到的景深。
物體不在焦平面上的情形
有了這一模型,要設計渲染出景深效果的算法就很容易了。以往從透視攝像機發射ray的方法是:
新的方法則是:
對成像平面上的一點,求出射線
與焦平面的交點
,然后在凸透鏡上隨機采樣(把凸透鏡看做有一定半徑的圓盤)。對每一個采樣點
,發射射線
。
新方法實質是在凸透鏡所在的disk上對到達成像平面上特定點的能量用蒙特卡洛的方法進行了估值。