發表文章

目前顯示的是 7月, 2024的文章

Blender:Geometry Node 應用於營造法式生成大木作構件初探-卷殺折線標準化篇

圖片
摘要 本文探索了透過修改 Blender 原始碼來實作客製化的 Geometry Node。 前言 上一篇文提到計算卷殺的折線非常麻煩,需要計算各個等分點並計算交點。不過其實《營造法式》中提到的卷殺的折線其實十分固定,不同部位的折線只要等分的數字相同,皆可以被視作同樣的折線經過線性變換,也就是說我們只要計算一個折線後透過仿射變換就能套用到其他構件上的不同位置上,只要等分數相等。 另外我們也可以透過調整等分數來調整折線的柔化程度,例如實例中有些栱頭卷殺的等分點就不是 4 * 4,可能是 3 * 3,藉由簡單的線性變換也能控制卷殺曲線的長寬。 那麼不同等分的折線有沒有辦法找出各點的座標的公式呢?我發現其實可以。以下就用長寬相等的矩形,以二等分和三等分的卷殺為例。 二與三等分的卷殺推導公式  簡單繪製兩等分與三等分的卷殺如下圖: 若以 Start 為原點,矩形為 1 * 1 的正方形,Start 和 End 在圖中只有繪製在三等分的圖上,實際上二等分亦同樣位置。 Start 和 End 的點座標為: Start(0, 0) End  (1, 1) 二等分的 D1 點座標為: D1(1/3, 2/3) 三等分的 T1、T2 點座標為: T1(1/6, 3/6) T2(3/6, 5/6) 此時還未看見規律,但是依照順序從 Start 到 End 逐一計算座標差值即可以發現規律: 二等分的座標差值: D1-Start(1/3, 2/3) End-D1  (2/3, 1/3) 三等分的座標差值: T1-Start(1/6, 3/6) T2-T1   (2/6, 2/6) End-T2  (3/6, 1/6) 從此可以發現各個點的座標會是等差級數。當有 N 等分,分母就是前 N 個自然數的和,而各個點由 Start 開始到 End 的 Index K 為 [0, N],共 N + 1 個點。 X 的分子便是前 K 個自然數的和,而 Y 的分子為反向,為由 N 開始 K 個的遞減自然數和,而這樣才能使得最後一個點座標為 (1, 1)。 折線點公式 N為自然數時,對於 N 等分的卷殺其產生的折線上, Index K 由 0 開始時,其第 K 點 P K 座標為: P K (S K /S N , T N /S N ) S K =...

Blender:Geometry Node 應用於營造法式生成大木作構件初探-梭柱篇

圖片
摘要 本文初步探索了透過使用 Blender 內建 Geometry Node 來程序化生成建築構件。 前言 最近正在學習 Blender 的 Geometry Node,使用程序化生成模型非常的吸引我,看了一些教學後在想時不是要做些什麼當作練習。第一個想到的其實是應用在建築構件的生成。 營造法式的大木作構件感覺就是一個很好的題材,因為大木作構建本身在營造法式中已經很詳細載明了做法。所以很適合做成程序化生成模型,此外我想到另一個優點是可以快速透過調整參數控制品質,例如曲線的段數和榫卯可以透過參數調整,便於處理 LOD 或是不同使用情境。 這次初探會針對梭柱嘗試製作程序化生成模型,首先我們要了解營造法式中針對梭柱的規則,再來藉由這些規格轉化成程程序化生成模型的邏輯。  該專案也有上傳至 Github 術語簡單介紹 因為再來會很常使用到中國傳統建築的一些術語,所以先在此簡單解釋: 卷殺:是指對構件砍削出折線或曲線的行為,藉以柔化外觀 材分 :宋代《營造法式》中使用的這個建築尺度單位,主要用來控制建築構件尺寸的模數。1 材可細分為 15 分,但是這個一材的大小隨著等級可大可小。另外還有栔,為 10 分。 梭柱的規格 梭柱的規定在 《營造法式》第五卷·大木作制度二 有敘述,這邊只擷取與梭柱相關,亦不擷取與升起側腳相關的部分。 凡用柱之製,若殿閣即徑兩材兩栔至三材,若廳堂柱即徑兩材一栔,餘屋即徑一材一栔至兩材。若廳堂等屋內柱,皆隨舉勢定其短長,以下檐柱為則。(若副階廊舍,下檐柱雖長,不越間之廣。 …… 凡殺梭柱之法,隨柱之長,分為三分。上一分又分為三分,如栱卷殺,漸收至上,徑比櫨枓底四周各出四分;又量柱頭四分,緊殺如覆盆樣,令柱頭與櫨枓底相副。其柱身下一分殺令徑圍與中一分同。 …… 從以上敘述可以知道柱子有三個主要的參數,直徑與高(長)、材分等級來決定一分(U)的大小,然而高卻沒有非常詳細的規定,此處以實例常見的直徑(D)與高度(H)比為 1:9 假定。 H = 9 * D D = 42 ~ 45 * U 有關卷殺,柱身上方寫的非常清楚,柱身下方卻不是很明瞭,我們此處假設只有上方有卷殺,也就是如上敘述的柱身上方 1/3 的部分進行卷殺。 另外一個問題來了「徑比櫨枓底四周...