animation
阿則前幾天寄來了上圖,是 Pixar 今年會上映的動畫 Up 裏頭的角色“Carl Fredricksen“(男主角?)的紙雕。實在不錯吶~
寫了封信去問原作者 Bradley 可不可以放在我的 blog,順道隨便閒聊一下,結果發現,原來這麼一張小小的紙雕,他花了 18 個小時…所以他本來還打算再做其它角色的,當下就打住了XD
Hey Drake,
I’m glad you enjoy my work. I definitely would not mind at all if you shared this Cubee Craft. Well first off, I’m a huge fan of Pixar’s movies, shorts, and overall great storytelling. I figured it’d be a nice tribute to them if I created a small piece from their upcoming film: Up.
1962年,電腦還處在有點古老,我還沒出生,無法想像得非常確切的年代。據說那時的電腦程式(有電腦軟體這種東西嗎? 搞不好沒有)是一疊打了洞的卡片,由一台讀卡機把這一張張卡片讀取進來,計算後,再以列表機印出結果來(印出來的應該不是洞了吧)。
A display connected to a digital computer gives us a chance to gain familiarity with concepts not realizable in the physical world. It is a looking glass into a mathematical wonderland.
Ivan Sutherland,這位被尊稱為電腦圖學(Computer Graphics)之父的人物,在他的博士論文“Sketchpad“中,展現了如下頭影片所示,這麼一個預見未來的系統。Sketchpad 是史上第一個提供一個互動環境,供操作電腦的人可以任意畫一些複雜的線條與幾何型的程式,它同時揭露了 3D、Virtual Reality(虛擬實境),它是史上第一個 GUI 程式。
我永遠都記得,在修歐陽明教授電腦圖學的第一堂課時,就被教授以他一貫輕鬆自在的說法介紹了這一位人物。Smalltalk 這個物件導向程式語言的創造者 Alan Kay 是他的學生;Gouraud shading 是他的學生發明的;Adobe 與 SGI 的兩位創辦人,都在他創立的公司待過…
當時崇拜他極了。
現在這個年代,HCI (Human-computer Interaction) 大放光采,我在想,除了 3C 電子產品的蓬勃發展推波助瀾以外,HCI 開宗明義帶有“Design“的意味這點,對於想同時發展左右腦的人來說,是個非常致命的吸引力。於是我接著思考另一件事:
既然 Sketchpad 這類有某些劃時代意義的 system design/application 可以成為一篇博士論文,並且受到一定程度的尊敬與肯定。那麼,讓 PhD thesis 跳出“原創性“,“論文發表點數足“與“深入研究一個可能是很少人會關注的議題“的框架後,是否這種「嘗試做點夢,開發出一個會讓人眼睛為之一亮的程式」,也可以當作是一個 PhD thesis 了?
這個舊玩意兒,套用在 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 上頭,來獲得「深度上變化量大」的資訊,這點就很了不起了。
因為工作的關係,我們一直以來都是使用 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.
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 了,因為它讓我得以很快速地分享我的一些想法(英文版)。
前天 Timothy 和我聊到一個非常有趣的事。
他因為工作需要,常常要批次(batch)處理一大堆的 Maya scene files,透過一些他自行寫的 scripts 來執行一些例行性的工作。然後他需要把 Maya 產生的任何 message 都以某種型式丟出來,方便他 debug 或是分析。我們兩個人在想,有哪些方法可以做到?(從這點可以看出來,Timothy 是一位非常稱職的 RD/TD,會汲汲於想一些方法來做 mass production,而不是手動一個一個處理。因為即使你手動做得再快,只要量一大,還是有一定的速度上限~)
我們最後釐清了需求:
Maya 會由 terminal/console 下執行,所有的 message 要能正常輸出,而不是只留在 Maya Script Editor 裏頭。 message 包括:Maya 本身產生的;Mel 的 print;Python 的 print。 解法:
要讓 Python 的 print 得以輸出到 terminal,只要把 sys.stdout 由原來的 Maya Output object 換成 sys.stdout 即可。 要讓 Mel 的 print 與 Maya 原生的 message 輸出到 terminal 的話,需要利用到 Maya API 裏頭 CommandMessage 所提供的 CommandOutputCallback。向 Maya 註冊一個 callback 後,每當有任何一個 command 的 output 時,這個 callback 就會被呼叫,然後我們可以來決定怎麼處理這個 output message。 For Python’s print: