# RenderMan

RenderMan es tanto un software como una API desarrollada por Pixar para redes de renderizado distribuido de complejas imágenes tridimensionales, el cual es empleado en granjas de renderizado con muchos equipos cliente. Estos equipos cliente no requieren tarjetas gráficas 3D, aunque pueden beneficiarse de estas si están presentes.

## Proceso

El renderizado de escenas y animaciones raytracing que contienen:
* reflexión/refracción óptica.
* luces fotométricas.
* pelo.
* piel.
* efectos de lente.
le puede tomar mucho tiempo procesarlos a una computadora normal, dependiendo de la complejidad, y el tamaño de las imágenes individuales. Para las animaciones, el número de cuadros por segundo y el período de tiempo total de la secuencia de animación también pueden extender en gran medida el tiempo de renderizado total.
El proceso de render se puede acelerar mediante la subdivisión individual de las imágenes en general, por ejemplo, fragmentos de 10 x 10 píxeles y distribuir el cálculo de cada fragmento a través de una gran colección de otros equipos cliente en la red. Para imágenes muy complejas y servidores granja muy grandes, los píxeles individuales se pueden distribuir para ser procesados por cada cliente.
Las empresas y universidades pueden utilizar computadoras de oficina o de laboratorio para hacer renderizados nocturnos intensos cuando los equipos se encuentran inactivos. También se puede hacer de forma continua como un proceso en segundo plano de baja prioridad en los equipos de oficina y laboratorio.

## Historia

RenderMan tiene sus orígenes en la Universidad de Utah durante la década de 1970, donde el fundador de Pixar Ed Catmull hizo su trabajo de doctorado sobre problemas de renderización. A partir de ahí, la escena cambió a Lucasfilm en California, donde Catmull y algunos otros investigadores gráficos llegaron para trabajar en software de gráficos para su uso específico en el cine (una parte de Lucasfilm tarde se convirtió en Pixar).
Los investigadores tenían el objetivo explícito de ser capaces de crear imágenes fotorrealistas complejas y de alta calidad, que eran, por definición, prácticamente indistinguible de las imágenes de acción filmadas en vivo. Comenzaron a crear un motor de renderización para ayudarles a alcanzar esta meta, este tenía una arquitectura innovadora diseñada desde cero, con la incorporación de los conocimientos técnicos adquiridos a partir de la investigaciones realizadas en pasado tanto en Utah y NYIT. Loren Carpenter, implementó piezas del núcleo del motor de renderización, y Rob Cook, escribió el subsistema de sombreado. Pat Hanrahan trabajó como arquitecto principal de todo el proyecto. El algoritmo de renderizado se denominó REYES, un nombre con doble origen. Se inspiró en Point Reyes, un lugar pintoresco en la costa de California que a Carpenter le gustaba visitar. Para el equipo de desarrollo el nombre era también un acrónimo de Render Everything You Ever Saw(Renderiza Todo lo que veas) una frase conveniente para resumir su ambiciosa empresa.
En la conferencia SIGGRAPH de 1987, Cook, Carpenter y Catmull presentaron un documento llamado The Reyes Rendering Architecture (La Arquitectura de Renderzado Reyes) que explicaba cómo funcionaba el motor de renderizado. Más tarde en el SIGGRAPH en 1990, el lenguaje de sombreado fue presentado en un artículo titulado. A Language for Shading and Lighting Calculations (Un lenguaje para Cálculos sombreado e iluminación) por Hanrahan y Jim Lawson. En 1989 el programa llegó a ser conocido como RenderMan y comenzó a tener una licencia para efectos visuales en CGI y compañías de animación. Además, la división de Lucasfilm CG fue escindida en su propia compañía, Pixar en 1983 y fue comprado por Steve Jobs en 1986.
A pesar de que la oferta pública de RenderMan no ocurrió hasta 1989, el software se utiliza internamente en Lucasfilm / Pixar mucho antes de eso, para crear efectos visuales de películas, cortos de animación y anuncios de televisión.
En 1982, el efecto de Génesis en la película Star Trek II: La ira de Khan se ha creado usando una versión anterior de RenderMan, como era el caballero de vidrio de la película El Joven Sherlock Holmes lanzada en 1985.
Hoy en día, los principales estudios de animación y efectos visuales de todo el mundo utilizan rutinariamente RenderMan gracias a su historial sin igual - es rápido, estable, eficiente cuando se trata de manejar grandes escenas con geometría compleja, las apariencias superficiales y la iluminación. La salida es una imagen de alta calidad, utilizable por sí (por ejemplo. En películas de dibujos animados) o listos para la composición con imágenes existentes (por ejemplo. En las películas de acción en vivo).
Históricamente, la primera encarnación de RenderMan fue como un programa para Macintosh que se ejecuta en los procesadores Motorola 68000/68030, Sistema 6 y LocalTalk. los cálculos de la granja de renderizado eran mostrados individualmente; por ejemplo, un rápido Macintosh SE / 30 con salida monocromática podía participar en el renderizado de imágenes a todo color, enviando los resultados de vuelta a un más lento Macintosh II pero con capacidad de color.

