Vai al contenuto
  • Annunci

    • D@ve

      Visita la nuova Home Page di Treddi.com   19/02/2018

      E' finalmente on-line la nuova home page di Treddi.com. Da oggi tutti i contenuti del portale saranno facilmente accessibili e visibili direttamente dall'home page dove avrete la possibilità di dare i vostri like a contenuti, immagini e progetti. Ogni giorno potrete trovare nuovi contenuti e news relative al mondo della computer grafica e seguire le numerose attività del portale.  Fate il login e fateci avere i vostri feedback!  https://www.treddi.com/
Dias

Ctrl_buffer, Me Lo Spiegate?

Recommended Posts

Ciao belli

Vorrei abbandonare i Maya Layers a favore di Ctrl_buffer di Francesca, però avrei bisogno di qualche spiegazione. Spero che qualcuno di voi abbia un po' di tempo da perdere. :D

Per esempio, mettiamo caso che ho una scena semplice semplice: una sfera con un modesto Blinn-network e giusto un paio di luci. Domanda: come ottengo i Color/Diffuse/Shadow/Specular/Reflection/Ambient/Z/Normal passes? :mellow:

Ok, applico Buffer_store all'oggetto e buffer_write alla camera, ma poi, come procedo? Mi sono letto tutto il topic cu cgtalk ma non ho trovato spiegazioni soddisfacenti. :wacko:

p.s.: tra ctrl_buffer e p_MegaTK qual è quello più versatile?

p.s.: thanks

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

1- Crei un oggetto a cui assegnare il buffer_api (per esempio un cubo). Sotto il tab mentalray->geometry shader del transform node del cubo spunti "Enable geometry shader". Apri l'Hypershade crei un buffer_api e lo trascini nello slot. Min buffer/Max buffer ti permettono di specificare quanti framebuffer verranno scritti.

Supponi di voler avere un pass per la componente diffusa e uno per le riflessioni. Metterai Min buffer=1, Max Buffer = 2.

2- Selezioni la tua camera -> mental ray -> output passes ->output passes -> create. Nel tab Output passes che ti si apre metti un buffer_write nello slot Output shader. Selezioni il buffer_write e imposti:

- filepath: dove vuoi salvare i tui pass

- format: il formato delle immagini

- pattern: determina il modo in cui verranno nominati i file

- buffer.options: qui ci sono i pass che puoi avere da mental ray senza bisogno di fare nient'altro.

- user framebuffer: devi mettere gli stessi Min/Max buffer che hai messo nel buffer_api

- names: metti i nomi che vuoi dare ai tuoi pass (per esempio userfb.1 -> diffuse, userfb.2 -> reflection)

3 - Assegni al tuo oggetto un buffer store. Attivi framebuffer.1 e framebuffer.2. Crei per esempio un ctrl_shading e connetti la componente diffusa a framebuffer.1, le riflessioni a framebuffer.2 e compound a render.buffer (che è quello che vedi nella render view di maya).

Renderizzi.

L'unica cosa che ti devi ricordare è che è il render.buffer ad essere utilizzato per calcolare il contrast treshold per

l'antialising, quindi ti devi assicurare di metterci un pass che sia sensato (se metti uno shader con solo specular nel render.buffer avrai un antialiasing penoso anche a 0 3) quindi x esempio diffuse, oppure il compound del ctrl_shading, oppure puoi usare un mix8layer per avere nel render.buffer il render completo + tutti i vari pass separati.

Ciao :hello:

edit: ti ho allegato una scena stupidissima che però magari è + chiara di quello che ho scritto ( i 2 pass li dovrebbe scrivere in C:\)


Modificato da talama

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

Ciao Talama, grazie mille per la spiegazione e l'esempio. :)

Ho guardato il tuo esempio e renderizzandolo effettivamente ottengo 2 pass + 1 file .st anche se non mi è chiaro (penso) il procedimento che hai seguito. Vediamo:

- hai creato un dgs per "diffuse pass"

- hai creato un dgs per "reflection pass"

- hai creato mix8layer che fonde i due dgs e restituisce il risultato a render.buffer.

