顯示具有 renderman 標籤的文章。 顯示所有文章
顯示具有 renderman 標籤的文章。 顯示所有文章

2010年7月29日 星期四

two sided shader in renderman

如果遇到正反面是不同屬性的材質,可以用SLBOX來寫condition,利用model的face normal來判斷.
sl code寫法如下,v1跟v2可再各自串聯node上去

/* color */
if ((dPdu^dPdv).N>0)
result = v1;
else
result = v2;


記得maya model的double side 要關掉,renderman的ensemble的double shaded 要開

2010年5月13日 星期四

template for shader palette selection upon attachment

global proc yi_selector(string $phase)
{
string $paletteName ="";
string $s ="";
string $m ="";
string $b ="";
if ($phase == "normal")
{
$s = "/shows/tife/prod/surface/char/tife_c_yi/tife_c_yi_rig_h.splt";
$m = "/shows/tife/prod/surface/char/tife_c_yi/tife_c_yi_rig_h.surface";
$b = "/shows/tife/prod/surface/char/tife_c_yi/yi_sss_setup.mel";
}
else if ($phase == "wet")
{
$s = "/shows/tife/prod/surface/char/tife_c_yi/tife_c_yi_rig_h_wet.splt";
$m = "/shows/tife/prod/surface/char/tife_c_yi/tife_c_yi_rig_h_wet.surface";
$b = "/shows/tife/prod/surface/char/tife_c_yi/yi_sss_setup_wet.mel";
}
else if ($phase == "dirty")
{
$s = "/shows/tife/prod/surface/char/tife_c_yi/tife_c_yi_rig_h_dirty.splt";
$m = "/shows/tife/prod/surface/char/tife_c_yi/tife_c_yi_rig_h_dirty.surface";
$b = "/shows/tife/prod/surface/char/tife_c_yi/yi_sss_setup_dirty.mel";
}

$paletteName=`slimcmd slim CreatePalette -file $s`;
print "attach mel\n";
eval("source \""+$m+"\"");
eval("source \""+$b+"\"");

}
global proc surface_yi_selector()
{
if (`window -ex ABCWin`==true)
deleteUI -window ABCWin;
window -title "Select yi shader type" ABCWin;
columnLayout -adjustableColumn 2;
button -label "normal" -c "yi_selector(\"normal\")";
separator -h 10;
button -label "wet" -c "yi_selector(\"wet\")";
separator -h 10;
button -label "dirty" -c "yi_selector(\"dirty\")";
separator -h 10;
setParent ..;
showWindow ABCWin;
}
surface_yi_selector();

2009年12月9日 星期三

SSS parameters from Renderman Manual

refraction for twelve materials from [Jensen01]:
                 albedo              dmfp                ior
apple 0.846 0.841 0.528 6.96 6.40 1.90 1.3
chicken1 0.314 0.156 0.126 11.61 3.88 1.75 1.3
chicken2 0.321 0.160 0.108 9.44 3.35 1.79 1.3
cream 0.976 0.900 0.725 15.03 4.66 2.54 1.3
ketchup 0.164 0.006 0.002 4.76 0.58 0.39 1.3
marble 0.830 0.791 0.753 8.51 5.57 3.95 1.5
potato 0.764 0.613 0.213 14.27 7.23 2.04 1.3
skimmilk 0.815 0.813 0.682 18.42 10.44 3.50 1.3
skin1 0.436 0.227 0.131 3.67 1.37 0.68 1.3
skin2 0.623 0.433 0.343 4.82 1.69 1.09 1.3
spectralon 1.000 1.000 1.000 inf inf inf 1.3
wholemilk 0.908 0.881 0.759 10.90 6.58 2.51 1.3

2009年11月27日 星期五

把ptc拿來當color_bleeding


如果有bake好的ptc檔,可以利用color slbox讀取,當作是現成的color在用,以下例子是用在incandescence的color,串一個color slbox,目的是給shader一個bake好的color_bleeding效果,免去render時候bake ptc的時間

v1=ptc source file位置 (string)
v2= max distance value (float)
v3= indirectdiffuse (float)


string ptc_file = v1;

normal Nf = faceforward(normalize(N),I);
color IndDif = indirectdiffuse(P,Nf, 0,"filename",ptc_file,"pointbased",1, "maxdist", v2, "falloffmode", 1, "falloff", 1);

result = indDif *v3;

