運動模糊是景物圖象中的移動效果。它比較明顯地出現在長時間曝光或場景內的物體快速移動的情形裏。
為什麼會出現運動模糊
攝影機的工作原理是在很短的時間裏把場景在膠片上曝光。場景中的光線投射在膠片上,引起化學反應,最終產生圖片。這就是曝光。如果在曝光的過程中,場景發生變化,則就會產生模糊的畫麵。
Why should you bother?
不難發現,在電影或電視中,運動模糊是經常出現的,甚至於你不會注意到它。另一方麵,在計算機圖形中,你就會發現缺少運動模糊,由此也帶來了失真。
舉個例子,lensflare是近來較為流行的一種圖象效果,但傳統的圖象製作者常常簡化此效果,自從我們認識到它是仿真的一種工具之後,計算機便開始模擬此效果。在電影製作中,也有如此為了反應現實,而采用的手段。
看一下沒有采用運動模糊的計算機動畫,你會發現物體快速移動時,缺乏連貫性和真實感。你在電視的體育報道中,也能看到類似的效果。因為普通電視節目使用25幀/秒的攝象機,而體育節目則使用1000幀/秒的攝象機,從而提供清晰的慢鏡頭回放。但實際中,隻回放小部分的幀,失去了運動模糊,使移動的物體看起來有跳躍感。
我們對電視或電影中的運動模糊都習以為常,所以在運動圖象中看不到它就會覺得不真實。所以,缺乏運動模糊是計算機動畫不真實的原因之一,因為計算機產生的圖象“棱角分明”,很注目,以致削弱了運動效果。
另外,有運動模糊的圖象包含了更多的信息。請比較下麵這兩幅圖:
這兩幅圖中的場景是完全一樣的,但其中一幅是從向前飛速移動的攝象機中得到,另一幅則是攝象機向左移動。這從圖片上可以輕易地分辨出來。觀看動畫時,大腦會注意到那些更多的信息,由此也使運動變得更平滑,場景更逼真。
更多的細節
我們來觀察一下電影攝象機如何拍攝移動的場景。
一架電影攝象機包括以下部分:
鏡頭:把光聚焦到膠片上
快門:快門控製在一定時間內,打開讓光進入。
膠片:膠片包括感光的化學品。通過這些感光的材料記錄場景,生成影象。
左圖顯示的是一個靜止不動的紅色球體被攝象機攝象時的情形。這裏隻畫出了攝象機中三個重要部分:鏡頭,快門和膠片。
可以看出,快門在打開狀態,讓膠片曝光。而膠片上已有兩幀已經過暴光,一幀正在暴光。區別在於後者稍微暗一些,因為暴光的時間還不夠。稍後,快門將關閉,這時的三幀將完全一樣。
快門關閉之後,膠片將向下移動一個合適的距離,讓下一幀膠片到達曝光位置,然後快門又將再次打開曝光,這樣的過程在一秒內會重複許多次。
右圖的情形與上麵相似,但現在,球體會向箭頭所指的方向快速移動。
快門照常打開,膠片也一樣被曝光。但現在,由於曝光的時間內,球體正在移動,導致了膠片上的圖片變模糊了。這就是我們說的運動模糊效果。
現在,我可以打賭,如果你看到這寫模糊了的畫麵中任意一幅的話,你一定能說出攝象時,球正在水平方向上移動。因為有運動模糊的圖象相比之下包含更多的信息。
在圖象中創建運動模糊的效果
1、空間反失真
你可能對一種叫做“過采樣”的反失真技術比較熟悉。這種技術先渲染一幅大得多得圖象,然後縮小此圖象。我將先介紹這種反失真技術的實現,因為運動模糊的實現與此很相似。
舉個例子,渲染一幅50x50紅色圓圈的反失真圖象:
從左到右分別如下:
(1)渲染更多的象素
在更高的分辨率下畫一個“失真”的圓。這裏,我使用200x200的分辨率,即比目標圖大4倍。
(2)分圖象
然後,想象著把此圖象分成許多正方形。因為此圖象比目標圖象大4倍,我們讓每個小正方形為4x4。
(3)平均值
接著,對於每個小正方形,取其中所有象素的平均值。用此平均值填充小正方形。
(4)縮小
最後,把圖片縮小為50x50。這就是一個反失真的紅圓圖片。
2、時間反失真(運動模糊)
對於運動模糊,完成的方法很相似。上麵說的方法稱為“空間反失真”(就是平滑空間)。創建動畫的方法叫做時間反失真(就是平滑時間)。 這種方法與創建反失真圖象的方法相似。
(1)渲染更多的幀
就象空間反失真中,你渲染更多的象素一樣,一開始,你需要渲染更多的幀。舉例說,對於顯示4秒(即100幀)的動畫,你要渲染400幀。這400幀也覆蓋4秒的時間,隻是劃分得更細。
在這裏,左邊的每一幀都顯示1/100秒。
(2)分所有幀
接下來,按每4幀為一組 . . .
(3)平均
把組內所有4幀進行積累渲染。
(4)完成
現在你就得到了一個25幀/秒的動畫。右邊的每一幀有運動模糊效果的圖片將在1/25秒中顯示。
對程序員來說有意味著什麼
現在,你是否想試著在你的程序裏加入運動模糊?但是,這決定於你的程序是那類程序。
運動模糊在實時程序中很難實現。它要求把幀速提高幾倍。對於實時程序,唯一的可能是降低分辨率。但這對大多數程序員來說,這是不能接受的。
一些遊戲嚐試通過把當前幀於前一幀一起渲染來模擬運動模糊,結果是前一幀在屏幕上變成一些汙點。這不是真正的運動模糊;效果不好並且對CPU也是一種浪費。
在一個遊戲中,如果你想大量采用運動模糊的話,你必須做好犧牲圖象質量的準備。但同時,你可以隻增加很少的運動模糊,就是隻對運動極快的物體采用運動模糊。比如,爆炸時的火花,你可以使用線段而不是點來使用模糊效果。在瀑布以及武器開火的情況中,也可以這樣處理。我玩賽車遊戲時,我經常因為車輪沒有運動模糊效果而失望。因為車輪旋轉得很快,你不可能看清任何細節。一個解決辦法是:儲存幾幅車輪的紋理貼圖,每幅都包含不同的運動模糊效果。隨著車速的加快,顯示模糊越來越明顯的紋理貼圖。對於路麵貼圖也使用同樣的方法。這就會增加遊戲的真實感。
如果你想做一段不是實時合成的動畫,那麼因為動態模糊增加些麻煩還是值得的,特別是在運動非常快的時候。當然,這並非任何時候都可取。比如,如果你想能夠在暫停動畫時看到清晰的圖像,這時候你可能就想減少或是忽略掉動態模糊了。
參考
Bitty
http://parnham.future.easyspace.com/
Bitty是一個小程序,可以進行空間和時間反失真(運動模糊)。輸入渲染好的幀,就可以得到運動模糊的效果。它也能把圖象重新采樣。它不能輸出動畫文件,隻能輸出幀畫麵文件用於生成.MPG、.AVI或.BIK(bink!) 視頻文件。
Terragen Motion Blurred Animations
http://parnham.future.easyspace.com/animations.htm
Dan通過使用Terragen渲染幀,Bitty混合幀已經創建了許多極棒的動畫。
Bink!
http://www.smacker.com/ (譯者注:《星際爭霸》用的就是它的前身)
Bink是一種新穎出色的視頻壓縮解壓格式。easily outperforming MPEG-IIand AVI. 它是一個很新的係統,並不象.MPG 或.AVI一樣被支持,但我的確希望它能得到它應該得到的認可。從現在開始,我將用這種格式創建我所有的動畫。