跳到主要內容

發表文章

目前顯示的是有「Procedural Materials」標籤的文章

Blender 2.9: 葉子程序紋理 by Dr. Blender

概覽 0:08 葉片形狀 0:53 葉脈 3:31 葉柄 6:36 小葉脈 12:21 組合 14:29 葉緣形狀 18:21 顏色 19:45

Blender 2.9x Procedural Texture : 編織 Weaver

基本結構 布料編織的基本結構如上圖:紗線彎成波浪形交疊而成,相鄰的平行線在同位置分別爲波峯、波谷。將平行 X 軸的紗線稱爲「緯線」、平行 Y 軸的紗線稱爲「經線」;緯線的波峯跟經線的波谷交疊,反之亦然。 Sine 函數 用 Math 節點的 Sine 函數來彎曲; 因爲 Sine 函數的重複週期是 2pi,所以先用 Vector Math 的 Scale 運算將座標系放大 2 倍,再將分離出來的 X 軸乘上 pi (直接在 Multiply 運算的第 2 個 Value 欄位輸入 pi、按 ENTER,Blender 自動轉換爲圓周率),使 X 軸的範圍達到 2pi,如此就可觀察到 Sine 函數的一個完整週期。 緯線 將座標系放大 4 倍,呈現 2 個完整週期。 相鄰兩條線必須錯開半個週期,錯開方法詳: http://digitized-life.blogspot.com/2020/12/blender-28x-procedural-tiling-materials.html 經線 用製作緯線同樣的方法製作經線。上圖顯示經線的波峯和緯線的波谷在同樣位置,因此必須將經線於 Y 軸平移半個週期,如下圖。 經緯交織 用 Math 節點的 Maximum 運算將經緯線交織在一起:Maximum 在兩個數值間取最大值,也就是取疊在上方的紗線。 紗線 上圖的紗線是平面彎曲,實際的紗線是圓柱體。我們在經線的 Sine 函數後連結 Math 節點的 Absolute 絕對值運算,把負值的波谷也變成正值的波峯,產生直的緯線,如下圖。 將直的緯線乘上讓其彎曲的 Sine 函數,得到彎曲的緯線,如下圖。 用同樣的方法製作經線,但我們發現上圖並沒有產生交織的結果。原因在於波谷部分全部是負值,Maximum 最大值運算取到的都是正值的波峯部分。解決之道是在 Sine 函數之後加 1,使波谷部分都能 >= 0,如下圖。 線寬 在 Absolute 運算節點後連結 1 Color Mix 節點,混色模式選 Color Burn。我對Color Burn 的理解是:如果 Color2 比 Color1 暗,就把 Color 1 變成黑色,Color2 是白色(R=G=B=1)則不起任何作用。因此我們可以改變 Color2 的顏色來改變紗線的寬度。但因改變顏色太麻煩,所以將 ...

Blender 2.8x - Procedural Textures :幾何方程式

先繪製座標方格: 用 Object 紋理座標,座標原點位於平面中心; 用 Vector Math 節點的 Modulo 運算將各向座標分割爲 10 等分; 使用 Vector Math 節點的 Abolute 運算將負值轉爲正值,否則原點左下方的第 4 象限會是黑色; 用 Hue Saturation Value 節點增強格子的亮度。 X = 0.3 Math 節點的 Greater Than 運算:Greater Than 運算只會輸出 0、1 兩個值,視輸入值跟 Threshold 門檻值比較的結果而定。當 輸入值 > 門檻值,輸出 1; 輸入值 < 門檻值,輸出 0。  X = 0.3 用 Separate XYZ 節點分離各座標軸; 將 X 軸作爲輸入值、0.3 當作門檻值:X < 0.3 輸出 0,爲黑色、X > 0.3 輸出 1,爲白色 黑色區域跟白色區域的邊界線就是方程式 X = 0.3 的幾何圖形。 用 Color Mix 節點的 Multiply (相乘)模式, X = Y  Y = sin(X) 三角函數 Sine 每隔 2pi 循環,所以先用 Vector Math 節點的 Scale 運算將座標放大 pi (3.14159)倍。  圓:X 2 + Y 2 = r 2 Math 節點的 Greater Than 運算的 Threshold 門檻值為圓半徑。 直線與向量 二維直線方程式 ax+by=0 就是向量 (a,b) 跟 向量 (x,y) 的內積;而向量 (a,b) 是垂直於直線 ax+by=0 (法向量)。 直線方程式 ax+by=0 的斜率爲 a/b。