E' giusto? Te lo chiedo perchè levando mix8layer (ovvero senza render.buffer) ottengo cmq 2 pass + 1 file .st. :huh:

(che è sto .coverage.1.st che non riesco ad aprire in nessun modo?).

Ma la cosa che non mi torna in tutto questo è: e lo shader superfico della sfera che avevo prima che fine fa?

Cioè, faccio un esempio. Ho un modello con un shader molto complesso e molto fico. Ad un certo punto decido di renderizzare in pass e quindi tiro fuori ctrl_buffer. Ora, da come l'hai descritto quel shader iniziale lo posso buttare anche nel cestino dato che cmq devo assegnare nuovo shader al mio oggetto (ctrl_buffer) e rifare tutti i pass. :huh:

Perdo qualche passaggio in mezzo, dove va a finire il mio shader? Per essere brevi, io voglio usare ctrl_shader per dividere il mio shader iniziale in più passi. :wacko:

In ogni caso grazie ancora per la disponibilità. ^_^

p.s.1: l'ultima versione di ctrl_shading è la 1.1, giusto?

p.s.2: che shader posso usare per renderizzare altri tipi di pass che non comprende ctrl_shading?


Modificato da Dias

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

no, il tuo shader lo tieni

il buffer_store è soltanto lo shader "fittizio" che assegni al tuo oggetto per dividere i vari pass e funziona in maniera molto simile al mix8layer (anzi puoi tranquillamente usare anche il mix8layer al posto del buffer_store)

ora prendi il tuo shader superfiko e connetti ciascuna componente di cui vuoi avere un pass (diffusione, riflessione, specular ecc) a un singolo livello del buffer_store (o del mix8), ricordandoti ovviamente di aumentare anche il numero di buffer che renderizzi

poi come diceva talama devi connettere anche tutto lo shader (il coverage del ctrl_shading puoi considerarlo come il canale "output" di tutto lo shader) al render.buffer, questo ti serve appunto per far capire a mental rey su cosa fare l'AA

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
(che è sto .coverage.1.st che non riesco ad aprire in nessun modo?)
è uno dei pass che è possibile ottenere direttamente da mental ray (lo abiliti nel buffer_write->buffer.options)

Abilitare questo pass serve a risolvere un problema del ctrl_buffer, cioè il fatto che normalmente se tu metti come filtro per l'antialias un filtro diverso da box (x es. mitchell o lancazos) questo agisce solo sul render.buffer, mentre sugli altri framebuffer hai sempre il box. Attivando coverage.buffer puoi avere i vari tipi di filtri AA su tutti i framebuffer.

levando mix8layer (ovvero senza render.buffer) ottengo cmq 2 pass + 1 file .st

Il render.buffer è quello che vedi nella viewport di maya. Ho usato un mix8layer per avere in viewport il render completo e i framebuffer per avere i due pass. Inoltre devi sempre assicurarti di mettere nel render.buffer uno shader appropriato per avere un AA decente.

Ciao :hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

Grazie mille ad entrambi, pian piano sto facendo dei progressi. :blush:

Vi illustro le cose che non mi tornano, magari mi sapete dare una spiegazione. :D

Ho provato il consiglio di Dagon, ovvero collegare il mio shader (semplice Blinn in questo caso) a buffer_store, ovvero collego soltanto i canali che mi interessano. Parto con Color/Transparency e non c'è nessun problema:

post-285-1152828068_thumb.jpg

Provo con Reflectivity/Diffuse, i campi Inbuffer_x diventano grigi e posso selezionare soltanto Strore_x:

post-285-1152828474_thumb.jpg

Come mai tutto ciò? Ho provato allora a collegare singolarmente ad r/g/b aprendo il nodo Inbuffer, e mi pare che funzioni, mi pare.

