title: Render farm
text: # Render farm
  
  Una render farm (tradotto letteralmente dall'inglese significa "fattoria della resa" - dove per resa si intende il processo di restituzione del risultato di un calcolo) è un insieme di calcolatori collegati tra loro, chiamati comunemente nodi, allo scopo di elaborare le immagini di computer grafica.
  
  Il processo di elaborazione delle immagini viene chiamato rendering, e può essere distinto in rendering parallelo o distribuito.
  
  Nel rendering parallelo ogni nodo calcola un singolo fotogramma indipendentemente dagli altri nodi, e la comunicazione tra essi consiste principalmente nel caricamento delle informazioni di base del soggetto da uno o più file chiamati "scena" (contenente le geometrie e le texture) e nel salvataggio dell'immagine a rendering concluso.
  
  Nel rendering distribuito tutti i nodi calcolano un singolo fotogramma. Per realizzare ciò un nodo (predefinito o scelto dall'utente) assume il ruolo di Master, mentre gli altri diventano Slave: il master carica la scena e via rete incarica gli slave di calcolare una porzione di immagine, chiamata tile (tipicamente un quadrato di $2^n$ pixel, la grandezza dipende da vari fattori quali l'algoritmo di rendering, la velocità della rete e anche il numero degli slave). A rendering concluso il master si occupa di impacchettare nell'immagine finale tutte le tile inviate dagli slave.
  
  In generale, per eseguire il rendering di un fotogramma in produzioni di altissimo livello può essere necessario attendere da pochi minuti fino a diverse ore. Il tempo necessario è diminuito in maniera esponenziale con l'aumento vertiginoso della potenza di calcolo dei processori, ma tale aumento è controbilanciato in negativo dall'aumento della complessità e del realismo dei motori di rendering 3D più recenti (Mental Ray, RenderMan, Vray).
  
  Il funzionamento di grosse render farm richiede l'introduzione di un gestore delle code, che semplifica la distribuzione automatica dei processi ai diversi nodi. Il software utilizzato è in genere un programma client-server che provvede alle comunicazioni tra nodi e gestore delle code.
  
  Alcune funzioni più comuni di detti gestori sono: gestione delle priorità, gestione delle licenze software, gestione del rendering per tile nel caso il motore di calcolo non supporti il render distribuito, algoritmi per l'ottimizzazione dell'utilizzo di banda (throughput) basati sui diversi tipi di hardware presenti nella rete.
  
  L'uso di render farm nell'industria dell'intrattenimento può essere vista come una delle prime applicazioni del grid computing.
  
  