Rotation Transform::Substance Designer Custom Function

學習目標

製作旋轉函數, 要製作函數使 Mask 在 360度內可以旋轉。

製作旋轉函數並添加。

製作後儲存成 sbsar ,在 Substance Player 裏確認。
製作用戶函數。 直接使用 Linear Interpolation 案例來進行。

在這裏插入圖片描述
本次案例的目標是旋轉 Checker 1 ,並可以修改旋轉速度。

在這裏插入圖片描述
再加強以上函數。

內含旋轉函數。

在這裏插入圖片描述
讓 Mask 可以 360 度旋轉,如上圖一樣擴展。
在這裏插入圖片描述
從 Input Value 獲取 45度相關輸入,組成適用的函數就可以了。
在這裏插入圖片描述
45度旋轉結果。
適用動畫,用特定速度旋轉的函數用 Input Value 獲取時間和旋轉角度兩個值,要實現得更復雜點。內含變量參考 $time 就可以了。
Substance designer 5.0 不支持內含函數,所以之前是直接製作使用的。但是現在的版本這些函數已經變成了更方便的內含函數。
來簡單看下並製作吧。

添加變量。
1. 旋轉角度。
2. 旋轉軸。
在這裏插入圖片描述
選擇 Pixel Processor Node 並添加2個變量。
旋轉角度 rotation 用 Float1 數據類型添加,旋轉中心軸需要用 X 和 Y 相關的值,所以添加爲 Float2 數據類型,並把變量名變更爲 pivot(軸) 。
在這裏插入圖片描述
連接外部輸入。
使用 Input Value。

添加兩個 Input Value ,各自命名修改爲 Degree 和 Ration Pivot 。
在這裏插入圖片描述
爲了旋轉角度選擇 Input Value Node ,在 Label 輸入 Degree ,並添加畫面標識名字。
Identifirer 變更爲 roation 後 Type 是 Float1 ,界面換成 Angle 。
Default Turns 變更爲 45 , Max 的基本值是 1 ,所以 Max 值變更爲 360 後把 Default Turns 值修改爲 45 就可以了。
有時候 Default 最大值不能改成比 1 大,這是 Substance designer 的界面Bug,直接用最大值輸入 Default 值(比如案例裏是 360 ) 畫面 Slider 的最大值就會變成 Max 值。

在這裏插入圖片描述
選擇爲了旋轉軸而添加的 Input Value Node , idenrifier 命名變更爲 pivot , Type 變更爲 Float2 。
爲了方便查看 Label 也變更爲 Rotation Pivot 。
因爲會以圖片的中心爲準旋轉,所以 Default XY 設置成 0.5 。
這個值會用在內部函數的計算。

打開前一個章節制作的案例,並進入 Pixel Processor 編輯窗口。
在這裏插入圖片描述
Extend of Mask Texutre 實現的部分應該如上圖。
先從這部分開始修改吧。

添加 Rotation Vec2 。

在這裏插入圖片描述
在原有 Extend of Mask Texture 項目的 $pos 和 input 2 的 Samples Gray 中間添加 Rotate Vec2 。

在這裏插入圖片描述
在節點搜索窗搜索 Rotate ,然後添加 Rotate Vec2 內含函數就可以了。

在這裏插入圖片描述
Vec2 會輸入 UV 座標等內容。
通常以內含變量收入 $pos 。
Angle 連接旋轉角度。
Pivot 連接要旋轉的圖片的旋轉軸。
來簡單查看下 Rotate Vec2 內部結構。
在這裏插入圖片描述
rotate Vec2 內含函數是這種實現方式。
在這裏插入圖片描述
在輸入的圖片 UV position ,也就是從 $pos xy 值去掉 pivot xy 值把圖片 Offset 到 $pos 的左下角。

在這裏插入圖片描述
就這樣 Offset 到角上的狀態下旋轉的話,出來的是以圖片的中心爲準旋轉的結果。旋轉後最終再重新把圖片的像素以 $pos 爲準做 offset 。

Operator/Add 會在加上 pivot xy 值。

Rotation Angle Input 計算。

在這裏插入圖片描述

添加 Get Float ,登記 #ration 。
添加 Division Node(除法) 和 Float Node。
Float Node 值變更爲 360 。
#rotation 輸入變量除以 360。
這部分是爲了讓界面直觀才做的,用 0 到 1 值也可以實現 360度旋轉, 爲了方便 #rotation 的最少、最大輸入值設成了 0到 360。在內部函數重新分下這個,使它進行正常計算。

在這裏插入圖片描述
添加 Get Float2 並登記 #pivot 。

在這裏插入圖片描述
Division node 連接到 Rotate Vec2 的 angle , Pivot node 連接到 Rotate Vec2 的 pivot 。

有時 Rotate Vec2 的旋轉值結果是不正確的。
爲了防止這個而設置 Clamp ,對 XY 會各自設成 min : 0.001 和 max : 0.999 。

一個個來實現下吧。

在這裏插入圖片描述
添加兩個 Swizzle Node ,各自設成 X 和 Y 。
Rotate Vec2 的輸出部分各自連接到 Swizzle Node X 和 Y 。
Vec2 值分成兩個 Component 了。
現在添加 Clamp node 並設置值就可以了。
在這裏插入圖片描述

添加兩個 Float node ,各自設成 0.001 和 0.001 。
添加兩個 Clamp node , min(0.001) 和 max(0.999) 各自連接 float 值。
Clamp 的 input 連接到分離的 X 和 Y component 。

這樣旋轉函數部分就實現完成了,這個再連到對應 mask 的 sampler 輸入部分。

最終旋轉函數。

在這裏插入圖片描述

About JP

鏈接: Website.
在這裏插入圖片描述
在這裏插入圖片描述
出生在韓國的TA。
1997年開始從事電腦圖形視覺化工作後,在這個行業已經有21年經驗了。
在多個網絡遊戲公司引領過美術團隊,之前在allegorithmic擔任TA負責人,在中國網易盤古工作室擔任TA總監,現在是巨人網絡TA部門的總負責人。
懶惰的人才有創意”是他堅信並執行的哲學道理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章