欢迎光临散文网 会员登陆 & 注册

godot 随机地图3-godot shader

2023-05-20 00:05 作者:damedown  | 我要投稿

一、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

会看到两个选项

分别点一次

CanvasItem  2D优化后的shader
Shader 就普通的材质,当然3D已经变为当今主流了

如果选择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小时绕圈圈。结果发现他们还没有开发此功能。艹!!!!

godot 随机地图3-godot shader的评论 (共 条)

分享到微博请遵守国家法律