------------------------------------------------
更正寫法: 以下正確寫法,直接貼v1的顏色,不需要再做一次indirectdiffuse (IndDif)

string filename = v1;

normal Nf = faceforward(normalize(N),I);
color cbcolor=0;
texture3d(filename,P,normalize(N),"_indirectdiffuse",cbcolor);
result=cbcolor;

2009年11月25日 星期三

不被displacement影響的rimlight

rimlight + displacement常常會遇到很奇怪的現象,那就是整個有displace起來的邊都會有rimlight,但是如果只希望在物件邊緣有rim light效果的話請在rim node的shading normal上串個ribbox,寫法如下

SLBox (vector):

normal nn;
displacement("__Norig",nn);
result = normalize(nn);

以上script要配合寫好的displacement,前提是displacement本身已有產生shading normal

Set bakeLevel

常常用到sss的人會發現render時很慢,我們可以單獨的把有sss的shader在bake point cloud時shading rate 調小一點
直接在有sss的ensemble上面在Rib Box欄開個RIBBOX,寫法如下

[
set bakeLevel 5;

set oriShadingRate [mel "mtor control getvalue -rg shadingRate"]
if { $oriShadingRate <>
set oriShadingRate 1.0
}
set newShadingRate [expr $oriShadingRate * $bakeLevel ]
if (\$CONTEXT=="BAKECONTEXT") {
return "ShadingRate $newShadingRate"
}
]

Melscript for Renderman bake camera

這是一個自動產生一個camera給特定的renderman shader,並且自動把指定的sss traceset 都做好

if (`objExists sss_horse`)
{
select sss_horse;
mtor control attach mapgen "1400_D3VBi4i1000";
}
else
{
string $camera[] = eval("camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 1 -horizontalFilmAperture 1.78 -horizontalFilmOffset 0 -verticalFilmAperture 1 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.01 -farClipPlane 1000 -orthographic 0 -orthographicWidth 30");
parent $camera[0] ju_c_horse_rig_h:root_ctl;
setAttr ($camera[0] + ".translateX") 41.524;
setAttr ($camera[0] + ".translateY") 33.507;
setAttr ($camera[0] + ".translateZ") 66.260;
setAttr ($camera[0] + ".rotateX") -12.938;
setAttr ($camera[0] + ".rotateY") 30.200;
setAttr ($camera[0] + ".rotateZ") 0.000;
setAttr -lock true ($camera[0] + ".tx");
setAttr -lock true ($camera[0] + ".ty");
setAttr -lock true ($camera[0] + ".tz");
setAttr -lock true ($camera[0] + ".rx");
setAttr -lock true ($camera[0] + ".ry");
setAttr -lock true ($camera[0] + ".rz");
setAttr -lock true ($camera[0] + ".sx");
setAttr -lock true ($camera[0] + ".sy");
setAttr -lock true ($camera[0] + ".sz");

select -r -ne $camera[0];
mtor control attach mapgen "1400_D3VBi4i1000";
rename $camera[0] "sss_horse";
}
if (`objExists horseSSSSet`==0)
{
select -cl;
select -tgl ju_c_horse_rig_h:hi_res;
MTORCreateTraceSet horseSSSSet;
}

melscript for different set of shader parameters

這是同事在公司寫的melscript,主要是給lighter設定不同組的shader參數,上面有三組分別為huge,normal跟tiny的shader參數可以選擇,三組個別有不同的specular跟bump的shader參數

global proc jingubang_selector(string $phase)
{
string $a = `slimcmd slim GetAppearances -name "Spec_jingubang"`;
string $b = `slimcmd slim GetAppearances -name "disp_jingubang"`;
string $c;
$a = `slimcmd $a GetProperties -name "Intensity"`;
$c = `slimcmd $b GetProperties -name "displacementbound"`;
$b = `slimcmd $b GetProperties -name "Kb"`;
if ($phase == "huge")
{
slimcmd $a SetValue 1.000;
slimcmd $b SetValue 0.0008;
slimcmd $c SetValue 0.0015;
}
if ($phase == "normal")
{
slimcmd $a SetValue 5.000;
slimcmd $b SetValue 0.015;
slimcmd $c SetValue 0.030;
}
if ($phase == "tiny")
{
slimcmd $a SetValue 1.000;
slimcmd $b SetValue 0.0015;
slimcmd $c SetValue 0.0030;
}

deleteUI -window ABCWin;
}

