houdini中讓shader支持udim texture

簡介

udim,arnold的一個很好的機制,可以充分利用0~1之外的UV空間,最爽的在於不同的tile可以指定不同的分辨率,是一種比普通UV更加先進的mapping方式。一則很好的科普:http://www.fxguide.com/featured/udim-uv-mapping/

可是Houdini shop 的texture 節點還是隻從0~1找啊咋辦,0~1之外就重複啊咋辦?

經過嘗試只要幾個節點就可以讓texture以udim的方式讀取。


SOP階段

首先在模型(uv肯定有超出0~1範圍的)後掛一個vertex wrangle,裏面只填一句話:http://www.fxguide.com/featured/udim-uv-mapping/

不好意思ctrl v錯了,是這個:i@udim = 1001 + int(@uv[0]) + int(@uv[1])*10;

這句話給模型添加了一個叫做udim的int屬性,其值爲udim的編號。


SHOP階段



其中,

parm1用於讀入geo所攜帶的我們添加的udim屬性;

parm2爲shop添加一個string的parameter,用於在外層指定udim貼圖路徑,路徑中用<udim>來代替udim編號;

uvcoord1是一個普通的uvcoord節點,讀取處理前的uv;

snippet1代碼如下:

string tex_path = texpath;
string tokens[] = re_split('<udim>', tex_path);
texpath = tokens[0]+itoa(int(udim))+tokens[1];
s = frac(s);
t = frac(t);

此代碼做兩件事:將原來的路徑根據udim來修改成真正的路徑,並且將uv修改爲在此tile的正確uv。

將此snippet的路徑輸出到texture的map屬性,s和t輸出到texture的s和t即可


上圖爲用udim的效果,只是爲了做火星的發射源沒有加置換和其他shading。

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