Poi, per quanto riguarda la trasparenza, è normale che il pass sia cosi (quei bordi bianchi nel rendering finale delimitano i riflessi dell'environment, ci devono stà nel transparency pass? ma poi è piatto):

post-285-1152829761_thumb.jpg

Cioè, specular pass in questa maniera come lo ottengo?

http://forums.cgsociety.org/showthread.php...ght=ctrl_buffer

Francesca ha usato shader diversi per pass diversi, ma se io parto da un unico shader posso ottenere quel risultato?


Modificato da Dias

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

scusa, non ricordavo di questo problema, uso poco il ctrl_buffer e praticamente mai gli shader di maya

se non sbaglio si poteva ovviare connettendo ciascun canale che ti interessa dello shader a un surface shader e di conseguenza i vari surface ai vari livelli del buffer_store, ma potrei sbagliarmi... ti consiglio vivamente il ctrl_shading cmq :P


Modificato da dagon

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Grazie Dagon, sto facendo alcuni test per capirci meglio.

Ctrl_shading in che maniera lo usi? Tralasciando il setup di buffer_api/buffer_write, in che modo andrebbe costruito il mio shader network composto da my_shader, ctrl_shader e buffer_store?

ctrl_shader----->buffer_store (quest'ultimo lo assegno all'oggetto)

my_shader dove lo piazzo?

my_shader---->ctrl_shader---->buffer_store ???

Cioè io faccio a capire la logica che sta dietro a tutto questo per cui uso il vecchio metodo cliccaevedichesuccede. :wacko:

Se alla fine riesco a capirci qualcosa giuro che faccio un tutorial. :lol:

p.s.: essenzialmente qual è la differenza tra buffer_store e mix8layer? :ph34r:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Ctrl_shading in che maniera lo usi?

Ctrl_shading è uno shader che ti consente di separare diffuse, specular e reflection senza bisogno di utilizzare altri nodi o shader. Quindi per esempio:

ctrl_shading.compound -> buffer.store.render.buffer

ctrl_shading.diffuse -> buffer_store.framebuffer.1

ctrl_shading.reflection ->buffer_store.framebuffer.2

ctrl_shading.specular -> buffer_store.framebuffer.3

Francesca ha spiegato perchè questo approccio è "più corretto" così:

"when in the first we released this pack we got some guys from theMill stating that this approach is not the most correct one. that's true. for best performances each shader should have direct access to the framebuffers because if not you'll have to duplicate probably your shaders or even shader network to store in the fb what you

really need to complete in post your beauty pass. this means that a monolithic approach should be preferred to usual phenomenon approach for what regards framebuffers outputting, in this manner you'll preserve also your sampling patterns. a monolithic shader is just a shader that implements all what it can from with in the same function. the ctrl_shading in this sense just allows you to extract the classic diffuse, specular and reflection

passes to be stored in framebuffers without the need to use other nodes. it is an utility made

also to be a pure reflection node, infact by disabling diffuse and specular you'll get a really fast glossy reflection shader to be used in any phen (it is only for maya65 because it uses the

new glossy reflection fncs that come with mr34)."

Ti ho fatto una scena con qualche pass in + :

Ciao :hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Ciao raga, scusate se non mi sono fatto sentire ma dovevo sistemarmi il pc in questi giorni. :blush:

Grazie per la spiegazione e la scena Talama, molto gentile come sempre. ^_^

L'unico dubbio che mi rimane ora è quello relativo al mio shader originale, dove lo piazzo in tutto sto casino? Metti caso che hai una sfera con dgs applicato (ma potrebbe essere car_paint_phen o un network Blinn) e hai bisogno di separare i passi, quindi tiri fuori ctrl_shading.

A questo punto hai 3 nodi: buffer_store, ctrl_shading e dgs. Come li colleghi insieme? Cioè non riesco a capire come va usato ctrl_shading per separare i vari pass dal dgs. :huh:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Ciao, sto sperimentando anch'io in sti giorni...e leggendo questo post mi sono state chiarite un paio di cose! :)

Da quello che ho capito sperimentando, il ctrl_shading è solo d'appoggio x dare al buffer_store quello che ti serve nei passes (io lo usavo per sperimentare prendendo direttamente i suoi attributi).

Per cui blinn.color -> ctrl_shader.color -> buffer_store.framebuffer.1

una roba del genere

Spero di non aver scritto una serie di caz.... anche perché a me funziona! :))

