Domanda

Shading Blinn-Phong ...?

Normali Blinn-Phong

Quindi il problema che sto avendo, come illustra la suddetta immagine, è che non riesco a sembrare che i miei punti salienti speculari abbiano ombra senza intoppi. Il problema è il cuoio brusco lungo i bordi del viso, che non dovrebbe accadere. L'illuminazione diffusa sembra funzionare abbastanza bene, e utilizza gli stessi valori interpolati. Ecco il codice per i punti salienti Blinn-Phong Phong:

vec3 halfAngle = normalize(lightDirection.xyz + viewRay);

float blinnTerm = dot(normal.xyz, halfAngle);
blinnTerm = clamp(blinnTerm, 0.0f, 1.0f);
blinnTerm = pow(blinnTerm, 300.0f);

float specIntensity = intensity * blinnTerm;

vec4 specColour = specIntensity * specColour;
.

lightDirection è costante, è infinitamente lontano (cioè il sole). Per quanto riguarda Viewray, è calcolato nel vertice shader come così, utilizzando la matrice di proiezione:

viewRay = vec3(-(UV.x * 2.0f - 1.0f) / projection[0].x,
               -(UV.y * 2.0f - 1.0f) / projection[1].y,
                     1.0f);
.

Sto usando il rendering differito, che è il punto in cui provengono i valori UV (rendering a una trama a schermo intero).

L'unica cosa che riesco a pensare è che la normale interpolazione non è abbastanza liscia. Ma se è così, come dovrei aggiustarlo? (Sto memorizzando le normali come galleggianti a 16 bit, ma sporgendo a 32 bit non hanno fatto la differenza).

È stato utile?

Soluzione

Inserire l'immagine Descrizione qui

E la teiera è ora risolta!Lì era un problema con interpolazione delle normali, ma per fortuna è stata una soluzione facile;Stavo normalizzando le normali nel mio shader Vertex, quindi interpolando, piuttosto che interpolando prima e poi normalizzare.Non è ancora perfetto, ma è certamente un miglioramento!

La lezione qui: Se la tua immagine sembra piatta, probabilmente stai facendo qualcosa che non dovresti fare nel vertice shader.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top