體素圓生成器 — 用方塊製作圓形、球體與圓頂
製作你自己的體素圓生成器
為任何直徑生成最圓的體素/像素圓,再以可旋轉的 3D 方塊球體、圓頂或拱門預覽。免費,免登入。
體素圓生成器會接收以方塊為單位的直徑,並回傳在正方形網格上構成圓形的精確儲存格。輸入 15,你會得到 177 個方塊。輸入 9,你會得到 69 個。輸出是一份座標清單,而不是一張圖片,因此你可以將它貼進建築、當成採購清單來計數,或交給另一位建造者。免費、免登入、匯出無上限。
同一個直徑也會驅動 3D 預覽:平面圖表會變成球體、圓頂或拱門,你可以在放置任何東西之前先旋轉它。以下將說明演算法、各直徑的精確方塊數、三種輪廓樣式,以及寬度約 12 個方塊以下時會出現的失效情況。
生成器的運作方式
生成器會在正方形網格上對圓的方程式取樣,並保留中心落在半徑內的儲存格。對於直徑 D,它會建立一個 D×D 的網格,測量網格中心到每個儲存格中心的距離,並在 dx*dx + dy*dy <= r*r(其中 r = D/2)時填滿該儲存格。這就是整個演算法。由於比較是以距離的平方進行,因此不會取平方根,也不會有浮點數進位讓邊緣儲存格偏移一格。
D 決定了網格中心落在何處,而這也是各圖表之間唯一會改變的地方。直徑為奇數時,中心會落在方塊的正中央,因此偏移量是整數:D=15 時為 -7 到 7。直徑為偶數時,中心會落在四個方塊共用的角上,因此偏移量是半數:D=8 時為正負 0.5、1.5 等等。因此,兩個大小幾乎相同的圖表幾乎不共用任何座標,你也不能靠增加一列把 15 的圖表變成 16 的圖表。
這個規則沒有任何隨機成分。每個直徑都會產生一份固定、可重現的圖表:D=15 永遠是 177 個儲存格,D=9 永遠是 69 個。你可以把清單貼進錯誤回報、在第二個世界重複使用,或下個月再回來查看,座標都會一致。
沒有需要爭論的邊界平手情況
常見的顧慮是:當儲存格的中心距離正好等於半徑時,該用 <= 保留它,還是用嚴格的 < 剔除它。如果你實際算一下,這種情況永遠不會發生。直徑為奇數時,偏移量是整數,而 r*r 會以 .25 結尾,因此整數的總和永遠不可能等於它。直徑為偶數時,兩個偏移量都是半數,因此每個平方值都以 .25 結尾,總和則以 .5 結尾,而 r*r 是整數。
在任何直徑下,兩邊都不可能相等,這表示 <= 與 < 會回傳相同的圖表,而一整類「差一格」的錯誤回報也就消失了。真正的邊界情況在別處:D=3 會回傳其 3×3 網格的全部九個儲存格,連角落也算在內,因為角落的中心距離中央約 1.414,而半徑是 1.5。D=3 是一個正方形。第一個會去掉角落的直徑是 D=5。
圓 → 球體 → 圓頂 → 拱門
2D 圖表是赤道切面,同時也是佔地範圍。要得到球體,就在三個維度上執行同樣的判定:對每一層而言,切片半徑是 (r*r - h*h) 的平方根,其中 h 是球心到該層中央的距離。直徑 15 的球體有 15 層。中間那層是 177 個儲存格的圓盤。最頂層與最底層各為 21 個儲存格,也就是 5×5 的佔地範圍,因為該層的中心位於球體頂點下方半個方塊處。
圓頂是把那一疊沿水平面切開。選擇起拱線,也就是牆面不再垂直的那一層,然後只保留它上方的各層。把直徑 15 的球體沿赤道切開,會得到一座高 8 層的圓頂。只保留最上面 5 層,會得到一個淺圓帽,其底部圓環是 13 個方塊的圓,因此這個圓帽會座落在寬 13 的牆上,而不是寬 15 的牆上。
拱門是一塊板,而不是一疊。取用環狀輪廓而非填滿的圓盤,沿著單一軸向筆直擠出你想要的厚度,然後刪除起拱線以下的所有部分。一座寬 15、厚 3 個方塊、並移除圓環最下面四列的拱門,高 11 個方塊。圖表提供你寬度與圓環;厚度與起拱高度則是你另行設定的獨立輸入值。
這就是它與平面圖表的差別。像素圓圖表只提供佔地範圍,然後就結束了。它無法告訴你輪廓在頂端會收束成單一方塊,還是會攤平成平台,也無法顯示同一直徑的圓頂與拱門需要不同數量的材料。旋轉 3D 預覽,就是你在放置任何方塊之前察覺這些差異的方法。
- 圓形D×D 網格上的一個圓盤,儲存格中心落在 r 之內。它是其餘一切的佔地範圍與赤道。
- 球體每一層執行一次相同的判定,切片半徑為 sqrt(r*r - h*h)。高 D 層,赤道處寬 D 個方塊。
- 圓頂在選定的起拱線截斷的球體。半個球體是常見情況;淺圓帽需要更寬的底部圓環。
- 拱門沿單一軸向擠出的輪廓圓環,再於起拱線以下切除。厚度與高度是彼此獨立的輸入值。
方塊數量與材料
填滿的圓盤成本正好是其內部的儲存格數。這張表是生成器的輸出,而非估算:一個網格儲存格永遠等於一個方塊。
把數量當成採購清單來讀
D=15 時,填滿的圓盤是 177 個方塊,在 Minecraft 風格的物品欄中相當於兩疊 64 再加上 49。D=16 則剛好是三疊,這也是搬運材料時偶數直徑很方便的原因之一。如果你只需要圓環,D=15 會降到 40 個儲存格:同樣的輪廓,填滿的圓盤要多花超過四倍的材料。
相較於直徑,材料的選擇更能左右這個數字。實心圓盤從地面高度看會顯得平坦,因此大多數建築會用一種方塊來填滿,再用另一種來做那 40 個儲存格的輪廓,這意味著看得見的成本是輪廓,而填滿的部分則用你手邊多餘的材料即可。厚 3 個方塊的層會讓輪廓數量變成三倍。中空的塔基只使用輪廓,內部留空,而當你蓋成實心時,要付的代價就是這個內部。
| 直徑(方塊) | 半徑 | 填滿的方塊 | 換算為 64 一疊 |
|---|---|---|---|
| 3 | 1.5 | 9 | - |
| 5 | 2.5 | 21 | - |
| 7 | 3.5 | 37 | - |
| 8 | 4 | 52 | - |
| 9 | 4.5 | 69 | 1 疊 + 5 |
| 11 | 5.5 | 97 | 1 疊 + 33 |
| 15 | 7.5 | 177 | 2 疊 + 49 |
| 16 | 8 | 192 | 3 疊 |
三種輪廓樣式
樣式控制筆畫的粗細,以及它在網格上的位置。它不會改變填滿的數量。請在放置任何東西之前先選好樣式,因為事後切換會移動軸上的每一個儲存格。
偶數厚度
用於偶數直徑:4、8、16、32。圖形的中心落在四個方塊相接的角上,因此輪廓沿兩軸對稱,但筆畫在頂部、底部、左側與右側都是偶數個方塊寬。偶數圖表能乾淨地縮放——直徑加倍時比例仍然維持——這也是大型建築往往採用它們的原因。
奇數厚度
用於奇數直徑:3、5、9、15、31。中心落在一個方塊上,因此會有單一的中間行與單一的中間列,圖形沿它們對稱。奇數圖表才是在小尺寸下看起來像圓形的那一種,因為中央的方塊為你的眼睛提供了一個固定的中心,用來判斷曲線。
平坦邊
平坦化變體保留了奇偶性,但把四個基本方位上各自那個單一的極端儲存格,替換成一段平坦的連續方塊。在 D=9 時,預設的奇數圖表會在最左側放一個方塊。平坦化變體會讓最左側那一行變成 3 個方塊高,因此輪廓看起來像一個圓角正方形。當圓形必須銜接筆直的牆面、門框或軌道線時就使用它,因為平坦的接縫能對齊,而單一的點不行。
01
在寬度約 12 個方塊以下時,樣式比直徑更重要。D=3 是一個正方形,D=5 是切掉角落的正方形,而 D=7 是最小的、看起來像圓形的圖表。
02
在那樣的規模下,水井、塔基、噴泉或樹坑請使用 9 或 11 的奇數直徑,並搭配奇數厚度樣式。
03
把平坦邊變體保留給任何必須緊貼筆直邊緣的東西,並在放置方塊之前於 3D 預覽中檢查那條邊。
在體素世界中建造它
圖表唯有在實際矗立起來之後才有用。3D 遊戲建構工具會把座標清單當作放置樣式,因此產生預覽的同一組數字,也會在你能走動的世界中產生方塊。你不需要在編輯器裡手動重新推導曲線,也不用目測對角線。
預覽是你察覺平面圖表所隱藏之問題的地方:圓環中缺了一個方塊的凹口、在頂端附近翻轉奇偶性並留下一道平台的圓頂切片、玩家爬不上去的對角階梯。這些在螢幕上只需幾秒就能修正,但在一百個方塊放下之後,代價就高得多。Mini World 與 The Cyclops' Island 都是這樣蓋成的——先有平面圖,再立起,然後走進去。
如果你想要的是平面的 Sprite 圓形而非方塊形狀——例如硬幣、環狀計數器、介面徽章——Agent Sprite Forge 會採用相同的半徑,並讓像素版本與方塊版本保持一致,兩者不會漸行漸遠。
01
選好直徑與輪廓樣式,然後複製座標清單。把數字留著;每一層切片你都會想要同一份圖表。
02
在 3D 遊戲建構工具中開啟一個新世界,並把地面網格設為你的直徑或其倍數,讓佔地範圍能對齊,而不會出現半個方塊的偏移。
03
先放置輪廓的儲存格,再往內填滿。先放輪廓會立刻暴露錯誤的座標;先填滿則會把它藏到你把圓環闔上為止。
04
把圖形立起來。若是牆面或塔,就將輪廓筆直向上擠出;若是圓頂或球體,則換成各層的切片直徑。
05
在加入第二種材料之前,先從地面高度檢查輪廓。從正上方看,每個圓形看起來都正確。
06
進入遊玩模式,沿著周邊走一圈。如果圓環只有一個方塊厚而後面空無一物,對角階梯上的碰撞判定就會讓你卡住。
走進它所屬的世界
Sprite 是一個無處可站的角色。最後這一步是別人沒有提供的:把你剛才做好的圖集放進一個有人能走動的世界——一座小島、一顆行星、一個下雨的街角。這個網站上的每個世界都是由一段文字描述製作而成,並發布成一個你能遊玩的頁面。
FAQ
體素圓生成器可以免費使用嗎? +
可以。不需要登入、沒有匯出限制,座標清單上也沒有浮水印。輸出是純文字,因此沒有任何部分被帳號限制住。
我會得到精確的 1:1 方塊圖表嗎? +
會。在任何直徑下,一個網格儲存格就是一個方塊:直徑 15 的圓會回傳 177 個儲存格,你就放置 177 個方塊。圖表與建築之間沒有縮放處理,也沒有四捨五入的步驟。
它能生成球體與圓頂,還是只能生成平面圓形? +
兩者都能,而且來自同一個直徑。球體會以 sqrt(r*r - h*h) 作為切片半徑,對每一層執行半徑判定;而圓頂則是將該球體在你選定的起拱線處截斷而成。
我該用奇數還是偶數直徑? +
約 16 個方塊以下的東西都用奇數。奇數直徑會在中心放一個方塊,因此圖形沿中間的列與行對稱。偶數直徑會把中心放在角上,並在四個基本方位明顯收窄。
體素究竟是什麼? +
體素是 3D 網格中的一個儲存格——一個固定大小的立方體。在這些圖表中,一個體素就是一個方塊,這也是為什麼儲存格數同時可當作材料數量。
我可以用這份圖表來蓋 Minecraft 風格的建築嗎? +
可以。把每個儲存格當成一個方塊。這份圖表可作為佔地範圍、牆面、塔基、噴泉邊緣或圓頂的一層,而儲存格數也能直接沿用為材料清單。
返回 3D 遊戲建構工具
全部 31 個已完成的 3D 世界、遊戲與場景都集中在同一頁——每一個都能遊玩。