Un'altra cosa che ho letto/capito che al buffer devi solo attaccare materiali mental ray...altrimenti esplode tutto!

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
L'unico dubbio che mi rimane ora è quello relativo al mio shader originale, dove lo piazzo in tutto sto casino? Metti caso che hai una sfera con dgs applicato (ma potrebbe essere car_paint_phen o un network Blinn) e hai bisogno di separare i passi, quindi tiri fuori ctrl_shading.

A questo punto hai 3 nodi: buffer_store, ctrl_shading e dgs. Come li colleghi insieme? Cioè non riesco a capire come va usato ctrl_shading per separare i vari pass dal dgs

Penso che la situazione ideale sarebbe di pianificare l'uso dei pass prima di iniziare il setup della scena, in modo da costruire i tuoi materiali fin dall'inizio in funzione dei pass da ottenere. (quindi per esempio utilizzare il ctrl_shading al posto del dgs).

Se invece hai una scena preesistente devi modificare i tuoi shader in funzione dei pass di cui hai bisogno.

Esempio: hai una sfera con un dgs con diffuse 0.8 e specular 0.2 e vuoi avere un pass per il diffuse e uno per le riflessioni.

Ci sono diverse soluzioni che puoi utilizzare.

- Applichi alla sfera un buffer_store. Duplichi il tuo dgs. Connetti il primo dgs a framebuffer.1 mettendo diffuse 0.8

e specular 0. Connetti il secondo dgs a famebuffer.2 mettendo diffuse 0 e specular 0.2.

Come spiegava francesca questa soluzione non è molto "corretta". Quindi

- butti il tuo dgs e lo sostituisci con ctrl_shading (Ovviamente se hai texture, bump ecc. le connetti al ctrl_shading), applichi un ctrl_buffer alla sfera. Connetti ctrl_shading.diffuse a framebuffer.1, ctrl_shading.reflection a framebuffer.2 e (se vuoi) ctrl_shading.compound a render.buffer.

Per quello che riguarda phen. più complessi (mi_car_paint, misss_fast_skin ecc.) non ti saprei dire non avendoli mai utilizzati con il ctrl_buffer. Se ho tempo provo a fare qualche prova, comunque in generale tieni conto che sono appunto phenomena (+ o - uno shader network raggruppato in un solo nodo con una interfaccia costruita per accedere ai vari parametri dei nodi che lo compongono), quindi per esempio mi_car_paint usa :

- mi_metallic_paint

- mi_bump_flakes

- mib_glossy_reflections

- mib_color_interpolate

- mib_illum_lambert

Per cui blinn.color -> ctrl_shader.color -> buffer_store.framebuffer.1

Io direi che il blinn lo puoi anche buttare e modificare direttamente il colore del ctrl_shading.

Ciao :hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

scusa Talama, ma nella tua scena, il mix8layer serve x visualizzare qualcosa di decente nella render view e basta o ha qualche altro scopo? posso anche attaccare tutto direttamente al buffer_store no?

ultima domanda...x separare le ombre ho provato a fare un pass con un background shader (so che è di maya...) attaccanto l'outMatteOpacity, lui mi butta fuori le ombre inverite il problema è far uscire un color pass senza le ombre...ho provato attaccando solo il diffuse, il color..ma non funziona!

Grazie x le risposte in anticipo!

ops...il mix8layer serve x la storia dell'antialiasing giusto? :)

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Per quello che riguarda l'antialiasing e il render buffer dovrebbe bastare mettere qualcosa tipo il tuo diffuse pass.

Il mix8layer è stata la prima soluzione che mi è venuta in mente per avere comunque nella render view il render completo. Immagina di stare facendo il setup di una scena e di avere nel render buffer solo il tuo diffuse pass, per ogni prova che fai devi andare nell'app. che usi per il compositing e mettere tutto insieme.

Tieni però conto che magari non è proprio un procedimento correttissimo, e che probabilmente ci sono soluzioni migliori o più pratiche.

