【Minecraft】worldedit|表達(dá)式蒙版 噪聲+條紋=人造摩爾紋?
成品


表達(dá)式蒙版里使用的是世界坐標(biāo),在之前的專欄里也提到過求余的操作,可以先看一下這一篇

保證被除數(shù)是大于0的,我目前所選區(qū)范圍內(nèi)x始終是正數(shù),就不用做調(diào)整
下面我先示范一下基礎(chǔ)的條紋制作

軸向:

求余使得沿著x方向出現(xiàn)條形紋理,其中10可以理解為間距(指黑色部分)加上線寬的總長,5可以理解為 線寬。調(diào)節(jié)這兩個值以獲得你想要的效果
徑向:

徑向其實就是把上述的x換成了半徑(或者說平面上距離原點的距離)sqrt(x^2+z^2)
其中最主要的是前兩個式子 x-=528;z-=-176,因為上面也說了,表達(dá)式蒙版里的表達(dá)式使用的是世界坐標(biāo),如果直接使用sqrt(x^2+z^2),此時圓心在世界的(0,0)處,為了將其移到我們所期望的位置,比如選區(qū)的中心,選區(qū)中心的坐標(biāo)是(528,-176),我們就需要讓x,z分別減去這個坐標(biāo),即 x-=528;z-=-176,此時相當(dāng)于把世界坐標(biāo)的原點移到了選區(qū)中心?(528,-176),這樣,之后的任何操作都將在此時的環(huán)境下進(jìn)行

接下來就是添加噪聲了,we總共內(nèi)置了這三種噪聲

perlin(seed,x,y,z,frequency,?octaves,?persisence)
?
voronoi(seed,x,y,z,frequency)
ridgedmulti(seed,x,y,z,frequency,octaves)
參數(shù)里單詞就不用過多解釋了,seed是種子,懂得都懂,我們只需要關(guān)心frequency頻率,其他的一律填1就夠用了,噪聲我們之前也用過

我們只需要知道,這三個噪聲函數(shù)的返回值的范圍是在0~1之間,顯然不夠在世界坐標(biāo)系下運行,我們用在表達(dá)式蒙版上時,一般在前面乘以個比較大的系數(shù),可以理解為幅值,控制噪聲影響的程度,比如80*perlin(1,x,y,z,0.02,1,1),就把范圍擴充到0~80了,效果就是我們想要的
還有重要的一點就是頻率的選取,頻率值越大,震動的程度或擾動程度就越大,反之就會月小,我個人認(rèn)為都可以把這個理解為噪聲的縮放了,在世界坐標(biāo)下,根據(jù)我的測試,一般就取0.02左右就行了,你也可以自己試試,根據(jù)需求選擇

然后就是在軸向或徑向的條紋的被除數(shù)的一邊加上噪聲了
為了不與成品重復(fù),我這里試一下其他的噪聲,并調(diào)整一下參數(shù)

再試下voronoi噪聲,是有明顯的割裂感

徑向的條紋同理,我用perlin噪聲試下,有點像木頭的紋理


做到這里我有了大膽的想法,因為我做這些就是為了給地形或建筑上色

先generate出形狀,再
//re "=x-=528;z-=-176;(sqrt(x^2+z^2)+80*perlin(1,x,y,z,0.02,1,1))%8<4 #existing" 251,
這里我把表達(dá)式和#existing用引號括起來并用空格隔開,這樣就只會影響已存在的方塊
或者只是一個火柴盒

如果當(dāng)噪聲前的系數(shù)很小時,就會引起變動很小的左右浮動,形成隨機的外立柱

如果有更好的應(yīng)用實例,我可能會更新在動態(tài)里
