創作內容

1 GP

【心得】FastAsyncWorldEdit函數式地形建構(上期)

作者:JeadTW│2022-12-27 01:09:32│巴幣:2│人氣:209
注意!
1.本篇只是提供一種可能性快速構建地形,主要用途為FAWE技術展示,實務上超大範圍地形構建有更好的處理方式。
2.本篇可能不適合剛入門小木斧新手使用。


前言:
本次所使用的是FAWE,可以說是WorldEdit的進階版,相比原版更多的功能與參數,但也包含原版應有的功能,非常推薦各位建築巴友安裝替代原版。

我所使用FAWE版本為
FastAsyncWorldEdit-Bukkit-2.3.1-SNAPSHOT-230.jar


正文開始:
這次要講解的是在使用噪聲算法來構建地形,因為快過年了比較忙,分成上下兩篇來講解,年後有空在來更新下期。

————-上篇———
1.噪聲生成高度圖
2.deform 變換 放大高度圖
3.高度圖轉化成立體地形
————-下篇———-
4.自然化
5.裝飾生成

開始動手GO!


第一步噪聲生成地形圖

這裡使用FAWE內建的柏林噪聲(Perlinnoise)函數構建高度圖,FAWE內建多種噪聲算法,如果你感興趣可以嘗試其他的,一般來說遊戲業內用的是用灰階來顯示高度層次,不過minecraft內只有黑、白、灰與淺灰四種,不足以來彌補更多層次訊息,所以我改用羊毛數值替換灰階,羊毛有16種數值足以補足基礎層次訊息,如果需要更複雜這裡建議可以用同時採用混泥土、陶土或其他顏色方塊。

我們引入一組噪聲函數在//replace 來構建數組,由於是建立二維XZ平面,Y軸不用做什麼修正。

//replace =perlin(8964,x/3,y,z/3,0.08,2,0.2)<An 35:Bn

在這數組中
An就是我們所需高度採樣數據組
Bn為羊毛,在Minecraft 裡面羊毛有16種數據,所以對映n值最大為16,然後Bn 數組就為B1=35:0  B2=35:1 B3=35:2  ...……   B15=35:14 B16=35:15

函數運算結果區間最值為1,所以我們須將An數值為16等份對應Bn,1/16=0.625,所以An每份為0.625*Bn,便可以知道An數組為
A1=0.0625  A2=0.125 A3=0.1875 ……… A15=0.9375  A16=1

再來代回函數數組解析
//replace =perlin(8964,x/3,y,z/3,0.08,2,0.2)<0.0625 35:0
//replace =perlin(8964,x/3,y,z/3,0.08,2,0.2)<0.125 35:1
//replace =perlin(8964,x/3,y,z/3,0.08,2,0.2)<0.1875 35:2
.
.
//replace =perlin(8964,x/3,y,z/3,0.08,2,0.2)<0.9375 35:14
//replace =perlin(8964,x/3,y,z/3,0.08,2,0.2)<1 35:15

將這些指令從n=16開始輸入,我們便會得到一張16色差高度圖。




第二步 //deform 變換地形圖

我們從第一步得到高度圖後,會發現一個大問題,這張高度層次太密集了,不方便做地形處理,所以引入另一條函數指令來放大整張地圖,讓他高度層次之間有足夠區域做過渡處理。

//deform -c x/=2;z/=2
將整個高度圖XZ平面 放大2倍

由於我選區未計算好,所以在放大過程中被裁切了部分......
左邊放大2倍 右邊原圖



這裡要注意的點
1.這指令在過於龐大的選區計算時候會出錯,建議如果過大選區分開計算XYZ軸
2.新選區要原先選區XZ軸至少設定的倍率再大一點,否則轉換會有部分被裁減
3.該指令倍率不宜太大,新選區的面積將會是原先面積N^2倍大,如果是立體空間,計算量將是N^3,意味者你的電腦計算需要夠好,否則會卡死。
4.記憶體給大一點,這裡我伺服端設定記憶體為40GB。


第三步 高度圖轉化成立體地形
在這一步我們將剛剛修正好的高度圖做一個轉換

1.先建立16個由高到低等差排列的羊毛柱,這個部分不一定是要做羊毛柱,也可以是浮空半徑不同的羊毛,或是其他特殊造型,這裡將會決定轉換效果。

2.這邊先從最簡單的等差排列羊毛柱說起,每一層中間相差3格高,最矮的我們簡單命名JeadTWM/J350然後存成schm檔案並且創建一個資料夾JeadTWM集合這些檔案,好以後歸類,依序命名下去JeadTWM/J351、JeadTWM/J352………

3.使用#fullcopy 樣板進行轉換,注意該樣板只有FAWE有,我們在第一步An建立的高度圖有16層,將剛剛存的schm檔案與對應高度做連結對換。

用這組做對換
//replace 35:N  #fullcopy[高度N]


//replace 35:0  #fullcopy[JeadTWM/J350]
//replace 35:1  #fullcopy[JeadTWM/J351]
//replace 35:2  #fullcopy[JeadTWM/J352]
//replace 35:3  #fullcopy[JeadTWM/J353]
.
.
.
.
//replace 35:16  #fullcopy[JeadTWM/J3515]
到這裡最雛型就完成,完成轉換如下圖
由於是採用等差數列構建,相鄰層之間起伏不大,使整體構建完會很類似丘陵地形。


示範相同高度圖情況下更改schem數據組排列的地形。
先從如何取得地形排列數據,這問題可以從原始地形數據下手,先跑到自然地形裡面選一座自己喜歡的山坡。

再來切片這座山坡

再來使用//g 模擬類似的曲線

//g -h 1 rotate(y,z,-0.1);z*2>=((y*2-1)^5)+0.5



再選擇想要的區間16等份,計算每一等份變化量,這裡可以利用Excel去計算近似模擬



便可以得到排列
1 2 3 4 5 7 11 20 28 32………..
在帶回羊毛高度數據組便可以得到以下排列


最後帶回高度圖就會生成地形。


似乎比起等差數列來得更"自然點"

這裡要注意的事情:
Q:有人會問,未什麼不用//stack -m 要用schem模式建立?
A給出一些好處:
A1:第一次建立地形schem數據雖然麻煩,但是後續只要照前次數據包就可以快速建立
A2:排列不一定要是等差,可以是等比級數或自己定義排列
A3:不一定要是柱子,可以是其他形狀這樣生成地形可以有空島 洞穴 等多樣地形


後記
1.構建的過程中重複的指令要一直打,目前正在開發一種新的的腳本使用方式,由HsiaoHsiao提出構想,TWME建立腳本,我負責核心函數參數修改,可能要到2023年年中才會進入測試吧,如果成功會把成果放上來供版上巴友參考。
2.本篇上期是基礎地形生成,當然還是需要手修來完成細節,但整體比從0開始堆來的快多了


特別感謝

台灣創造服服主 TWME
築夢物語 sleepyrose
緋紅伺服器服主 FlandreScar

指令不懂可以參考以下文章,有講解

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5629172
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:minecraft

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★piggg4 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【心得】FAWE 筆刷系... 後一篇:【心得】FAWE 筆刷系...

追蹤私訊切換新版閱覽

作品資料夾

coopdar1345我的GP超人
「總有一天,人們會再度跨越障礙,再絕望的時刻,都存在著希望,只要妳如此深信著。」——《遙遠的星球》看更多我要大聲說昨天21:30


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】