Tuesday, July 10, 2007

Raytracing e environment()

Usar a funcao gather() nao 'e a unica forma de conseguir uma reflexao
com blur , no manual do renderman vem um exemplo muito legal de como
usar o raytracing de outra forma , atraves da funcao environment().
environment() costuma ser usado para adicionar uma reflexao atraves
de um bitmap . mas o renderman aceita uma palavra reservada "raytracing"
com essa funcao .. repassar uma palavra reservada
para a funcao environment() forca o renderman a usar raytracing .

environment() tbm tem opcoes de samples, dir , maxdist , e no lugar de
angulo uma variacao para "blur" . nos meus testes environment() com raytracing
deu resultados mais rapidos e com melhor qualidade com um menor
numero de samples ..

segue um shader de teste :

/*----------------------------------------------------------------------------------------*/
surface envRayReflex (
float Kr = 1;
float samples = 1;
float blur = 0 ;
float maxdist = 1;
)
{
color Crefl ;

string envmap = "raytrace"; /* cria uma string para guardar a palavra reservada */


if (N.I <0){
normal Nn = normalize(N);
vector In = normalize(I);
vector reflDir = reflect(In,Nn);
Crefl = environment(envmap,reflDir,"samples",samples,"blur",blur,"maxdist",maxdist);

} else { /* pintar de preto onde nao tiver nada para fazer raytracing */
Crefl = 0;
}
Ci = Kr * Crefl;

Oi = 1;
}


/*-----------------------------------------------------------------------------------------*/


abaixo segue um exemplo com o mesmo setup do render anterior (64SAMPLES, 0.18
BLUR , MAXDIST 110)

a qualidade do blur 'e bem melhor com um render mais rapido
ainda nao sei exatamente porque fica tao mais rapido
ja que por debaixo dos panos pelo que eu entendi . o renderman
faz um gather() do mesmo modo .. bem ..



No comments: