Framebuffer en Mental Ray

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.

Código:

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;
}
}

Copiarlo y grabarlo como fvshadermegatk.mel.

Para ejecutarlo escribir fvshadermegatk.

Cualquier fallo que veáis o sugerencia comentarla, a ver qué se puede hacer.