global proc surface_jingubang_selector()
{
if (`window -ex ABCWin`==true)
deleteUI -window ABCWin;

window -title "Selct Jingubang Size" ABCWin;
columnLayout -adjustableColumn 1;
button -label "Huge" -c "jingubang_selector(\"huge\")";
separator -h 10;
button -label "Normal" -c "jingubang_selector(\"normal\")";
separator -h 10;
button -label "Tiny" -c "jingubang_selector(\"tiny\")";
setParent ..;
showWindow ABCWin;
}

surface_jingubang_selector();

slim command under melscript

針對不同場景,shader參數常常需要有一組特定的參數,通常整組參數可用melscript記下來並且需要時來執行,避免每個場景都需要準備不同組palette.
slim command可以在melscript下執行,例如在slim cmd下輸入
slim GetAppearances -selected 1
melscript 前面必須再加一個指令slimcmd來執行
slimcmd GetAppearances -selected 1

2009年11月24日 星期二

如何用slim cmd改shader參數


常用的基本指令

選取想要的shader node在slim cmd下執行,來找出它的slim代號
slim GetAppearances -selected 1

或是可以直接用shader node的名字(Diffuse_2)來找出它的slim代號
slim GetAppearances -name "Diffuse_2"
通常它會output代號會類似 funcXXX等等 (XXX代表數字)

利用找出來的node代號在輸入並找出它的properties名字(Intensity)的代號
func9 GetProperties -name "Intensity"

再利用properties的代號來找出它的值
parm81 GetValue

我們可以利用SetValue來更改Diffuse_2的Intensity的值(0.5)
parm81 SetValue 0.5

或是一個command line 的話,如下
[[slim GetAppearances -name "Diffuse_2"] GetProperties -name "Intensity"] SetValue 0.5


2008年12月16日 星期二

如何用script來改變多重的shader參數

昨天遇到一個問題,lighter希望把所有的shader的自發光全部關掉,所以就執行了以下的script,避免手動調整上百個shader...

foreach esb [slim GetAppearances -template "*Incandescence*"] { foreach ds [$esb GetProperties -name "Intensity"] { $ds SetValue 0};};

意思是找出所有類的Incandescence,把intensity值改成零

如果只想改指定的palette而不動到其他shader的話,可以用下面的指令...

set ppp [slim FindPalette "qq_s_novaball_stadium"];foreach esb [$ppp GetAppearances -template "*Incandescence*"] { foreach ds [$esb GetProperties -name "Intensity"] { $ds SetValue 0.01 };};

意思是在 qq_s_novaball_stadium 的palette裡,找出所有類的Incandescence,把intensity值改成0.01

2008年11月17日 星期一

如何用console改slim palette的名字

今天遇到奇怪的問題,Renderman的 slim palette介面變得非常慢 (大概是因為palette堆了一大堆shaders). 想要改palette名字卻一直無法讓我用滑鼠點進去,感Pixar應該把介面再寫好一點!!

目前只好用他的console下command來解決,如下

slim (Desktop) 18 % [slim GetAppearances -selected 1] GetRoot ----------> 找出palette代號
plt10
plt0 plt10 plt9
plt0 plt10 plt9
slim (Desktop) 18 % plt10 GetLabel -------------> 找出palette代號的命名(AAA)
AAA
slim (Desktop) 19 % plt10 SetLabel {BBB} -----> 改新的palette名字(BBB)


或是一個command line 的話,如下

[[slim GetAppearances -selected 1] GetRoot] SetLabel BBB


P.S
記得要先點選要改名字palette的shader

2008年11月12日 星期三

如何加custom matte在Renderman的aov



如果需要在render時出一個custom matte的話,可以在shader加個slbox (出tif用color,如果是exr就可用float囉),寫法參考右圖.
接下來就在RenderMan Globals > Display > Channels 開一個對應的 secondary pass channel就可以了

2008年11月11日 星期二

bakeable shader in Renderman

Renderman 有提供shader bakeable 的功能.如果model的uv拆的很漂亮的話,可利用bakeable node把renderman shader轉成texture,例如 point cloud occlusion可以直接用貼圖來取代, 好處是在final render前就可以快速的看出occlusion的效果,並且可以像texture般調整顏色或加filter(ie. blur etc).

只要把bakeable加入shader tree 裏面就行了,bakeable需要配合bake