來源:派臣科技|時間:2020-10-26|瀏覽:次
在我們深入研究如何在CSS中創(chuàng)建一個真實的動態(tài)模糊之前,有必要快速了解一下什么是動態(tài)模糊,這樣我們就可以更好地了解我們要復制的是什么。
你是否曾經(jīng)拍攝過快速移動的物體,尤其是在光線較暗的情況下,它會變成模糊的條紋?或者是整個相機抖動,整個鏡頭變成了一連串的條紋?這就是運動模糊,這是相機工作的副產(chǎn)品。
想象一個相機。它有一個百葉窗,一扇門打開讓光線進來,然后關上阻止光線進來。從它打開的時候到關閉的時候,是一張單獨的照片,或者一個移動圖像的單獨一幀。
一個穿紅襯衫的模糊男子騎著一輛藍色自行車在森林中疾馳。
如果在快門打開的時候,畫面的主體在移動,我們最終拍攝的是一個物體在畫面中移動的照片。在膠片上,這表現(xiàn)為一種穩(wěn)定的涂片,從起點到終點,被攝對象被放置在無數(shù)個地方。移動的物體最終也是半透明的,在它后面可以看到部分背景。
計算機所做的就是模擬幾個子幀,然后以不透明度的一小部分將它們組合在一起。在運動路徑上,將同一物體的大量副本放在略微不同的位置,就會產(chǎn)生相當令人信服的運動模糊的摹本。
視頻合成應用程序傾向于設置他們的動態(tài)模糊應該有多少細分。如果你把這個值設置得很低,你可以看到這個技術是如何工作的,就像這樣,一個動畫的一個簡單的白點,每幀有四個樣本:
四個重疊的白色不透明的圓圈在黑色的背景。
每幀四個樣本。
十二個重疊的白色不透明的圓圈在黑色的背景。
這里是每幀12個樣本。
32個重疊的白色不透明的圓圈在黑色的背景。
當我們達到每幀32個樣本時,它已經(jīng)非常接近真實了,特別是在每秒多幀的情況下。
制作令人信服的動態(tài)模糊所需的樣本數(shù)量完全與內(nèi)容相關。一些邊緣鋒利、移動速度超快的小物體需要很多子幀;但是一些模糊的緩慢移動的東西可能只需要幾個。一般來說,使用越多,效果越有說服力。
在CSS中完成
為了在CSS中近似這種效果,我們需要創(chuàng)建大量相同的元素,使它們半透明,并將它們的動畫稍微偏移幾分之一秒。
首先,我們將使用CSS轉換來建立我們想要的動畫基礎。我們將用一個簡單的黑點,并分配它在懸停(或點擊,如果你在移動)轉換。我們還將動畫的邊界半徑和顏色,以顯示這種方法的靈活性。
這是沒有運動模糊的基礎動畫:
現(xiàn)在,讓我們制作20個相同的黑點副本,所有的副本都被放置在相同的絕對位置。每個副本都有10%的不透明度,這可能比數(shù)學上的正確稍微多了一點,但我發(fā)現(xiàn)我們需要使它們更不透明,以看起來足夠堅固。
下一步就是奇跡發(fā)生的地方。我們?yōu)槊總€點對象的克隆添加一個稍微增加的過渡延遲值。它們都將運行完全相同的動畫,但它們每個都會有3毫秒的偏移。
這種方法的美妙之處在于,它創(chuàng)建了一個偽運動模糊效果,可用于大量不同的動畫。我們可以在那里添加顏色變化,縮放過渡,奇怪的時間,和運動模糊效果仍然有效。
使用20個克隆對象將工作在大量的快速和緩慢的動畫,但很少仍然可以產(chǎn)生合理的運動模糊的感覺。您可能需要調(diào)整克隆對象的數(shù)量,它們的不透明度,以及轉換延遲的數(shù)量,以配合您的特定動畫。我們剛才看到的演示有略微超頻的模糊效果,使它更加突出。
最終,隨著計算機能力的提高,我期望一些主要的瀏覽器可能會開始提供這種效果。這樣我們就可以擺脫擁有20件相同物品的荒謬。同時,這也是一種接近真實運動模糊的合理方法。