godot computer shader 概念簡(jiǎn)述
前言:
????如果10萬(wàn)年后,有人來(lái)中國(guó)考古,挖掘除了大量 20世紀(jì)的坦克,卻完全找不到19世紀(jì)的坦克。這時(shí)候不能把坦克的起源定在中國(guó),而是可以直接定義中國(guó)的坦克技術(shù)是后發(fā)刺激再研究了。
????無(wú)論是坦克,還是什么,在所有后發(fā)的技術(shù)上面,國(guó)產(chǎn)的東西在技術(shù)層面是斷片的。如果我不了解他的歷史,那就不知道他的應(yīng)用場(chǎng)景的改變,也不懂他的技術(shù)變遷,就算學(xué)會(huì)了也是個(gè)傻子,就像跟著譚浩強(qiáng)學(xué)c語(yǔ)言,那只能學(xué)會(huì)那個(gè)上世紀(jì)的版本,無(wú)法銜接輕松到c++,更沒(méi)法理解c++的特性。
????在shader中,關(guān)于visual effects發(fā)展的那個(gè)年代,那時(shí)候的shader只有 頂點(diǎn)著色器、填色著色器和幾何著色器,并沒(méi)有computer shader,而且computer shader是一個(gè)后發(fā)的被刺激才成熟的產(chǎn)物。
????vfx的,得找adobe effects、3DMax等長(zhǎng)久存在的商業(yè)引擎上面找技術(shù)變遷史。到了blender 時(shí)代,開(kāi)源,AE和3DMax就會(huì)慢慢的像IBM一樣在現(xiàn)成的領(lǐng)域退出舞臺(tái)。
????computer shader 也是在皮衣哥的CUDA刺激下才慢慢民用化的東西。CS本身就有現(xiàn)成的OpenCL,但這東東除了大量粒子碰撞,真的沒(méi)太大的用處誒。如果是批量的圖形處理,那自然有早就出現(xiàn)的openCV。
????簡(jiǎn)單的說(shuō)computershader的運(yùn)用場(chǎng)景非常的局限,他必然會(huì)和openCV的卷積扯上關(guān)系,也自然會(huì)和openCL的模擬運(yùn)算掛鉤。
簡(jiǎn)單的說(shuō)一說(shuō)opencv 的卷積

ABCDEF分別表示并行運(yùn)算了6次。
去整列的3*3然后和我的卷積子和舉證相乘,間隔1-1,得到一個(gè)3*3的新矩陣(這個(gè)間隔是可以放大的,這取決個(gè)人需要拋棄多少數(shù)據(jù),但是一般情況會(huì)把圖片縮小分辨率,然后再全卷一次)。
這玩意兒到底有什么意義,是中國(guó)高數(shù)絕對(duì)不會(huì)講得東西,這東西就像奧數(shù)里面的123456789*9 =?1111111101這種非常有趣的特殊乘法。
簡(jiǎn)單看一下幾個(gè)特定的卷積子:

這也一張圖片通過(guò)多冊(cè)特征提取,然后得到“輪廓”“輪廓的直線數(shù)量”“事物的明亮程度”等多種特片的“特征”,然后把這些特征扔進(jìn)幾十上百層的的搭建的全連接網(wǎng)絡(luò),讓網(wǎng)絡(luò)對(duì)每次傳遞的權(quán)重進(jìn)行自動(dòng)修改。
(其中浮雕的最有意思,我們可以明顯看出他的卷積子,是斜對(duì)稱(chēng)的)
當(dāng)然這些卷積子也就是。我們直接看結(jié)果吧

這就是一張圖片,不同卷積子作用后的產(chǎn)物。至于他的矩陣,我也不知道啊,如果在我10歲拿給我看,我肯定高興的睡不著,然后長(zhǎng)大后沉迷數(shù)學(xué)的世界,最后孤獨(dú)終老。
當(dāng)然life game,也用上了卷積類(lèi)似的原理。
不過(guò)life game不能單純用一個(gè)矩陣就了事,也就用上了自由程度更高的opencl。
其實(shí),life game 用上了一個(gè)3*3的卷積子,間隔為1-1,就這樣卷下去。