substance designer的高級節點pixel processor 和 FX-Map


這是兩個高級節點
很多人搞不清這是做什麼的

在這裏簡單介紹一下


pixel processor 用來處理像素,可以是認爲純程序調用的節點,因爲輸入輸出直接就是顏色,這個和其他節點裏面使用function更直接
FX-Map 作爲很多節點的底層節點,更爲強大,可以處理諸如循環之類的其他算法,還能在層與層之間混合,提供很多預設圖形


pixel processor

作爲最爲直接的純程序化節點,意味着它可以做很多事情,標題圖片就是通過這個來創建的


如上圖是我從shadertoy上找了一個濾鏡處理代碼改寫的,可以看到pixel processor有可以直接通過改造shader代碼實現需要的效果

不同於在其他節點的屬性中創建函數需要特定的輸出類型,這個節點可以直接以單個或者多個圖片作爲輸入,而且直接以圖片進行輸出。
需要使用的話,首先說一下里面的常用節點(注意這裏面和其他節點都可以創建的function是相同的,主要和shader語言中有區別的對應下)

各種常量(這個比較重要所以具體說下)


  • getfloat

裏面有一個系統內參數$time可以使用 用於在player當中可以輸出序列幀(要求版本比較高)
$number 只能在 fx-map中使用,而且必須有iterate節點

  • getfloat2

裏系統內參數有$pos相當於uv  還有兩個scale 可以通過 vector float4再合成一個2維的來顯示紅綠色的uv,通常結合sampler使用

size 像素長寬 對應節點外outputsize,通常用來獲得單個像素大小
sizelog2 像素長寬2的指數大小  比如1024返回10 2048返回11

getfloat3 和 4並沒有系統內變量

  • getint

有$tiling 和 $normalformat 前者貌似是烘焙裏面的一個變量,只能看到在更新裏有,並沒有搜索到實際作用,後者感覺涉及到substance automation toolkit裏面的東西了,感覺是用來設置判斷normal類型的

  • getint2

有$uvtile 使用udim時候,可以用這個取到udim位置 具體可以看blog裏面的,雖然暫時文檔還查不到

https://www.allegorithmic.com/blog/substance-designer-spring-release-faster-bigger-baker

getint3 和 4並沒有系統內變量
完整系統變量參考下面地址(有些沒有的上面我列出來了)
https://support.allegorithmic.com/documentation/display/SDDOC/System+Variables

  • sample

取得圖像本身,就是shader語言裏的,通常結合getfloat2裏面的$pos使用,當然圖像學中部分炫酷效果主要就是各種處理uv

  • cast

整形浮點各種轉換

  • vector

就是組合向量,比如兩個二維向量組合成四維的

  • swizzle

shader語言裏面常用的賦值方式,比如.rgba=.rrrr


注意雙通道和單通道,浮點整形之類都有不同的顏色,不同顏色的是不能連接的,同樣的通道通常分爲整形和浮點型

當然還有很多算法類的就不多說了,更多可以查看文檔,基本和shader上用法大同小異,不過有點缺憾的是這個節點裏面沒有循環語法,所以這個就需要看下面的fx-map


FX-Map

自身帶有獨立面板,本身沒有輸入背景色是透明的,所以需要看到裏面東西最好把透明先關閉


雖然一共只有三種功能節點
但是涵蓋了循環iterate,分支switch,還有一個是quadrant
下面詳細說下

  • iterate

左邊是跳過,就是可以往下連,但不影響,主要起到連接作用,不需要循環的分支就用左側的繼續連下去
右側是迭代,循環所有之下的命令
迭代次數也可以隨機
循環是可以多層的,如下圖



  • switch
就是選擇,可以在屬性selector上寫函數一般做隨機
  • quadrant
這個比較特殊,簡單說類似四叉樹填充
用來創建具體圖像,可以是輸入圖像,也可以是其他的,可以在裏面不同屬性,比如位置建立函數,裏面用random隨機位置用二維向量連接輸出,這個節點主要功能就是用來提供預設圖形控制的,當然裏面有很多屬性都用創建新的函數來控制

這個獨立面板主要作用我現在理解的就是用來構造大的圖像循環結構
細節地方還是需要函數處理,下面是一個測試,fx-map中用方塊排列等差數列


fx-map自己的面板只用了兩個節點
下面說下關係到fx-map使用的重要函數節點

  • getfloat中的$number

類似for(int i=0;i<something;i++)中的i,可以取到自變量本身,但是缺點也有無法再取到上一級循環了,如果有兩級循環,就只能取到最近的一級,而且之上的通過賦值調用也沒用

  • $depth $depthpow2

返回層級深度的

  • Set

用來定義內部變量名字,默認定義了不能訪問到fx-map中其他節點的變量,通常需要和Sequence一起使用

  • Sequence

序列化保存變量,使之可以在fx-map面板內不同節點中相互調用,通常前面要有set
sequence必須兩個點都有輸入才能作爲root
爲了能建立一個分支,上面的分支用來記錄前面存儲的變量,下面的那個分支用來繼續做其他的,讓變量能夠訪問,連接下面的量是新的一個返回值(如果沒有合適的可以用賦值到string之前的),因爲這個函數需要一個返回值 注意這個值可以在fx-map裏跨節點使用,如果想用全局變量,可以在外部暴露參數

注意設置set 和 Sequence後 其他節點裏用get可能看不到需要節點,只能手動打字上去,注意名字要不同

但是如果裏面有重名set sequence組合優先以本函數內爲主


感覺fx-map是最強的一個節點,不僅因爲有循環,同樣也支持輸入多個圖片。缺憾就是獨立面板一開始使用比較密,右鍵還可以建立reference 複製的會進行參數修改關聯,注意只有fx-map裏這種節點,但用了也看不出哪個是關聯過的,感覺不是很實用(爲什麼外面沒有這種方式)。還有一個問題就是不能跨循環調用循環變量,只能使用最近的一個,當然還有很多反shader語法的內容,希望大家能一起討論。

還有需要注意的是pixel processor使用$pos可以返回觀察到完整uv


而在fx-map中更像是採樣,$pos在quadrant顏色屬性上僅能返回單一的個體座標
所以會是下面這樣


更高精度只要增加節點就可以了(這裏我爲了方便表示所以圖案選的圓形,而且只用了4層)
所以這個和pixel processor方式是有本質區別的


兩個高級節點簡單介紹就到這裏了,主要是給會shader的一個銜接材料,同樣讓大家認識下使用這兩個節點的可能性。當然後面還是更期待有什麼更好方式,包括嵌入代碼什麼的。


參考資料

https://support.allegorithmic.com/documentation/display/SDDOC/Pixel+processor+node

https://support.allegorithmic.com/documentation/display/SDDOC/FX-Map+node


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