giovedì 4 ottobre 2007

Pausa ed interni

Beh, per prima cosa, come avevo detto qualche giorno fa sul forum di blender.it, sono in pausa. Quando riprenderò mi farò sentire con le novità.
In attesa della fine della pausa ho preparato un grafico che descrive l'architettura interna di Cassata, ve lo mostro e poi ne commento ogni parte:


Consiglio di cliccarci su per ottenere l'ingrandimento.
Per prima cosa descrivo il funzionamento di Cassata globale, poi fornirò informazioni su ogni blocco e sullo stato attuale.

L'interfaccia (che comunica con l'esterno sia con altri cassata per il rendering distribuito, sia con il modeler o comunque il front end) dice che compiti svolgere al commander.
Questo, capito qual'è il suo compito, comanda di nuovo l'interfaccia (per comandare altri cassata in rendering distribuito) ed instanzia diversi job. Ogni job è eseguito su un thread diverso.
Il job si occupa di renderizzare una parte dell'immagine. Una volta partito tutto i job comunicheranno con la camera, e sarà lei ad invocare l'integratore montecarlo e poi scrivere sull'immagine.

Ora andiamo blocco per blocco:
  • Interface: S'interfaccia coi front end e con altri cassata.
    • Lo stato attuale è già buono, anche se necessita di parecchie modifiche. Comunque è funzionante.
  • Commander: Decide come dividere il lavoro e che lavori fare.
    • Attualmente esiste, ma è davvero embrionale.
  • Configuration Engine: Legge il file di configurazione di Cassata e decide come influenzare le procedure di rendering e qualunque altra cosa.
    • Attualmente esiste e funziona correttamente, ma saranno da aggiungersi opzioni mano a mano che serviranno.
  • Job 1... n: Eseguono un lavoro.
    • Esistono, ma sono appena accennati e l'interfaccia è totalmente da rivedere.
  • Scene Engine: Gestisce l'intera scena, compreso il contenuto.
    • Praticamente non esiste.
  • Camera: Gestisce la camera.
    • Nulla ancora fatto.
  • Image: Dove viene generata l'immagine, il filmato o quant'altro.
    • Nulla ancora fatto.
  • Montecarlo Integrator: Esegue l'integrazione montecarlo. La magia dell'unbias avviene qui.
    • Nulla ancora fatto.
  • Shader Engine: Interpreta gli shader e li esegue.
    • Nulla ancora fatto.
  • Mesh 1... n: In realtà non solo mesh, ma qualunque altro oggetto. Fornisce la geometria del oggetto della scena.
    • Non ancora cominciato.
  • Geometry Engine: Fornisce la geometria della scena.
    • Lo si vede agganciato allo shader engine perché in futuro mi piacerebbe che lo fosse, ma probabilmente questo collegamento avverrà dopo Cassata 1.0.
    • Non ancora cominciato.
  • Material Engine: Gestisce tutti i materiali. Viene interrogato dal geometry engine quando necessario.
    • Non ancora cominciato.
  • Material 1... n: I materiali della scena. Come La camera (ed in futuro anche le geometrie) viene comandato da shader.
    • Non ancora cominciato.

Come vedete il lavoro da fare è tanto e non garantisco che l'architettura interna non cambierà.
Ma andiamo a vedere cosa non c'è nel diagramma.
Moltissimi collegamenti non sono esattamente così o non sono presentati, per semplicità e pulizia del disegno. Ho descritto ad alto livello il funzionamento del renderer, senza scendere eccessivamente nei dettagli, e quindi volutamente ho deciso di tralasciare i dettagli nella scena.
Oltre a questo ho evitato di mettere l'architettura a plugin e l'architettura di caching.
La prima perché è pressocché ovunque ed il disegno sarebbe diventato troppo pesante.
La seconda è pure quasi ovunque ed ancora non progettata, per cui non sapevo neanche cosa mettere.
Mancano anche tutte le gestioni dei layer, soprattutto perché per ora la progettazione è troppo immatura.
Mancano anche molti componenti minori, che in un insieme ad alto livello come questo non erano necessari.

Per il resto non c'è altro da dire, alla prossima :)

Nessun commento: