godot 随机地图3-godot shader
一、material解释
godot shader 在glsl的基础上做了很多简化,这个简化是基于material(材质)渲染的基础上改的。
而且material这个单纯用得非常nice,mater是某些地方的mother,material表材质、质感,用得非常清切啊。
我们看material里面有什么

ambient:环境
diffuse:扩散
specular:镜面反射
shininess:亮度


pearl:珍珠,ambient(环境)很强,之所以教环境光,因为在opengl里面是物体自发光,ambient是修改他的状态
bronze:铜,漫反射
gold:金,镜面反射
material的使用也非常的简单,通常还需要传入光源的角度,用来计算漫反射和全反射的位置。
如果要自己写一次,就按照下面抄。

ambient就直接相乘
diffuse还要计算LightPos和FragPos的方向向量,计算dot点积,得到一个夹角越小值越大的值,specular也在用。
所以godot中对texture的处理还是用的material做计算。当然在opengl中还有一个fbo frame buffer obj,用来保存帧数据的,改改做成矩阵计算。如果要矩阵计算有OpenCL,提供更多的处理函数,皮衣哥还有cuda。如果要用来对图片深入处理,有OpenCV(计算机视觉),如果想做特效,得了解OpenCV,等学到一定程度了,就可以转神经网络方向去搞AI了。
ps:上面的只是计算除了材质光源,并没有引入texture。输出的只有纯光照。
二、在godot中创建shader
1、新建textureRect,也就是一个fbo,在opengl中fbo的保存的内容可以很轻松和cpu互通

2、新建一个给他选择一个texture

里面的texture大有文章,完全就是为了特效专门搞得。
2、选择fastnoiselite

3、得到画面

4、创建material

会看到两个选项
分别点一次


如果选择canvasshader,会无法创建shader,当然这是未来更新的部分

这里要选择shadermaterial


进去后声明为canvas item就好了。
因为现在还没传入texture的uv,所以着色器不会找到对应的突然,也就显示一个蓝色

修改成uv,也就是xy控制色彩的RB,就可以得到典型的opengl图了。



texture()就是命令着色器把色彩填充到要输出的图片上,TEXTURE、UV、COLOR都是godotSL注册了的关键词,其中COLOR就是要输出的色彩,UV就是当前管线的(x,y)。

如果要说难度,在这个前提条件,我tm以为创建canvas item shader 才是必须的,结果tm的,被坑了!!!画了1小时绕圈圈。结果发现他们还没有开发此功能。艹!!!!