Blender 2.8x - Procedural Tiling Materials :人字砌

人字砌是磚塊的短邊貼齊另一塊磚的長邊,看起來像人字。 分析上圖左,紅色磚是水平順砌,每隔一塊磚由垂直順砌的藍色磚取代: 首先製作之字形圖案的黑白遮罩(上圖右); 製作水平順砌; 製作垂直順砌; 用之字形遮罩結合水平、垂直順砌。  1. 之字形圖案遮罩 用 Vector Math 的 Scale 運算將座標範圍放大 8 倍; 用 Separate XYZ 節點分離 X 軸、用 Math 節點的 Modulo 運算將其分爲 0~4 的兩段; 用 Math 節點的 Greater Than 運算將 0 指定給 < 2 的區域(黑色)、1 指定給 > 2 的區域(白色)。 在 Separate XYZ 和 Modulo 節點之間加入 Math 節點的 Snap 運算及 Math 節點的 Add 運算: Snap 運算把 Y 軸的連續座標分爲以 1 進位的 8 等分區域; 再用 Add 運算將每個區域的 X 軸原點移動; Modulo 運算結果如下圖。 之字形圖案節點樹如下圖: 2./3. 水平、垂直順砌 如第 4 張圖,我們可以很快地製作水平順砌: 垂直順砌也一樣,只要調換 X, Y 的接法: 4. 人字砌 把之字形圖案接到 Color Mix 節點的 Fac 輸入端,完成人字砌: 雙籃編織 把每個 Math Snap 節點的 Increment (增量) 改爲 2,就成了雙籃編織砌:

Blender 2.8x - Procedural Tiling Materials 7:丁磚

砌磚時,每隔數列改砌長度較短的磚,該列磚稱爲丁磚。如上圖第 4、8 列。 丁磚位置 將貼圖座標放大 8 倍。  每 4 列出現 1 列丁磚: Modulo 運算(Math 節點)把 Y 軸分爲 0~4 的 2 段; Less Than 使 <1 的部分爲 1 (白色)、>1 的部分爲 0 (黑色)。  丁磚垂直移動: 在 Modulo 運算(Math 節點)前加入 Math 節點,運算方法選 Add。加上不同整數就可移動Y軸,垂直移動丁磚列的位置。 磚塊寬度: 丁磚寬度由向量 Modulo 運算的除數向量的 X 值決定。白色部分爲丁磚,X = 0.5、黑色部分爲整磚,X = 2。 用 Color Mix 節點將寬度值指定給不同顏色的區域,原本黑色區域變成灰色、白色區域亮度更亮。 用 Combine XYZ 節點結合成除數向量(上圖); 向量 Modulo 運算的結果如下圖。 丁磚水平移位 如同改變整磚交錯位置,在 Less Than 後增加一個 Math 節點的 Multiply 運算,改變相乘的值,再加到 X 座標軸,即可調整丁磚交錯的位置。

Blender 2.8x - Procedural Tiling Materials 6:砌磚

