這個舊玩意兒,套用在 depth map/buffer 上來做到 image enhancement。
這是個方法簡單到不行(只比 dilation/erosion 複雜一點點),效果還 ok(如果去看投稿論文裏頭的圖與官網上的影片時,會驚覺怎麼效果這麼好)的研究。工作的需要,我們有同事專職於了解現階段 SSAO 的技術,我們很快地就略過 unsharp masking 這篇論文,可以說根本就是提一下下就不去理會它了,覺得太過於簡單,對於 animation 來說不實用。但也因為另一個巧合,我又回來了,而且還是以 The Foundry 的 Nuke 當作測驗平台。
這是一張我自 Stanford 拿的 dragon model 的 rendering.
依 paper 的論述,他們最重要的發現即是把 unsharp masking 給套用在 depth map/buffer 上頭,透過 depth map 上的不連續性,間接地暗示了圖像中“前後景的關係“。接著就是看你怎麼去利用這個“前後景暗示“的資料了。拿個例子來說:
這裏是 dragon 的一張 depth map。
先對它套用一次 Gaussian Filter/Blur,於是我們得到一張 low-pass-filtered 圖,把這一張圖和原來的 depth map 做個簡單的比較,即會在前景物件與背景場景之間有了「暗示」。我這邊使用了與 paper 裏頭一樣的方法,把 importance map 的正負值以不同的顏色來表示(我使用的顏色好像剛好和 paper 裏的相反),可以很明顯看出透過這個 importance map,在前後景的邊緣有非常有趣的「暗示」。
上頭提及的 importance map,是我個人目前覺得,整篇 paper 的最大貢獻。怎麼說呢? unsharp masking 說穿了,就是把原圖去減掉經過 Gaussian filter 後所剩下的東西,換個說法,有點像是一張圖經過 high pass filter 的結果。因此很自然地在 frequency 比較高的地方(通俗點說法,就是變化大的地方。ex, 對比比較強的地方),就會留下一些東西。但是呢,作者們卻把這個源自 1930 或更早就有人在使用的技術,套用在 depth buffer 上頭,來獲得「深度上變化量大」的資訊,這點就很了不起了。
感謝 Hank、大句、MiMi 與 Vivian 的相約,我也莫名奇妙地參與了一場演出,實在很棒吶~ :D
吉他二班串聯:
2009/03/06 好害羞吉他發表會 『I’m Yours』DIGIMAX陽台試唱會(noH版)
因為工作的關係,我們一直以來都是使用 Linux 版的 Maya,導致曾經一度有錯覺,覺得 Linux 的東西就是比較好,即便是商業軟體 Maya,也是 Linux 版的比其它平台的版本來得優。事後證明這是種一相情願的想法,MS Windows 雖然在安全性與 GUI 的設計上進展緩慢,但它對 programmer 非常的友善,加上商業化的行為比較健全,所以多的是軟體公司或個人程式設計師在上頭寫了不少好的軟體,…說了這麼多,只是想說,MS Windows 版的 Maya 在 GUI 方面,的確有不錯的地方。
我曾針對 Linux 版 Maya 的 GUI 寫了兩篇:
一篇是引用別人給 Maya 設計,來得美觀且好用多的 GUI 幻想曲。 另一篇是指責 Linux 版的 Maya 會不好用,是因為 Motif 的關係。
Karl Erlandsen 是我在工作過程中,要去處理一個問題而不小心看到的。一般來說,工作很忙錄時,我會刻意不去理會網頁,也不會開啟 MSN 之類的東西,但這一篇實在很有意思:Improving the Maya Linux File Browser。
Karl 的作法是利用 zenity 或 kdialog(端看你使用的 Desktop Manager 是 GNOME 還是 KDE)。他覆寫(override)掉了 Maya 原有的 File Open/Save 相關的 mel functions(更精確一點來說,是覆寫掉 pv_ooxx,這部分我們的 spin 非常有經驗),然後在裏頭安插了一個 system call,透過一個包好的 KE_FileBrowserWrapper.
偷天鋼索人(Man on Wire)
偷得浮生半日閒的一個下午,我們躲在台北街頭一個小小的房間。客廳正放映著安吉莉娜裘莉與約翰馬可維奇主演的陌生的孩子;另一個房間正放映著不知名的片子。是的,其實我們只是這一個禮拜來,有點累了,外加外頭下了點毛毛細雨而不想出門,於是買了午餐就匆匆回家抓部電影看而已。
Man on Wire 是一部紀錄片,記錄了 Philippe Petit 於 1974 年在美國雙子星大樓上走鋼索的傳奇性故事,以第一人稱的口吻,外加四五位當時參與這個不可思議任務的人的觀點,娓娓道出一段歷史上有名的事件。
如果人的一生中,有那麼個某段時期,讓你遇到了一位在某方面非常有天賦與毅力的人,他非常執著在一件事上,一件名之為“他的夢想“的事,然後他起而號召你們這些“他的好朋友或親信們“,說服了你,讓你把他的夢想化為你的夢想,跟著起舞,一同圓一個大夢…
如果你有幸曾經遇過這樣的一個人,完成過一些什麼,那你真的太幸福了。
事實上,我覺得我個人很幸福。
Philippe 實在是一位無可救藥的瘋子(怎麼瘋子都是西方白人的天下? 多來些黃種人的瘋子吧,我想在有生之年,多看到一些有別於西方文化的奇人異事),他愛死了走鋼索。不過我個人的解讀是,「他愛死人那股讓人看了為之傻眼,替他捏一把冷汗,既希望他就這樣放棄吧,但又屏息以待,私底下希望他完成走鋼索這個 mission impossible…」。
PS. 金馬影展沒看到的片子,現在看到,也是一種幸運吧…
PS II. 安吉莉娜裘莉在「陌」裏頭的扮像,也實在很耐人尋味~
Actually, I have been playing Dota AllStars from 2004…
No matter what renderer you are going to use, you should take care of geometry’s “Render Stats” before rendering, especially when you are planning to decompose a rendering job into several layers/passes. Here is a quick python scripts based on pymel to do that.
from pymel import * def dgVerifyRenderStats(surfaces=None): ''' dgVerifyRenderStats deps: none verify and adjust all surface's render stats. double sided, opposite, smooth shading, motion blur visible in reflections/refractions, casts/receive shadows primary visibility ''' def _verifier(surface): surface.
Recently, Timothy and I were talking about some interesting about message in Maya.
For daily tasks in Digimax, Timothy has to handle a mass of Maya scene files in batch way such that he can make it on schedule. But there are so many tasks and Maya scene files! He has spent some time preparing several scripts (Mel or Python, but most of them are Python) for that task. It seems work well but sometimes, he needs to get output messages from Maya for debugging and other scripts.
使用 RenderMan 的資訊人,比例相對來得少,我們很容易可以遇到一位使用 Java, C/C++, C#, PHP, Javascript, Perl, PHP 的程式人員,因應他們的需求而產生的 editor 也多如牛毛,幾乎可以說每一個月就有一個玩意兒被提出來供這些廣大的程式設計人員使用與把玩。
RenderMan 的技術人員呢? 乏人問津呢~
某一天,在一個非常意外的情況下,我發現了 highlight.js 這個程式。那時的我,想要在我的這個網站上發表一些程式碼,大多是 Mel, Python, Rib, Rsl, Tcl…,於是上網研究一下,想找個適用的程式碼來做到 syntax highlighting。那時並沒有想到 Rib 或 Rsl 也會被支援,只是不經意 google 一下…
用了一陣子,發覺 highlight.js 雖然不賴,但是 Mel, Rib 與 Rsl 的支援很明顯有點過時了,於是先後向原作者提了兩次的更新,並把我所知道的 syntax,直接加諸在原來的程式碼上,然後再把結果回寄給作者看,請他看看覺得如何。
總之呢~~就是我又再次感受到 opensource 界人的親切,他都一一接受了。於是我在不經意的情況下,再次對 opensource 界有了一點點微薄的貢獻了。
highlight.js 的 demo 網頁。
PS. 我知道有個非常優秀,集眾人心血大成,支援約莫 100 種 language,而且非常有彈性,可以任意客製化輸出結果的 GeShi (Generic Syntax Highlighter),但它實在太優秀也太大了,而且好像對於 Rib, Rsl, Mel 沒有直接的支援,就像我說的,RenderMan/Maya 的使用者,在 CS 界算是小眾中的小眾,而這也是為什麼我這麼愛 highlight.js 了,因為它讓我得以很快速地分享我的一些想法(英文版)。