Dato mappa normale nello spazio mondo che cosa è un algoritmo adatto per trovare i bordi?
-
13-09-2019 - |
Domanda
Se ho le normali ai vertici di una scena normale che mostra come i colori in una texture nello spazio mondo c'è un modo per calcolare i bordi in modo efficiente o è matematicamente impossibile? So che è possibile calcolare bordi se si dispone delle normali nello spazio vista ma non sono sicuro se è possibile farlo se si hanno le normali nello spazio mondo (ho cercato di capire un modo per il passato ora ..)
Sto usando DirectX con HLSL.
Soluzione
Presumo che si sta tentando di fare bordi di stile del fumetto per uno shader cellulare?
Se è così, è sufficiente fare un prodotto scalare dello spazio mondo normale con la posizione del pixel posizione della telecamera meno spazio mondo. Fino a quando i tuoi operandi sono tutti nello stesso spazio si dovrebbe essere ok.
float edgy = dot(world_space_normal, pixel_world_pos - camera_world_pos);
Se edgy
è vicina 0, è un vantaggio.
Se si desidera un bordo di dimensioni spazio sullo schermo è necessario per rendere ulteriori informazioni ID oggetto su un altro processo di superficie e post le differenze rispetto alla superficie di colore.
Altri suggerimenti
if ( normalA dot normalB > cos( maxAngleDiff )
, allora si ha un vantaggio. Non sarà perfetto, ma sarà sicuramente trovare bordi che altri metodi non sarà.
o sono io equivoco il problema?
Modifica:? Che ne dici, semplicemente, passa-alto filtrare l'immagine
Dipenderà da quanti colori l'immagine contiene, e il modo in cui si fondono: spigoli vivi, dithering, mescolato, ...
Dal momento che si dice di avere le normali ai vertici Io parto dal presupposto che è possibile accedere il colore-informazione su un unico piano.
Ho usato due tecniche con risultati più o meno:
- Ho cercato l'immagine per le aree locali dello stesso colore (RGB) e quindi utilizzato il più alto di R, G o B per trovare il 'bordo' - è qui che il R selezionato, G o B non è più la più alta è valore;
- Il secondo metodo che ho usato è quello di ridurre l'immagine a 16 colori internamente, ed è facile da trovare i contorni in questo caso.
Per costruire vettori dipenderebbe da quanto bene si desidera che la granularità del vostro 'wireframe'-immagine di essere.