磚塊比例爲長 2、高 1,由下往上共 4 列磚,其中 2、4 列磚跟 1、3 列磚錯開半塊,也就是 2、4 列磚的 x 座標往右移動 1 塊磚高的距離。 用 Vector Math 節點的 Scale 運算把座標放大 4 倍。 用 Vector Math 節點的 Modulo 運算可以輕易的分割區塊。但無法移動座標。 用 Seprate XYZ 節點分離各座標軸; Math 節點的 Modulo 運算把 Y 軸分爲 0~2 的兩段。 Math 節點的 Greater Than 運算使 < 1 的部分爲 0、> 1 的部分爲 1。 Greater Than 運算是把 輸入值跟 Threshold (門檻) 值比較: > Threshold 爲真,輸出 1; < Threshold 爲假,輸出 0。 用 Math 節點的 Add 運算把 Greater Than 運算的結果加到 X 軸的每一點上。 用 Combine XYZ 節點把處理過的 X 軸跟原有的 Y 軸結合成新的座標值,再用 Vector Math 節點的 Modulo 運算就得到我們想要的結果。 交錯位置 在 Greater Than 跟 Add 之間增加一個 Math 節點的 Multiply 運算,改變相乘的值,即可調整磚塊交錯的位置。 磚塊比例 改變 Modulo 運算除數向量的 X 值,即可調整磚塊的長、高比。

Blender 2.8x - Procedural Tiling Materials 5:旋轉

加入一 Vector Rotate 節點(SHIFT_A -> Vector -> Vector Rotate),可旋轉區塊: Center:旋轉中心。取 Moulo 分段值的一半,就可把旋轉中心移到區塊的中央。 Angle:旋轉角度。輸入角度,Blender 會把角度(圓周=360度)轉爲徑度(圓周=2pi)。如果是輸入端連結到其他節點,Blender 直接視爲徑度。 我們可以加入另一個 4D White Noise 紋理節點,更改 W 欄位的值以輸出不同的隨機值,創造更多的紋理變化。  

Blender 2.8x - Procedural Tiling Materials 4:隨機

加入一 Vector Math 節點(SHIFT_A -> Converter -> Vector Math),運算方法選 Snap,這个功能會把連續函數改換做以 Increment 欄位內的數字為增量的階狀折線。可以看到 Displacement 的效果從斜面變爲一階階的平臺。 White Noise Texture SHIFT_A -> Texture ->  White Noise Texture 把 Snap 節點跟 White Noise 紋理連結,Value 輸出端區會爲各個區塊隨機輸出 0~1 之間的不同數字、color 輸出端區會隨機輸出不同的顏色。 把 White Noise 紋理節點的維度(Dimension)改爲 4D,更改 W 欄位的值(就像 random seed),會輸出不同的隨機值。  

Blender 2.8x - Procedural Tiling Materials 3:邊界線(接縫)

 數值視覺化:Displacement 節點 (Cycles Only)  SeparateXYZ 節點能夠將座標(向量)不同軸向的值分離出來,供使用者個別處理。 Displacement 節點只在 Cycles 算繪引擎有效。 加入一個 Displacement 節點 (SHIFT_A -> Vector -> Displacement),把 SeparateXYZ 節點的 X 輸出端連結到 Displacement 節點的 Height 輸入端、 Displacement 節點的 Displacement 輸出端連結到 Material Ouput 節點的 Displacement 輸出端。 從 3D Viewport 的算繪預覽,可以看到平面成了斜面 (如果沒有變化,到材質分頁 -> Settings 面板 -> Surface 子面板 -> Displacement 選 Displacement and Bump)。如 Displacement 編修器,Displacement 節點可以根據輸入值在物體表面產生高度變化。 除了 Viewer 節點,我們也能使用 Displacement 節點來觀察各節點的效用。 邊界線 Ping-pong 節點 Ping-pong 節點 (SHIFT_A -> Convertor -> Math -> 運算方法選 Ping-pong) 能把輸入的數值轉爲反覆的數值區間循環,就跟乒乓球上下彈跳一樣。 Scale 欄位決定彈跳高點(低點) 的位置。 我們利用 ping-pong 節點分別來定義區塊 x, y 軸兩向的邊界。 MixRGB: Darken Ping-pong 節點只能定義一個方向的邊界,我們利用 MixRGB 節點(SHIFT_A -> Color -> MixRGB)的 Darken 混色方法來結合兩向的邊界,定義區塊範圍。Darken 方法是比較兩幅圖像中同樣位置的畫素,取顏色較深的,得到新的圖像。 Math:Minimum SHIFT_A -> Convertor -> Math -> 運算方法選 Minimum 可視爲 MixRGB: Darken 的數值化版本,兩數比較取最小值 Math:Smooth Min...