Per quello che riguarda lo shadow pass se non mi ricordo male c'era una scena postata sul thread di cgtalk che spiegava come ottenerlo (comunque mi sembra che il procedimento fosse + o - quello che hai usato tu). Quello di cui sinceramente non sono sicuro è di come si usa lo shadow pass in comp., ma presumo che in sostanza la risposta alla tua domanda dipenda dal risultato finale che vuoi ottenere.

Se guardi qui: http://puppet.cgtalk.ru/download/shaders_p_e.shtml ci dovrebbe essere uno shader per renderizzare solo le ombre.

Ciao :hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

non ricordo esattamente il setup delle ombre, ma c'è una scena su cgtalk se non sbaglio


Modificato da dagon

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

c'è qualcosa che non va...ho provato a rifare una scena dall'inizio...

piano e sfera...2 mib_lambert, collegati al mix8 collegati al buffer_store...SE creo il buffer api e lo connetto ad una geometria si pianta mental ray finché non lo killo...x farlo andare devo eliminare il buffer api e creare a mano i passes dentro al miDefaultOption..così funziona! (nella render view funziona + o meno... :P)

Qualche motivo perché ciò accade?

P.S. questo è l'unico output dell'output window...

PHEN 0.2 error 051015: cannot map frame buffer: invalid fb index (14)

PHEN 0.2 error 051015: cannot map frame buffer: invalid fb index (15)

mental ray: got 8 satellite CPUs.

IMG 0.2 warn 102002: type rgb_fp not supported by jpg format, using default type rgb

MI CORREGGO...

ho settato il translation a progress message...e l'unica differenza tra la scena che hai postato te e la mia è che tra una percentuale

di rendering e l'altra mi butta fuori sta roba...

IMG 0.1 info : tonemap input range: [0.00390625, 1]

IMG 0.1 info : tonemap output range: [0.00390625, 1]


Modificato da mandrake978

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Qualche motivo perché ciò accade?
L'unica cosa che mi viene in mente è che quando connetti un geometry shader ad un oggetto devi trascinarlo dall'hypershade nello slot, e non usare il create render node (il quadratino di fianco allo slot) perchè c'è un bug in maya 7.

PHEN 0.2 error 051015: cannot map frame buffer: invalid fb index (14)

PHEN 0.2 error 051015: cannot map frame buffer: invalid fb index (15)

mental ray: got 8 satellite CPUs.

IMG 0.2 warn 102002: type rgb_fp not supported by jpg format, using default type rgb

[...]

IMG 0.1 info : tonemap input range: [0.00390625, 1]

IMG 0.1 info : tonemap output range: [0.00390625, 1]

Probabilmente dipende dal fatto che hai settato come tipo di immagine jpeg ma nel buffer_api hai lasciato come mode: rgba Floating point. (devi mettere rgba se usi formati a 8 bit)

Ciao :hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Sta cosa del geometry shader l'ho notata, al momento non lo sto usando, perché altrimenti mi si pianta tutto...anche con la tua scena...sul portatile però la tua scena è perfetta!

Ho cambiato i passes nel miDefaultOption e non mi dà problemi...non riesco proprio a capire perché cavolo si pianta se uso il buffer.api!

Mi dà quest'errore...

DISP 0.9 error 211005: timeout waiting for finished rectangles

A fine rendering si mette anche a calcolare il glow che ovviamente mi brucia tutta l'immagine nella rview...dove cavolo lo piglia??

PHEN 0.9 progr: maya_shaderglow(): Computing glow...

PHEN 0.9 info : maya_shaderglow(): Glow: Filter Width .... 21

PHEN 0.9 info : maya_shaderglow(): Resolution ...... 0.638926

PHEN 0.9 info : maya_shaderglow(): Normalization ... 0.039246

PHEN 0.9 info : maya_shaderglow(): Halo: Filter Width .... 51

PHEN 0.9 info : maya_shaderglow(): Resolution ...... 0.260841

PHEN 0.9 info : maya_shaderglow(): Normalization ... 0.181018

PHEN 0.9 progr: maya_shaderglow(): Done!

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Grazie mille a tutti quanti per la partecipazione, tra oggi e domani vedrò di fare qualche test per vedere se ci sono dei problemi o meno. ^_^

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora


  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×