## Terminología

El nombre RenderMan puede causar confusión, ya que se ha utilizado para referirse a diferentes desarrollos de Pixar:
* RenderMan Interface Specification (RISpec), especificación técnica de Pixar para un protocolo de comunicaciones estándar (o interfaz) entre los programas de gráficos 3D por computadora y programas de renderizado.
* RenderMan Shading Language (RSL), el lenguaje de scripts que especifica todo el sombreado que realiza RenderMan. Tiene una sintaxis similar al C y contiene un conjunto de funciones incorporadas directamente relacionados con los gráficos y RenderMan.
* PhotoRealistic RenderMan (PRMan), un sistema de software de renderización RenderMan, es decir una implementación compatible, desarrollada por Pixar sobre la base de su propia especificación.
* RenderMan, también se utiliza comúnmente para referirse a otros motores de renderizado que cumplen con el estándar RenderMan, como por ejemplo Pixie.

## RenderMan Interface Specification (RISpec)

Es una estándar entre programas de modelado y renderizado capaces de producir imágenes de calidad fotorrealista. Un programa de renderizado que implemente la interfaz RenderMan difiere de una implementación de anteriores estándares gráficos en que:
* Debe simular una cámara real y sus muchos atributos, además de sólo la posición y dirección de la vista.
* Debe aceptar primitivas geométricas curvas de manera que no sólo pueda visualizar con precisión la geometría básica.
* Debe ser capaz de simular las propiedades ópticas de diferentes materiales y fuentes de luz.
Fue diseñado de modo que la información necesaria para especificar una imagen fotográfica se puede pasar a diferentes programas de renderización de forma compacta y eficiente. La interfaz en sí fue diseñada para manejar diferentes dispositivos de hardware, implementaciones de software y algoritmos de representación. La versión de la especificación actual es la 3.2.1.

## RenderMan Shading Language (RSL)

Es un lenguaje de sombreado de gran alcance que permite a los usuarios escribir programas personalizados llamados shaders para definir completamente las superficies y su interacción con las fuentes de luz. Estos shaders se divide en:

### Shaders de superficie

Maneja el cálculo de color y opacidad de la superficie de las primitivas. Evalúa la textura, reflejos, refracción, y el modelo de iluminación (Lambert, Blinn, etc) de un material. Trabajan en conjunto con los shaders de luz para determinar la cantidad de luz incidente sobre la superficie para "iluminar" el objeto. También trabajan con los shaders de volumen para determinar cuánto color volumétrico y opacidad se añade al color y la opacidad final del sombreado de la superficie.

### Shaders de desplazamiento

Mueve los puntos de superficie en tiempo de render y recalcula nuevas superficies normales. estos también se encargan de bump mapping con sólo recalcular la normal sin mover el punto de la superficie.

### Shaders de volumen

Crear efectos volumétricos como neblina atmosférica, humo, sombras atmosféricas, etc., se pueden utilizar de tres maneras: como shaders de ambiente, shaders interiores o shaders exteriores. Un shaders de ambiente renderiza los efectos de volumen entre la cámara y los puntos de la superficie visible (a lo largo de los rayos de la cámara). Los shaders interiores son evaluados en el interior de los objetos parcialmente transparentes mientras que los shaders exteriores se evalúan cuando los rayos se ven reflejados/refractados entre objetos y dan la atenuación atmosférica.

### Shaders de luz

Son responsables de los cálculos de sombra ya sea accediendo a mapas de sombras precalculadas o calculando sombras directamente por raytracing. Pueden ser llamados durante la ejecución de shaders de superficie y shaders de volumen de atmósfera para determinar la intensidad y el color de iluminación del punto de sombreado actual.

## PhotoRealistic RenderMan (PRMan)

Es un motor de renderizado integrado de alto rendimiento utilizado para abordar complicadas escenas 3D. Ofrece resultados impresionantes y actualmente se considera un motor híbrido que mezcla los últimos avances en el trazado de rayos, con las áreas tradicionales que han sido los puntos fuertes. Es utilizado por algunas instituciones educativas para probar nuevas conceptos en CGI.

## RenderMan

Hay múltiples motores de renderizado que se basan en las RISpec, tanto comerciales como el propio Renderman Pro Server, o 3dlight, así como de código abierto Pixie RenderMan.