godot computer shader 概念简述
前言:
如果10万年后,有人来中国考古,挖掘除了大量 20世纪的坦克,却完全找不到19世纪的坦克。这时候不能把坦克的起源定在中国,而是可以直接定义中国的坦克技术是后发刺激再研究了。
无论是坦克,还是什么,在所有后发的技术上面,国产的东西在技术层面是断片的。如果我不了解他的历史,那就不知道他的应用场景的改变,也不懂他的技术变迁,就算学会了也是个傻子,就像跟着谭浩强学c语言,那只能学会那个上世纪的版本,无法衔接轻松到c++,更没法理解c++的特性。
在shader中,关于visual effects发展的那个年代,那时候的shader只有 顶点着色器、填色着色器和几何着色器,并没有computer shader,而且computer shader是一个后发的被刺激才成熟的产物。
vfx的,得找adobe effects、3DMax等长久存在的商业引擎上面找技术变迁史。到了blender 时代,开源,AE和3DMax就会慢慢的像IBM一样在现成的领域退出舞台。
computer shader 也是在皮衣哥的CUDA刺激下才慢慢民用化的东西。CS本身就有现成的OpenCL,但这东东除了大量粒子碰撞,真的没太大的用处诶。如果是批量的图形处理,那自然有早就出现的openCV。
简单的说computershader的运用场景非常的局限,他必然会和openCV的卷积扯上关系,也自然会和openCL的模拟运算挂钩。
简单的说一说opencv 的卷积

ABCDEF分别表示并行运算了6次。
去整列的3*3然后和我的卷积子和举证相乘,间隔1-1,得到一个3*3的新矩阵(这个间隔是可以放大的,这取决个人需要抛弃多少数据,但是一般情况会把图片缩小分辨率,然后再全卷一次)。
这玩意儿到底有什么意义,是中国高数绝对不会讲得东西,这东西就像奥数里面的123456789*9 = 1111111101这种非常有趣的特殊乘法。
简单看一下几个特定的卷积子:

这也一张图片通过多册特征提取,然后得到“轮廓”“轮廓的直线数量”“事物的明亮程度”等多种特片的“特征”,然后把这些特征扔进几十上百层的的搭建的全连接网络,让网络对每次传递的权重进行自动修改。
(其中浮雕的最有意思,我们可以明显看出他的卷积子,是斜对称的)
当然这些卷积子也就是。我们直接看结果吧

这就是一张图片,不同卷积子作用后的产物。至于他的矩阵,我也不知道啊,如果在我10岁拿给我看,我肯定高兴的睡不着,然后长大后沉迷数学的世界,最后孤独终老。
当然life game,也用上了卷积类似的原理。
不过life game不能单纯用一个矩阵就了事,也就用上了自由程度更高的opencl。
其实,life game 用上了一个3*3的卷积子,间隔为1-1,就这样卷下去。