godot 隨機(jī)地圖3-godot shader
一、material解釋
godot shader 在glsl的基礎(chǔ)上做了很多簡化,這個(gè)簡化是基于material(材質(zhì))渲染的基礎(chǔ)上改的。
而且material這個(gè)單純用得非常nice,mater是某些地方的mother,material表材質(zhì)、質(zhì)感,用得非常清切啊。
我們看material里面有什么

ambient:環(huán)境
diffuse:擴(kuò)散
specular:鏡面反射
shininess:亮度


pearl:珍珠,ambient(環(huán)境)很強(qiáng),之所以教環(huán)境光,因?yàn)樵趏pengl里面是物體自發(fā)光,ambient是修改他的狀態(tài)
bronze:銅,漫反射
gold:金,鏡面反射
material的使用也非常的簡單,通常還需要傳入光源的角度,用來計(jì)算漫反射和全反射的位置。
如果要自己寫一次,就按照下面抄。

ambient就直接相乘
diffuse還要計(jì)算LightPos和FragPos的方向向量,計(jì)算dot點(diǎn)積,得到一個(gè)夾角越小值越大的值,specular也在用。
所以godot中對texture的處理還是用的material做計(jì)算。當(dāng)然在opengl中還有一個(gè)fbo frame buffer obj,用來保存幀數(shù)據(jù)的,改改做成矩陣計(jì)算。如果要矩陣計(jì)算有OpenCL,提供更多的處理函數(shù),皮衣哥還有cuda。如果要用來對圖片深入處理,有OpenCV(計(jì)算機(jī)視覺),如果想做特效,得了解OpenCV,等學(xué)到一定程度了,就可以轉(zhuǎn)神經(jīng)網(wǎng)絡(luò)方向去搞AI了。
ps:上面的只是計(jì)算除了材質(zhì)光源,并沒有引入texture。輸出的只有純光照。
二、在godot中創(chuàng)建shader
????1、新建textureRect,也就是一個(gè)fbo,在opengl中fbo的保存的內(nèi)容可以很輕松和cpu互通

2、新建一個(gè)給他選擇一個(gè)texture

????????里面的texture大有文章,完全就是為了特效專門搞得。
????2、選擇fastnoiselite

????3、得到畫面

????4、創(chuàng)建material

會看到兩個(gè)選項(xiàng)
分別點(diǎn)一次


如果選擇canvasshader,會無法創(chuàng)建shader,當(dāng)然這是未來更新的部分

這里要選擇shadermaterial


進(jìn)去后聲明為canvas item就好了。
因?yàn)楝F(xiàn)在還沒傳入texture的uv,所以著色器不會找到對應(yīng)的突然,也就顯示一個(gè)藍(lán)色

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



texture()就是命令著色器把色彩填充到要輸出的圖片上,TEXTURE、UV、COLOR都是godotSL注冊了的關(guān)鍵詞,其中COLOR就是要輸出的色彩,UV就是當(dāng)前管線的(x,y)。

如果要說難度,在這個(gè)前提條件,我tm以為創(chuàng)建canvas item shader 才是必須的,結(jié)果tm的,被坑了?。?!畫了1小時(shí)繞圈圈。結(jié)果發(fā)現(xiàn)他們還沒有開發(fā)此功能。艸?。。。?/p>