Houdini 出 Alembic 給 Vray Proxy 的資訊夾帶方法

以往我在做houdini出particle到max的流程中,是用prt格式比較多,但近期發現vray proxy來讀alembic是很不錯的方式。

max內建讀取alembic效能很差,而exocortex的外掛是有較多相容性,但效能一樣不佳。vray proxy卻是一反前二者有著極佳的讀取速度,也有viewport減面的優化功能,在不用做二次編輯之下,vray proxy相信是目前max讀取abc的首選。

vray proxy可以讀取的資訊相當豐富,這篇就概括說明一下,houdini的資訊要怎麼帶到vray proxy。

概要

以下主要側重在houdini的particle出abc給vray proxy的部分,這部分在官方document幾乎沒有資料,在研究了alembic的格式結構、論壇討論以及實際測試後,整理成以下的方法:

這邊以一個往斜上方的點當作particle資訊夾帶範例,圖上數字為自創的width屬性。

設定屬性

創了一個斜線之後,只留下點的部分,並用vex給予這些設定。
我設定了三個屬性:width、Cd、mask:

  • width即是vray proxy算圖時的particle大小,也就是houdini的pscale
  • Cd是顏色,但其實出給vray proxy不用特地要叫Cd,只要你有設定屬性,vray proxy都可以讀
  • 最後我設定了一個mask,這個是要來跟Cd做對照

對照什麼呢?

你可以看到最後一行特地設定了屬性的type,把mask指定為vector屬性,其實在houdini裡基本上沒必要做這件事,當打下v@就已經知道是vector,這邊的屬性可以說是設定給alembic看,並可以順利給予vray proxy讀取的,不然vray proxy只會將mask這屬性視作單一浮點數。

那為什麼只設定了mask沒設定Cd?那是因為houdini本身就有內建幾個對應屬性類別,像v、Cd這些常用屬性都是,所以不用特別做設定。
這也代表說,你設定向量的屬性type其實用vector或color都可以。

匯入Alembic

接著到max裡讀取houdini輸出的abc,注意要將vray proxy的X軸旋轉90度,縮放100倍,才會是正確大小與軸向。

如果方才有輸出width屬性,這邊就會自動對應了,而vray proxy本身的介面也有一個width總控制去相乘,像剛剛如果有縮放一百倍,這邊就要將width設成0.01。

而其他屬性資訊部分,全都含在vertex color的map channel,如果有上vertex color貼圖,可以看到channel name這邊會顯示全部屬性名稱,如果是單一浮點數屬性,名字會像r_mask這樣有一個r_的起頭。

試算

採vray light mtl並將顏色部分貼上vertex color,試算可以看到資訊完全正確。

試算時,也順便增加了一個ExtraTex pass夾帶mask資訊,也是正確無誤。
因此可以延伸想說,其實不只particle,連一般物體都可以夾帶許多屬性用vray proxy的方式到vray這邊算,讓出圖跟後期合成增添許多彈性。

雖然vray算particle的速度遠遠不及krakatoa,但在專案整合,場景整理上,如果能一起用vray算圖也是很方便。尤其最近公司很多VR專案,就不用去在乎場景matte或者VR攝影機。

發光材質

krakatoa的additive渲染效果,其實vray也可以達到,上圖是一般預設材質的particle。

材質用vraylight,opacity給上一張非常暗的vraycolor,然後去調整color顏色、強度跟opacity的濃淡,就可以達到additive的效果。
這邊的材質參數是:顏色藍綠色,強度3來增加密集的亮度,opacity的vraycolor是0.05的灰質。
當然,這種方法出圖也會跟krakatoa的additive渲染一樣無法使用alpha。

Material ID

額外簡單說明material id的部分,其實就是用group去出成alembic的face set。

隨便用一個multi material。

基本上id順序應該是group的名稱順序。

更新補充

忘記提motion blur這塊,一樣用v去帶,不過有兩個小bug。

  • cache最開始不能是空的,也就是第一格cache是要有particle存在的格數。
  • 輸出單格abc無法應用vray內建的motion blur,但velocity pass會有。一定要輸出多格的才會有motion blur。