Framebuffer en Mental Ray

larryvm - 15/08/2006 12:52
Hace unos días encontré desesperados Shaders que permiten sacar render buffers en Mental Ray con unos pocos pasos, aun así era un poco lioso convertir una escena de Maya así que, en un rato que saque he escrito un script que ejecuta los pasos complicados para activarlo.

Por ahora humilde las luces spot, direccional y point, y los Shaders Lambert, Phong y Blinn, lo único que tiene una correlación directa entre este Shader y los de Maya y te crea el dummie para la selección de los renders buffers y los directorios de salida.

También te crea un Shader de sombra para los objetos con refracción.

Así que, ahora lo único que hay que hacer es cargar la escena, ejecutar el script y modificar el dummie para que funcione.

El script.
[code]global proc cambiaatributo3(string $shaderini, string $atributoini, string $shaderfin, string $atributofin)
{
$conexiones=`listconnections -p 1 ($shaderini+.+$atributoini)`;
If (`size $conexiones`>0)
{
Connectattr -f ($conexiones[0]) ($shaderfin+.+$atributofin) ;
}
Else.
{
$color=`getattr ($shaderini+.+$atributoini)`;
Setattr ($shaderfin+.+$atributofin) -type double3 $color[0] $color[1] $color[2];
}
}
Global proc baseshader(string $shaderini, string $shaderfin)
{
Cambiaatributo3($shaderini,color,$shaderfin,csurface),
Cambiaatributo3($shaderini,transparency,$shaderfin,copacity).

Setattr ($shaderfin+.use_simple_diffuse) 1;
$dif=`getattr ($shaderini+.Diffuse)`;
Setattr ($shaderfin+.cds) $dif, tsetattr ($shaderfin+.use_ambient) 1;
Setattr ($shaderfin+.camb) 1.0;
Cambiaatributo3($shaderini,ambientcolor,$shaderfin,ambient_color), tsetattr ($shaderfin+.use_incandescence) 1;
Setattr ($shaderfin+.cinc) 1.0;
Cambiaatributo3($shaderini,incandescence,$shaderfin,incandescence),
$Bump=`listconnections -p 1 ($shaderini+.normalcamera)`;
If (`size $Bump`>0)
{
Setattr ($shaderfin+.use_normal) 1;
Connectattr -f $Bump[0] ($shaderfin+.input_normal) ;
}
}
Global proc fvshadermegatk()
{
String $nombre;
String $Lambert[],$Phong[],$Blinn;
String $spot[],$directional[],$point;
$dummie=`Polycube -n dummiecube -ch on -o on -w 1.0 -d 1.0 -cuv 4`;
Setattr ($dummie[0]+.miexportgeoshader) 1;
$pass=`shadingnode -asshader p_megatk_pass -n ($dummie[0]+_pass)`.

Connectattr -force ($pass+.message) ($dummie[0]+.migeoshader),
String $sg[];
$Lambert=`ls -et Lambert`;
For ($elemento in $Lambert)
{
If ($elemento.=lambert1)
{
Print (Lambert+$elemento+\n),
$sg=`listconnections -p 0 ($elemento+.outcolor)`;
Setattr ($sg[0]+.miexportmrmaterial) 1;
$nombre=$elemento+_mtk;
$nombre=`shadingnode -asshader p_megatk -n $nombre`;
Connectattr -f ($nombre+.message) ($sg[0]+.mimaterialshader),
Baseshader ($elemento,$nombre),
Setattr ($nombre+.use_phong_specular) 0;
}
}.
$Phong=`ls -et Phong`;
For ($elemento in $Phong)
{
Print (phongs->+$elemento+\n),
$sg=`listconnections -p 0 ($elemento+.outcolor)`;
Setattr ($sg[0]+.miexportmrmaterial) 1;
$nombre=$elemento+_mtk;
$nombre=`shadingnode -asshader p_megatk -n $nombre`;
Connectattr -f ($nombre+.message) ($sg[0]+.mimaterialshader),
Baseshader ($elemento,$nombre),
Setattr ($nombre+.use_blinn_specular) 0;
Setattr ($nombre+.use_phong_specular) 1;
Setattr ($nombre+.p_cs) 1;
Cambiaatributo3($elemento,specularcolor,$nombre,p_specular),
$cp=`getattr ($elemento+.cosinepower)`;
Setattr ($nombre+.p_exponent) $cp;
Setattr ($nombre+.use_reflection) 1;
$cp=`getattr ($elemento+.reflectivity)`;
Setattr ($nombre+.creflect) $cp;
$cp=`getattr ($elemento+.refractions)`;
Setattr ($nombre+.use_refraction) $cp;
If ($cp==1)
{
$cp=`getattr ($elemento+.refractiveindex)`;
Setattr ($nombre+.ior_in_refr) $cp;
$shadow=`shadingnode -asshader mib_shadow_transparency -n ($nombre+shadow)`;
Connectattr -f ($shadow+.message) ($sg[0]+.mishadowshader),
tcambiaatributo3($elemento,color,$shadow,color),
Cambiaatributo3($elemento,transparency,$shadow,transparent),
}
}.
$Blinn=`ls -et Blinn`;
For ($elemento in $Blinn)
{
Print (Blinn->+$elemento+\n),
$sg=`listconnections -p 0 ($elemento+.outcolor)`;
Setattr ($sg[0]+.miexportmrmaterial) 1;
$nombre=$elemento+_mtk;
$nombre=`shadingnode -asshader p_megatk -n $nombre`;
Connectattr -f ($nombre+.message) ($sg[0]+.mimaterialshader),
Baseshader ($elemento,$nombre),
Setattr ($nombre+.use_phong_specular) 0;
Setattr ($nombre+.use_blinn_specular) 1;
Setattr ($nombre+.b_cs) 1;
Cambiaatributo3($elemento,specularcolor,$nombre,b_specular),
$cp=`getattr ($elemento+.eccentricity)`;
Setattr ($nombre+.b_eccentricity) $cp;
$cp=`getattr ($elemento+.specularrollof)`;
Setattr ($nombre+.b_specularrollof) $cp;
Setattr ($nombre+.use_reflection) 1;
$cp=`getattr ($elemento+.reflectivity)`;
Setattr ($nombre+.creflect) $cp;
$cp=`getattr ($elemento+.refractions)`;
Setattr ($nombre+.use_refraction) $cp;
If ($cp==1)
{
$cp=`getattr ($elemento+.refractiveindex)`;
Setattr ($nombre+.ior_in_refr) $cp;
$shadow=`shadingnode -asshader mib_shadow_transparency -n ($nombre+shadow)`;
Connectattr -f ($shadow+.message) ($sg[0]+.mishadowshader),
tcambiaatributo3($elemento,color,$shadow,color),
Cambiaatributo3($elemento,transparency,$shadow,transparent),
}
}.
$spot=`ls -typ spotlight`;
For ($elemento in $spot)
{
$nombre=`shadingnode -asshader p_spottk -n $nombre`;
Connectattr -f ($nombre+.message) ($elemento+.milightshader),
Cambiaatributo3($elemento,color,$nombre,color),
$cp=`getattr ($elemento+.intensity)`;
Setattr ($nombre+.intensity) $cp;
$cp=`getattr ($elemento+.coneangle)`;
Setattr ($nombre+.cone) $cp;
t}.
$directional=`ls -typ directionallight`;
For ($elemento in $directional)
{
$nombre=`shadingnode -asshader p_directtk -n $nombre`;
Connectattr -f ($nombre+.message) ($elemento+.milightshader),
Cambiaatributo3($elemento,color,$nombre,color),
$cp=`getattr ($elemento+.intensity)`;
Setattr ($nombre+.intensity) $cp;
}.
$pointl=`ls -typ pointlight`;
For ($elemento in $pointl)
{
$nombre=`shadingnode -asshader p_pointtk -n $nombre`;
Connectattr -f ($nombre+.message) ($elemento+.milightshader),
Cambiaatributo3($elemento,color,$nombre,color),
$cp=`getattr ($elemento+.intensity)`;
Setattr ($nombre+.intensity) $cp;
}
}
[/code]
Copiarlo y grabarlo como fvshadermegatk.mel.

Para ejecutarlo escribir fvshadermegatk.

Cualquier fallo que veáis o sugerencia comentarla, a ver qué se puede hacer.
Josich - 15/08/2006 16:03
Gracias por compartir el script. La verdad es que no podré probarlo ya que uso win2k y no funciona el RenderMan, pero le echaré un ojo al Mel a ver si saco algo en claro y de paso aprendo. Un saludo.
larryvm - 15/08/2006 20:45
Con Mental Ray me refiero a Mental Ray, no RenderMan. Un saludo tío.
Josich - 16/08/2006 01:51

Con Mental Ray me refiero a Mental Ray, no RenderMan. Un saludo tío.

Oops confundí Mental Ray por rm, entonces lo pruebo insofacto.

Otro saludo para ti compañero.
Joeking - 16/08/2006 02:57
Hola Larryvm, en estos momentos no puedo probarlo, pero me lo guardo y lo probaré más adelante, me he guardado también tu correo, así cuando lo pruebe te contestaré a ver qué. Muchas gracias.