3D Graph, Xbox360

Depth of Field 景深

景深(Depth of Field)
就是前景清晰但是背景模糊的效果
http://i.i.com.com/cnet.g2/images/2006/128/926632_20060509_screen002.jpg
用來做焦點的突顯 在電影裡常常用到 如果要拍出這樣的東西需要一點技術
有人問怎麼做 我只是大概說了 跟HDR概念差不多..
竟然有人在巴哈說了這樣的話
        其實跟HDR沒什麼關係
        這個效果在LDR運算環境下就可以做出來了
        比較簡單的方法有兩種
        一個是對投影矩陣以焦點為中心
        把比焦點遠和比焦點近的座標空間分別添加不同的位移量
       
http://www.glprogramming.com/red/images/Image125.gif
        然後把不同位移量的投影矩陣所產生的多張圖片合併
        不過這個方法速度比較慢
        另一個方法是直接取目前的ColorBuffer畫面和對應的Z-Buffer資料
        以Z-Buffer中各Pixel的Z值和焦點的Z值的差值,做為Blur強度的參數
        然後以此資訊對ColorBuffer進行各部位Blur程度不同的Blur處理
        跟焦點的深度誤差大的Pixel就會比較模糊
        跟焦點的深度誤差小的Pixel就會比較清楚
        這方法速度比較快
        現今遊戲所使用的通常都是這種方式
        事實上 要做到接近真實的感覺必須要用HDR

HDR才夠表現出自然光 RGBA可以到16bits 或32bits
http://www.daionet.gr.jp/~masa/rthdribl/Image/dof6_00.jpg
真想問他是看到哪個遊戲用那種方法
目前用硬體加速的方法都是用 後處理(post-processing)
就是先把結果render到一張材質上 再針對這張材質做處理
最後在把這張材質輸出到螢幕上
大部分知名的賽車遊戲都是用後處理來處理車身對環境的反射
然後景深就是用後處理經過兩個pass
pass1:將場景附帶一些資訊render出來
           這我見到的方法就有兩種1.是render出一張A8R8G8B8跟一張G16R16(放Depth16跟Blurriness16)的圖 2.render出一張A16B16G16R16

pass2:將剛剛的圖做一些filter(一般來說是先縮小在blur它,但也有許多其他方法),常聽到的高斯模糊也可以用來做filter

最後在合成就能產生景深 這樣的效果既好 又是給GPU算的 比巴哈回我那個蠢方法好多了

而在非HDR下我知道 可以用Jittering的方法來算 用查表的方式先建好表格 執行時查表省去運算的步驟
http://www.glprogramming.com/red/chapter10.html

但是他後面提的一個pixel一個pixel針對z-buffer的計算 我就不信他給CPU算 800*600 可以跑遊戲,可以跑即時的遊戲 我認為他只能做影像處理

看他IP是中央的,看來又是個嘴砲,不過我也不確定加上我與世無爭 所以不想回他:PŠ

廣告

4 thoughts on “Depth of Field 景深”

  1. 偶然路過此地
    國中生就在學3D…真是後生可畏:)

    不過我在想那個中央那位人士的說法並沒有錯
    DOF本來就是和HDR無關…
    DOF的演算主要需要Depth 資料(當然也需要Color), HDR的演算卻是需要高精確度的Color資料
    只是類似的是他們都需要較高精確度的資料內容..比如說16bit/32bit 整數或是浮點數
    再者那位人士的說法其實是就原理來說是這樣做.
    當然你要用硬體時作時就要考量到硬體功能了…
    比如說DOF就是要有個Depth資訊…哪裡來呢.直覺就是Z Buffer…
    nvidia的顯示卡是可以把Z buffer直接當作一般texture放到shader裡.
    可是標準的DirectX 沒有定義把Z Buffer當作texture丟到shader的行為…
    .像ATI的卡就不能這麼做了
    OK…那就render到color buffer…
    嗯..這時出現問題…有沒有MRT, 有沒有16bit或是32bit的精確度的color buffer可以產生…
    不同硬體就產生不同的實作方式
    在DX8時期沒有MRT和16bit texture的時候, 還是有人做出DOF和HDR效果.

    實作上雖然都算是post processing…
    但是就演算法來說…兩個可是不相同
    因為細節可差很多…DOF可以one pass就完成了…HDR多好幾個pass..

    加油加油…

  2. 恩恩 我後來也有發現DOF不需要HDR
    是算法跟pass類似 我沒有很深入的探討 以後會好好的研究一下

    還有…跟你說一個小秘密..我不是國中生…

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s