2009年4月23日 星期四

Hiroshige Fishscales Shader Tutorial

現在介紹surface shader
一樣是用網路上的另一個範例,目的在做出像魚麟的效果,連結如下
http://tutorials.vizyacky.com/vizy_tutorials_student/ChipCollier_fishscales_tutorial/ChipCollier_fishscales_tutorial.php

Step1:
先設置一個簡單的場景



















Step2:
一樣,File -> New Operator Type ...,
除了Network Type設為Surface Shader Operator,其餘設定都仿照上一個教學,如圖,按下 Accept


















Step3:
在Network Editor,選擇Material Palette,拉一個Basic Surface材質進去,如圖,再將此材質指定給場景中的Sphere




















Step4:
來小試牛刀一下。在Editor Operator Type Properties 視窗裡,Key入
surface
noise_surf(vector clr = {1,0,0}; float frequency = 1;
export vector nml = {0,0,0})
{
Cf = clr * (float(noise(frequency * P)) + 0.5) * diffuse(normalize(N));
nml = normalize(N)*0.5 + 0.5;
}
一樣,按下Test Compile

Step5:
在Network Editor選擇shop標籤





















然後進入basic_surface node





















Step6:
然後在suboutput1 node的 input上,shift+滑鼠右鍵→選擇剛剛輸入的Operator Label名稱,如圖。一樣,按下Edit Operator Type Properties的Apply



















Step7:
算張圖來看看吧。Render→Create Render Node→mentra,
然後Render→Start Render→mentra1,可得下圖


















Step8:
來試試教學範例上的code吧。將noise_surf內的code改成
int rep_s=10;
int rep_t=15;

float tt = (t * rep_t) % 1;

vector colorA = {0,0,0};
vector colorB = {0.5,0.7,0.8};
vector colorC = {0.9,1,0.9};

float radS = radians(s * (rep_s * 180));
float tSin = sin(radS);
float tCos = cos(radS);

float apt = abs((tt<=0.5)?tCos:tSin) * 0.5; float bpt = abs((tt<=0.5)?tSin:tCos) * 0.5; float cpt = apt - 0.05; float _tt=0; if(tt < _tt =" tt;" _tt =" (tt-0.5);">
Cf = colorB;
} else {
if( _tt > apt) {
if(_tt
Cf = colorA;
} else {
Cf = colorB;
}
} else {
Cf = colorC;
}
}
(註:要將範例檔中的_s改成s,_t改成t,surfcolor改成Cf)
然後一樣,Test Compile→Apply
再算圖即可得出以下結果:





















教學檔上的理論部份就不贅述了,至於上面提到的s,t,Cf等,為內建的變數,有興趣的話,
可以去查查相關資料。

沒有留言:

張貼留言