Monday, July 09, 2007

Raytracing e a funcao Trace

trace() segundo o manual do renderman :P envia um raio a partir de um ponto em uma determinada direcao,e retorna a cor da superficie em que o raio atingio, que 'e determinada pelo shader da superficie atingida
uma coisa interessante da funcao shader 'e que quando voce assinala essa funcao dentro de uma variavel float ela vai retornar a distancia do ponto atingido ao inves da cor
para a funcao trace funcionar no seu RFM ou RAT voce precisar ligar o "RAYTRACING" no seu render globals

segue um exemplo de um shader com trace
uma simples bola com reflexo aplicado :


surface TraceReflex( ) {
/* captura as informacoes necessarias para o calculo da superficie */

normal NormalSurface = normalize(N);
vector Observador = normalize(I);
color TempColorReflex = 0;

/* verifica o angulo entre a superficie e o observador */

if (NormalSurface.Observador < 0) {

/* acha a direcao do reflexo entre a surface e o observador */
vector DirecaoReflex = reflect(NormalSurface,Observador);


/* captura a cor do reflexo naquele ponto usando a funcao trace */
TempColorReflex = trace(P, DirecaoReflex);

}
/* assinala a cor capturada pela funcao trace na cor final do objeto */

Ci = Os * TempColorReflex;
Oi = Os;
}




um exemplo do render :


No comments: