XSIforum.com

Cómo puedo renderizar una imagen en alta resolución por partes

0 Usuarios y 2 Visitantes están viendo este tema.

Unaided

  • ***
  • 3293
Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #20 en: 04 Agosto 2008, 00:13:49 »
- Me he instalado los servicios de Render Distribuido (RaySat) de XSI, pero no se utilizarlo y ni tan siquiera se si me sirve para lo que quiero resolver.
Por eso te digo que pruebes antes el netrender de xsi. Para evitarte todo el tinglado de ir probando administradores de render en red, antes de ver si con lo que trae xsi ya te puede servir. Porque hacer andar el de xsi es más sencillo que cualquier otro, y ya lo tienes.

¿Por qué algo tan sencillo como partir mi render en 4 trozos para que no se quede sin memoria puede ser algo tan complejo?
Volvemos a lo de antes.  Sacar el render en batch, y hacerlo en red, puede ser más que suficiente para repartir la carga entre varias maquinas, y probablemente no sea necesario llegar al "slice" que quieres. Igualmente creo que el slice de imagen no te serviría, ya que el error lo da el cálculo de FG cuando se queda sin memoria. No cuando está "pintanto" el bitmap.

Realmente hasta que no lea el manual, o alguna información técnica al respecto del cálculo de FG para saber si es dependiente de la resolución del ouput o no, las soluciones serán basadas en el método prueba y error.

Una de ellas que ya te dije, es cálcular el mapa de FG a una resolución menor (puesto que dices que así no termina en error), guardar el mapa y usarlo para el renderizado final a una mayor resolución.

En cuanto al uso del distribute render de xsi, funciona de la siguiente manera.

1. Instalas la opción Render Slave, prestando atención al puerto que usa por defecto o al que tu configures. Atención también al tipo de slave que instales. Existe el modo satelite (raysat) y el modo standalone (ray3). Puedes instalar los dos, pero no usarlos simultaneamente. Ambos han de escuchar a diferente puerto.
2. Buscas el archivo rayhost. Se ubica en el perfil del user de XSI. También puedes acceder directamente con las xsitools (hay un acceso directo en el menu de XSI).
En este archivo has de añadir el host y/o la ip de cada maquina donde hayas instalado el Render Slave. Con una sintaxis así:

#Nodos Render Slave -- Pc's para Satellite
#hostname:puerto
pcnumerouno:7003
pcnumerodos:7003

3. Ya está. Basta con lanzar el render desde el batch. La forma más simple es arrastrando el archivo.scn al acceso directo del batch.

Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #21 en: 04 Agosto 2008, 02:49:33 »
mmm... en las opciones de batch render, esto le ayudaria ?

-memory_use ["mr_default" | "unlimited" | "specified_limit"]
Sets the memory mode during rendering.
• mr_default sets the memory limit to mental ray's default value of 512 Mb.
• unlimited: no memory limit is set.
• specified_limit: sets the memory limit, in megabytes, to the value that you specify using -memorylimit.

Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #22 en: 04 Agosto 2008, 02:59:33 »
Realmente hasta que no lea el manual, o alguna información técnica al respecto del cálculo de FG para saber si es dependiente de la resolución del ouput o no, las soluciones serán basadas en el método prueba y error.
Si, el final gather lanza rayos desde la cámara hacia los objetos (sentido inverso al de la GI) por lo que es "view dependent". Los parámetros del Final Gather pueden estar expresados en unidades de render o en unidades de la escena dependiendo de como esté montado, hay un checkbox para ello. De todas formas... con cualquier solución de render SIEMPRE se debe calcular el fgmap en 1 máquina porque en caso contrario los diferentes tiles de los raysat (o slices del render que vengan de otra máquina) corren serio riesgo de tener diferencias en el cálculo de la iluminación, lo mismo que pasa cuando flickea una animación es aplicable a renderear diferentes partes de una imagen en distintas máquinas.

Yo creo que si el problema es en la generación del mapa lo más práctico sería comenzar probando con guardar el mapa sin renderear la imagen completa (en optimization dentro de los tipos de render tienes uno para sólo calcular el fgmap), luego ver si reutilizando ese mapa guardado sigue con problemas de memoria. Si en el render del FGMap sigue teniendo problemas de memoria tocaría hacer un diagnóstico del mapa y ver que está pasando.

Si todo está seteado como debería pero realmente es muy pesado para la máquina (cosa difícil de que suceda, es más probable que halla algún parámetro puesto a lo bestia en el FG) un solución podría ser simplificar los shaders con los que calculas el mapa del FG y usar esa solución de cálculo en el render con los materiales originales. El glossy, bump y demás efectos tienen una pequeña influencia en la forma en que rebota la luz y el motor trata de respetarla, la diferencia es leve y hacer un bypass de ello puede simplificar mucho el tiempo de render (recuerdo que solía usar un shader llamado ctrl.ray para ello que funcionaba muy bien). Otra solución podría ser calcular el FGMap a una menor resolución y reutilizarlo con tu imagen en alta.

Y en el peor de los casos creo que si se podría hacer algo con scripting que permitiera hacer un slice, yo vi un script de masterzap para max pero se basa en una característica propia de max para renderear una zona de la cámara, el sólo hace los cálculos para pasarle los parámetros adecuados. Si tienes el de Maya y tienes acceso al código fuente (si fuera un script mejor que mejor!) tienes un excelente punto de partida para tratar de entender como encararon el problema en Maya y como lo solucionaron, probablemente mucho de eso te sirva en XSI :)

Aaaaa y por cierto, usa dynamic BSP para que vaya construyendo el BSP de tu escena a media que lo necesita y no toooodo de una vez :)

Suerte! O0

Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #23 en: 04 Agosto 2008, 07:40:24 »
Por cierto que sistema operativo usas y cuanto te ocupan las texturas de la escena cargadas en ram? La has pasado a .map? El fichero de FG ya te ocupa 3g  :-\ quiza mirar de mezclar photones y menos FG  :-\

Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #24 en: 04 Agosto 2008, 10:19:33 »
Gracias a todos por las respuestas...

Voy a probar todo lo que me decis y os comento. Por cierto, tengo XP Pro y la textura (tengo una) podría ser uno de los problemas, ya que es bastante grande y podría optimizarla bastante.

Lo de convertir a .map siempre lo hago ya que en efecto evita muchos problemas con texturas grandes.

Por cierto, se me olvidaba, ahora sí que he entendido lo del ray_sat, el problema (y de ahí que no te entendiese) es que sólo dispongo de 1 máquina. Lo de utilizar Deadline o RenderPal era sólo para el slicing.

Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #25 en: 04 Agosto 2008, 10:24:16 »
César, el slicing de Maya que he encontrado es nativo a la línea de comandos de Maya:

render -r mr -reg 1 1499 1 999 -im part1 scene.mb
render -r mr -reg 1500 2999 1 999 -im part2 scene.mb
render -r mr -reg 1 1499 1000 1999 -im part2 scene.mb
render -r mr -reg 1500 2999 1000 1999 -im part2 scene.mb

Así que complicado sacar nada de ahí :(

Modificado

Acabo de encontrar este link, le he echado un vistazo pero no se como aplicar lo que veo en el código fuente a XSI...

http://www.highend3d.com/maya/downloads/mel_scripts/rendering/misc/download-5243.html?loc=SliceRobot.mel
« Última modificación: 04 Agosto 2008, 10:44:19 por surfaze »

Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #26 en: 04 Agosto 2008, 11:53:01 »
Lo decía pq el windows xp 32 tenia un limite de gestión de texturas a 1,5 gigas.  A a partir de ahí el xsi y el windows se daban patadas y salen los errores de memoria con el mental. Si utilizas xp 64 o vista o linux esto no pasa. Yo miraría de bajar la textura. Tienes que pensar la de veces que la cargas en ram.  :-\ Si a esto le sumas un mapa d FG d 3g. :-\ Ánimo.

Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #27 en: 04 Agosto 2008, 14:07:09 »
Interesante script! tiene varios métodos que no usan la opción nativa, todo lo del "Multiple overlaping cameras" es más o menos lo que habría que recrear :)

De lo que pude ver en el código (no soy ningún experto en MEL y hay cosas que no entiendo) el problema más evidente para recrearlo en XSI es que usan un atributo de las cámaras en Maya llamado "film offset" que hace un offset en X e Y de la vista actual pero sin mover la cámara ni cambiar la perspectiva. Probablemente se puede hacer algo similar en XSI pero hay que pensarlo un poco más para dar con la expresión y en base a eso seguir la lógica que plantean ahí (o encontrar una forma por uno mismo).

No es tan simple como pensaba, por ahora no puedo ponerme para tratar de hacer algo (que tampoco es garantía de nada) pero queda en mi lista de cosas por hacer, puede ser un desafío interesante y a la vez útil para la comunidad, me extraña que na exista un addon que lo permita.

Salu2

Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #28 en: 04 Agosto 2008, 16:32:00 »
Aleluyaaaaaa!!!! Lo conseguiiiiii!!!!!  :D :D :D

Al final he conseguido renderizarlo siguiendo varios de vuestros consejos:

- He reducido el tamaño de las texturas lo más que he podido. Una de ellas era realmente grande y con mucha zona del mismo color. Un poco de manejo de las UVs y he reducido el tamaño en 1/4 parte

- En la pestaña de FG he reducido el Trace Depth de 10 y 10 (por defecto) a 4 y 4 ( así como la suma de los dos de 20 a 8 ). Esta opción para mí que ha sido una de las más decisivas

- He renderizado el FG mediante el batch render, además de hacerlo a parte del render final. Es decir, primero hago el render del FG en batch con la opción de "Overwrite existing file". Una vez que ha acabado bien, he lanzado el render en directo (no batch) con la opción "Only use FG points from file"

- Quitando el protector de pantalla. Sí, sí, aunque no os lo creáis, he sorprendido al protector de pantalla en un par de ocasiones dando al traste con el render. La primera pensé que era casualidad, pero a la segunda he decidido desactivarlo

- Para el que lea este post, que sepa que habilitar la opción de conversión a .map files ayuda mucho a evitar errores de memoria. Esto no lo he aprendido hoy sino que lo aprendí hace algún tiempo.

- No he tocado ninguna opción de la pestaña de optimización de render, ni tan siquera el BSP dinámico, ni el Tile Size.

Resumen: Al parecer y como comentabáis el problema residía principalmente en el FG y no en el render. Hacer las texturas más pequeñas y desactivar el protector de pantalla definitivamente ha ayudado también

Por cierto, tras haber probado el RenderPal y el Deadline durante un rato, me pregunto si alguien los usa con XSI de manera profesional... es decir si no soportan FG???

César, en cualquer caso como comentas un script de slices para XSI sería muy interesante, así que mantenlo en tu lista de pendientes.

Millones de gracias a todos por vuestra ayuda.  O0


alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: Cómo puedo renderizar una imagen en alta resolución por partes
« Respuesta #29 en: 04 Agosto 2008, 16:41:19 »
El protector de pantalla existe para algo... antes que desactivarlo, usa el "Blank screen" (Pantalla negra) que solo te muestra negro en la pantalla y no come nada de recursos.