shader授人以鱼,不如授人以渔

官方以为大家都是写过图形学的

https://m.toutiao.com/is/zEuch4L44AA/

片元的最后注释是重点, 想当年自己一直不明白shader那些处理, 只是简单弄个圆都看不懂, 直到一个前辈跟我説:“shader是同时处理每个点, 以圆为例uv值从0到1, 取0.5为中心, 用距离函数判断当前片元内的uv是否在圆判径内”, 瞬间一叶障目即破。 当时看过很多shade教学一脸懵,若果当时的教学补上这句基本都懂了。

2赞

良心教程,哈哈哈哈

:yum:

感谢大佬,mark!

mark!

优秀!!!

mark!

mark!

mark mark!!

好帖子:+1::+1::+1:

最后一句是真下头!

无他,顶帖尔

mark 牛逼

看完了还是一脸懵,就比如我想给图片的文字描边。我知道需要去找文字颜色的边缘部分,但是呢他返回的是一组颜色数据,让我不知道他们是哪个位置上的。写这个Shader总是用面向对象的思维来写越写越糊涂。最后也只能使用别人写的Shader。网上看了好多Shader的教程,这玩意没有一个博主能说的通俗易懂的,貌似只可意会不可言传的样子。


先来个简单的,我们右边这个剑需要描边。
你问我:我要知道这个剑的边缘的部分
我也不知道,这是图片。你的思维要转变
如何知道剑的边缘?
回答:如果一个点,是透明的,然后它的邻居不是透明的,说明它就是边缘。你需要去判断,没有什么api能给你返回“边缘”

这个教程并不会一下教会你shader,它只是帮助你更好的学习shader。

关于并行:
举个形象化例子:一个长度为10的数组,你让cpu去给你查找数据,需要用一个for循环,遍历一个一个检查。
而gpu呢,gpu把这个长度为10的数组,分给10个人,直接喊:谁是xxx,拿到xxx的数据的人,直接就告诉你,在我这。gpu不需要使用for。这就是cpu和gpu的硬件差别

边缘检测你可以上网查处理算法, 一般人看完会有一个谜点, 比如网上的算法都是 for循环历遍x,y 取得每个像素点, 然后再与周围的像素点计算处理。因为网上的是基于cpu处理, 而api把图片转化为矩阵。
但在shader中,你写的代码是代表着一个像素点。就不需要for循环历遍。但同様产生一个问题, 网上的算法要你取得每个点周围的像素来计算, 那麽shader要怎様处理呢?
shader 把一张100x100的图片用uv(0-1,0-1)代表, 而参数v_uv0 就是当前的像素点位置, 你可以当成就是for x,y里早帮你宣告好一个vec(x,y)的变量但在for x,y中, 我x-1就是当前点左边一个像素, 但在shader中则是 (v_uv0.x - 1/100), 1/100怎麽来? 因为你图片寛是100, 把0-100影射到0-1区间, 那麽1/100就是每点像素之间的距离。
希望能帮你理解到shader的基础

1赞

mark mark

Mark!!!!!!!!!