最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

godot 隨機(jī)地圖4 生成voronoise的基點(diǎn)

2023-05-22 17:32 作者:damedown  | 我要投稿

在之前的測試代碼中,我們使用的是uv到基點(diǎn)的距離來填色,越原理基點(diǎn)值越大,也就越白。簡單的形容就是又大又白。

一、我們先隨機(jī)生成色彩,當(dāng)然還是用sincos取小數(shù),這樣隨機(jī)有可靠。

????1、準(zhǔn)備一個noise

????2、判斷的時候不僅僅判斷最小距離,還要判斷最小uv,把uv 給換著花園給float noise 處理三次得到一個vec3,當(dāng)做色彩。

這時候我們已經(jīng)得到了很穩(wěn)定的index產(chǎn)生的色彩,并且圖形穩(wěn)定。


二、傳入穩(wěn)定的index color,并且基礎(chǔ)color和map相關(guān)。

????1、voronoise和隨機(jī)地圖的關(guān)系

????就像上圖,是正方形的,但是我如果在voronoise的的index沒有偏移的時候也是正方形的。如果我們的基礎(chǔ)圖形按照這個方式生成,也就沒毛病了。如果在這個基礎(chǔ)上去生成圖形,這樣地圖的隨機(jī)是建立在我們已有的地形規(guī)劃之上。


????2.0 對于基礎(chǔ)地圖生成的需求大致分成兩類

????我們?yōu)榱松苫A(chǔ)點(diǎn)圖,會用上地圖分層

????????這時候我們有兩種方法

????????第一種是使用一階noise控制高度,然后多次生成,這樣有一個好處就是可控性高,并且代碼簡單。

????大概就像這樣子。

????第二種方法是使用marble texture noise

https://www.shadertoy.com/view/NtccWM

????實(shí)際上marble在只在noise texture的基礎(chǔ)上改了一點(diǎn)點(diǎn)

????如果我們這時候把返回的color的v再改一下隨著Y越大,顏色越深。

????但是我并不想。

????雖然這樣很好的分層了,但是我需要的是像泰拉瑞亞那樣的游戲地圖,不然我也不會出godot的筆記,因?yàn)間odot對2d支持太好了。但不能讓我控制FBO,不過也沒關(guān)系,我已經(jīng)滿足了。

????使用marble會很難控制我想生成的地圖。不過marble的特性可以讓我們對他多多調(diào)教。

????比如

????斜的

????豎的

????越往下越暗

去掉0.5,,fract(base_uv.y)/2.5

????

????2.1使用noise_1D創(chuàng)建

????有兩種方案處理:

????????第一種是創(chuàng)建一個512*1的image讓shader去處理

????????第二種是創(chuàng)建PackedFloatArray就在CPU上干了,處理512次,后面還可能更多,優(yōu)化了少1/10秒,沒必要。

? ??

????因?yàn)樯蒳mage在shader上面干,是必須要做的,這里就熟悉使用PackedFloat32Array。

????在源碼中他們就是vector的套牌

????? ??

然后就意識到,我還沒分型呢。如果是1024次,還得分型5次???。我們跟著寫一個生成texture的。


????2.2生成image 扔給shader并行處理

????因?yàn)間odot不能直接調(diào)用fbo,雖然少了一點(diǎn)自由度,但是無傷大雅。

????但是隨后發(fā)現(xiàn)godot的texture不能隨便設(shè)置


????但是隨后發(fā)現(xiàn)godot的shader不能隨便給texture套用

????但是隨后發(fā)現(xiàn)godot的sprite2D必須預(yù)先設(shè)置特效圖熱的大小

????但是隨后發(fā)現(xiàn)godot的image的長寬是局部函數(shù)

????此時此刻,我心里面在奔騰

不過imagetexture繼承了texture的特性,而且還有w和h

隨后我發(fā)現(xiàn)可以create image

隨后我又發(fā)現(xiàn)這是錯的,image不能new后就不能在設(shè)置大小了,然而我必須使用

我尼瑪,你可不可以保留這個new,你這個操作很反人類啊。

但是image是保存與內(nèi)存上的東西,texture才能保存在顯存上

這樣操作屁反應(yīng)也不會有,我的sprite2D并不能把它的texture進(jìn)行處理。

我尼瑪,那我就得把texture.set_data()

然并卵什么也沒有

即便我await changed

?2.3 三個小時也沒解決,我放棄了

????沒法了,我只能使用殺器了:打開ps,創(chuàng)建一個512*1 png的圖片扔進(jìn)去,3分鐘

???

我稍微有點(diǎn)點(diǎn)無語,好吧,如果我開發(fā)游戲引擎,也不會想到有人會這樣操作。

voronoise的大小是125*125,用的godot頭像

所以我大膽的猜測,godot的image并不是用來生成圖片的,而是純粹用來截圖保存了。

那我趕快給他寫一個shader,這里直接套用2Dnosie的shader,因?yàn)閥為1,也沒啥變化,那我的y就可以改為seed。

????我真是真的一個愣頭青傻批。

????2.4優(yōu)化noise2d

因?yàn)閚oise是分型多層疊加,fractal brownian motion的參數(shù)我也左右修改,如果看不習(xí)慣可以自己改回去,下面提供了原詞。相對的國外作者,那全是縮寫,剛學(xué)的時候全都不認(rèn)識。

為了改為1D的noise,我把uv.y的數(shù)據(jù)拋棄,直接改為seed

拋棄

這樣我就得到一個512*1的圖片了。

fbo的特性就是穿入多大的texture,就創(chuàng)建多大的計(jì)算陣列,這里傳入512*1,那就是512*1的并行度,不會多和少。如果sprite2d縮放后,只是換一種方式采樣,fragment的處理的texture的數(shù)據(jù)不會變化。

縮放后的sprite2D改變你的fragmentshader 后面的testing blending(混色)過程。所以不用擔(dān)心。

????2.5 我們把時間暫停,把texture的數(shù)據(jù)導(dǎo)出去

????操蛋的事情有發(fā)生了

他獲得了我原始image的數(shù)據(jù)。我尼瑪。

然后我使用godot的頭來測試

他又對了,我再次尼瑪。我真尼瑪?shù)模H了,真的是有毒。

人的精力是有限的,但是別人的操蛋是無限的。

我就不信邪了,我扔一個512*10的進(jìn)去試一試。

還是原始數(shù)據(jù)

我有傳入一個512*10的svg進(jìn)去,還是不行

我尼瑪呵呵了。

沒辦法了,我只能直接用mesh了,用傳統(tǒng)的opengl的方式,這下他跑不掉了吧。

godot 隨機(jī)地圖4 生成voronoise的基點(diǎn)的評論 (共 條)

分享到微博請遵守國家法律
长沙县| 泸定县| 沐川县| 西昌市| 辽宁省| 太仆寺旗| 浮山县| 图们市| 双峰县| 屯门区| 三门峡市| 藁城市| 察隅县| 呈贡县| 若尔盖县| 大竹县| 疏勒县| 德安县| 石城县| 铁力市| 棋牌| 鄂伦春自治旗| 吴江市| 美姑县| 建湖县| 宣恩县| 武强县| 余干县| 襄汾县| 惠来县| 广元市| 夏邑县| 甘泉县| 北票市| 灵山县| 陈巴尔虎旗| 台东县| 平顺县| 静乐县| 右玉县| 娄烦县|