Problemi con il Ray tracing Clicca QUI per vedere il messaggio nel forum |
jonny86 |
Ciao a tutti,
In questi giorni stavo dando una smanettata ai codici dei vari shader. Fino alla lezione prima del ray tracing nessun problema, mi uscivano tutti. Invece con il ray tracing ho qualche problema, a parte che Viale non pubblica gli shader e non ho copiato il codice a lezione, ho provato di tutto ma niente.
Il mio codice sostanzialmente è fatto così:
vector In = -normalize(I);
color finalColor;
if (Krif > 0) { //Krif è il coefficiente di riflettività
normal dirSpec = normalize(reflect(In, Nf)); //Nf è la normale normalizzata
color refractColor = trace(P,dirSpec);
finalColor = mix(Cs,refractColor,Krif);
} else
finalColor = Cs;
Poi alla fine passo indietro il colore con la formula di phong.
Solo che non mi riesce niente... cioè o ritorna il nero o ritorna un bluastro, ma non ritorna quello che dovrebbe riflettere della scena. Ho provato sia col rib di esempio che si usa solitamente a lezione sia con il rib dello scorso esame... ma niente :( .
Qualcuno con lo stesso problema che ha risolto può passare rib e shader?
grazie. |
ButterFlower |
supernick c'è bisogno di te!:D |
*°§_-??? |
Scusami, ma volevo cercare di capire... :? perchè usi il mix?
e il Krif che valore ha?
(ora non ho il codice sottomano ma non mi pare sia necessaria la funzione mix per ottenere il ray tracing, almeno se l'intenzione è quella di avere un effetto perfettamente a specchio) |
jonny86 |
Krif come ho commentato dal codice è il coefficiente di riflesso (quanto specchia l'oggetto) e uso il mix per mischiare il colore normale dell'oggetto preso dal rib al colore riflesso dallo specchio (se il coefficiente è a 1 diventa una superficie perfettamente specchiante, se a 0 non usa il ray tracing, se una via di mezzo mischia i due colori).
Comunque il problema non sta lì perchè avevo provato anche a togliere tutto e far ritornare solo il trace, ma niente... |
Ste.dv |
Innanzitutto assicurati di aver inserito nel file RIB l'attributo che abilita il ray tracing.
Attribute "visibility" "int specular" 1
Senza questo attributo le superfici su cui calcoli la riflessione appaiono prossime al nero.
A parte questo, il tuo codice mi sembra grossomodo corretto.
L'unico errore credo stia nell'inversione del vettore In normalizzato: va invertito per il calcolo del modello di Phong, non per determinare la riflessione.
Prova a togliere quel meno.
Io ho realizzato lo shader in questo modo:
simpleTacing
surface simpleTracing (float Kr = 0.8)
{
normal Nf = faceforward(normalize(N), I);
vector In = normalize(I);
vector reflectionDir = normalize(reflect(In, Nf));
Ci = Cs * Kr * trace(P, reflectionDir);
} |
jonny86 |
Il punto è proprio questo... non so interagire più di quel tanto con un file RIB... ho provato ad usare il rib del progetto dell'anno scorso e ho visto che lì ci sono indicati gli attributi di visibility ma non funziona.
O l'attributo non è da mettere lì (ma non credo che all'esame diano un rib sbagliato) oppure mi sa che è un problema di pixie a sto punto. Io uso la versione 2.2.2 perchè la 2.2.4 non andava (e non trovavo la 2.2.3, poi ha messo il link ma ormai andava e ho tenuto quella).
Non so cosa pensare... semmai provo a installare la 2.2.3 e vedo cosa esce, ma ho i miei dubbi... |
jonny86 |
Ok... disistallato e reinstallata al volo la nuova versione e ora va.. e pensare che ci ho perso giorni e poi era colpa della versione!!! |
|
|
|