Unsharp Masking the Depth Buffer with Nuke

Apr 8 2009

animation

torus Image Enhancement by Unsharp Masking the Depth Buffer 是一篇 SIGGRAPH 2006 的論文,裏頭非常仔細(而且淺顯)地講解了如何利用 Unsharp Masking 這個舊玩意兒,套用在 depth map/buffer 上來做到 image enhancement。

這是個方法簡單到不行(只比 dilation/erosion 複雜一點點),效果還 ok(如果去看投稿論文裏頭的與官網上的影片時,會驚覺怎麼效果這麼好)的研究。工作的需要,我們有同事專職於了解現階段 SSAO 的技術,我們很快地就略過 unsharp masking 這篇論文,可以說根本就是提一下下就不去理會它了,覺得太過於簡單,對於 animation 來說不實用。但也因為另一個巧合,我又回來了,而且還是以 The FoundryNuke 當作測驗平台。

這是一張我自 Stanford 拿的 dragon model 的 rendering.
draong_input

paper 的論述,他們最重要的發現即是把 unsharp masking 給套用在 depth map/buffer 上頭,透過 depth map 上的不連續性,間接地暗示了圖像中“前後景的關係“。接著就是看你怎麼去利用這個“前後景暗示“的資料了。拿個例子來說:

這裏是 dragon 的一張 depth map。
dragon_depth

先對它套用一次 Gaussian Filter/Blur,於是我們得到一張 low-pass-filtered 圖,把這一張圖和原來的 depth map 做個簡單的比較,即會在前景物件與背景場景之間有了「暗示」。我這邊使用了與 paper 裏頭一樣的方法,把 importance map 的正負值以不同的顏色來表示(我使用的顏色好像剛好和 paper 裏的相反),可以很明顯看出透過這個 importance map,在前後景的邊緣有非常有趣的「暗示」。
dragon_rbPreVis

上頭提及的 importance map,是我個人目前覺得,整篇 paper 的最大貢獻。怎麼說呢? unsharp masking 說穿了,就是把原圖去減掉經過 Gaussian filter 後所剩下的東西,換個說法,有點像是一張圖經過 high pass filter 的結果。因此很自然地在 frequency 比較高的地方(通俗點說法,就是變化大的地方。ex, 對比比較強的地方),就會留下一些東西。但是呢,作者們卻把這個源自 1930 或更早就有人在使用的技術,套用在 depth buffer 上頭,來獲得「深度上變化量大」的資訊,這點就很了不起了。

所以呢,我們如果把原來的圖片,屬於上圖的紅色部分的區域,給它變得稍為暗一些(Ambient Occlusion? Nope!),那就成了如下的樣貌:

dragon_result01

換另一個方式來比較,我把原圖與經由處理過後的圖上下並排,可以稍稍看出一些差異來。仔細對照前前一張有紅藍標示的圖,可以更清楚抓出被變暗(darken)的區域即是紅色的區域。當然,我們也可以拿藍色的區域來做點手腳,不過不在目前的討論範圍內。

dragon

試驗後我突然注意到,拿這個 Stanford Dragon 來說,如果我有兩張圖,一張是前景去背,一張是只有背景,那麼我其實只要把它們 load 進 Adobe Photoshop 的兩個 layer 裏頭,然後在前景 layer 的 operator 那邊,使用 glow 加上 darken 之類的,就可以做出「前景物件的外圍有些微的變暗」這件事了。也就是說,這篇論文好像又回到「不值一文」的地步!!!

事實說這是個很有趣也可能很吊詭的事。在一些情況下,你是比較容易獲得一張沒有分前後景 layer 外加一張 depth map 的圖的,這個時候,這個方法就很實用。所以問題在於,什麼時候會有這個情況發生呢…?!

最後我放上一連兩張在 Nuke 裏頭的樣貌,以及使用到的 Nuke script

Screenshot-ao_image_enhancement_by_unsharp_masking_the_depth_buffer.nk

Screenshot-ao_image_enhancement_by_unsharp_masking_the_depth_buffer.nk-1

這邊我要再次特別感謝 The Foundry 的大力協助,透過 Joanna 與 Matt 不辭辛勞地一趟又一趟地前來太極影音,我們有機會一點一點了解 Nuke 這個軟體的特點,同時也加快了我了解它 programming 方面的特性,也才有了這次使用 Nuke 來實作這一篇論文的經驗。整個試驗非常成功且快速,我花了兩個小時就完成了需要的試驗,包括為了寫 blog 而刻意的兩三張圖。整體來說,Nuke 是一個高度自由化的軟體,有種“合成界的 Pixar’s RenderMan“的感覺,因為它的高效能、高自由度與經得起 animation/film production 的考驗。太極影音還沒有機會實際證實 Nuke 的能力,不過我們正一步一步探索與接近中,我相信很快,未來的案子就會有它派上用場的地方。

comments powered by Disqus