Skip to content

Luce

Eccomi arrivato al pezzo forte, Luce è in assoluto la mia opera più grande, dico spesso che Luce l’avrei dovuto fare in tarda età così dopo non avrei vissuto con l’ossessione di avere fatto qualcosa di irreplicabile. Chissà se anche Dante dopo la divina commedia la pensava così :D, sembra esagerato ma ancora oggi gente mi scrive facendomi i complimenti.

Andiamo con ordine, “Luce simula la presenza di una fonte luminosa dietro l’immagine che arriva a noi passando per una zona densa”, questa è la spiegazione che ho elaborato negli ultimi anni. Ho anche elaborato una spiegazione dell’algoritmo “Esso traccia delle linee tra il punto da elaborare e la “sorgente luminosa” e fà la media di tutti i punti attraversati dalla linea ed infine somma al punto originale”.

Inventai Luce intorno al ’95, mi pare, sinceramente non ricordo come mi venne, stavo facendo prove sulla manipolazione delle bitmap e un giorno mi venne l’algoritmo di luce, lo implementai sensa neanche sapere cosa aspettarmi e il risultato fu’ un’effetto di fasci luminosi di incredibile bellezza e precisione. Col tempo trovai un modo per ottimizzare incredibilmente l’applicazione dell’effetto, ora direi che sono passato da una complessità O(n2) a O(2n), allora direi che avevo trovato il modo per applicare il filtro a pixel centrale mentre calcolo quelli periferici, o più semplicemente di accelerare in modo incredibile Luce 😉

Intorno al 2000 decisi di creare una plug-in per photoshop che facesse “Luce” sulle immagini (eheh), oramai ero un programmatore professionista e la cosa fu alla mia portata, fu interessante risolvere alcuni dilemmi come applicazione di luce ad un’immagine con alpha, anche perche photoshop ha la simpatica abitudine di salvare le immagini e passarle alle plug-in con l’alpha pre-moltiplicato, così un punto visivamente bianco con alpha al 50% me lo passava grigio. Per capire se la gestione dell’alpha era coretta creavo un’immagine bianca su sfondo nero e ci applicavo luce, poi dividevo l’immagine originale in 2 layer, uno completamente in sfondo e uno con l’immagine bianca in trasparenza, e il risultato che volevo era che applicando l’immagine solo al layer trasparente il risultato sarebbe stato lo stesso di quello a singolo layer.

L’avere creato una plug-in per photoshop mi permise di fare vari esperimenti, come applicare luce in punti diversi sui 3 canali oppure applicare luce e poi moltiplicare un livello con delle nuvole. Ma mi permise di fare prove anche più sottili, come applicare luce da una fonte di luce direzionale tracciando linee parallele anziché concentriche. Oppure dividere per il quadrato della distanza l’attuale somma dei pixel così da avere una attenuazione quadtratica e teoricamente più realistica. Ad esempio in questo caso mi accorsi che dovevo compensare questa maggiore attenuazione sommando i pixel moltiplicati per la loro distanza dal punto luminoso.

Altra cosa che notai giocando con photoshop e luce fu che mi poteva servire creare delle zone in cui i raggi luminosi diventassero meno intensi, come se avessero trovato un’ostacolo, anche dal punto di vista dell’algoritmo la cosa è piuttosto semplice, basta sottrarre alcuni pixel anziché sommarli, dal punto di vista dell’interfaccia non sapevo proprio come fare. La prima soluzione che mi venne in mente fù di mettere la possibiltà di selezionare un colore come zero, così che tutti i colori più chiari esso sono positivi e quelli più scuri negativi, questo porta ad avere una delle due seguenti limitazioni: se applichi il delta tra lo zero e il pixel allora non avrai mai i valori estremi, ad esempio se imposto il grigio 25% come zero allora il bianco sarà un grigio 75% positivo e il nero un grigio 25% negativo, se invece applico il delta scalato così da avere anche i valori estremi, ad esempio con lo zero il 25% tutti i colori più chiari vanno divisi per 0,75 così che il bianco rimane bianco e tutti i colori più scuri vanno divisi per 0,25 così che il nero divenda un bianco negativo, ma così facendo avremo meno precisione nella definizione dei positivi e negativi nell’esempio avremo una distanza minima divisa per 0,75 per i positivi e per 0,25 per i negativi, in grafica la cosa non è molto preoccupante però mi fà pensare.

Dopo avere fatto la plugin per photoshop venne quella per 3ds-max dove in post-produzione si può applicare Luce al rendering con varie opzioni, ad esempio per “Lega volley femminile” l’introduzione è fatta con rendering su sfondo nero di sagome di giocatrici che fanno azioni e poi viene applicato luce dal punto dove si trova la palla.

Ancora dopo venne l’effetto per After-Effect e con quello, secondo me, si possono fare cose davvero graziose, come applicare luce ad un avi oppure applicare luce con l’intensità che aumento col tempo col punto sorgente in movimento, devo dire che AfterEffect ha uno dei migliori SDK tra i tre che ho provato.

Anche per luce c’è la voglia in caso di richiesta di creare una versione GIMP, ed ora che non ho più photoshop probabilmente lo farò. Intanto ho rilasciato i sorgenti di una versione non ottimizzata di Luce così da potere essere studiati.

Che altro dire, cliccando sull’immagine in cima andrete nella pagina principale di Luce, se invece volete provare la versione real-time potete trovarla a questo link.

5 Comments

  1. the effect is great!
    I wish I could have the plug in

  2. Jorge Carlos da Silva Jorge Carlos da Silva

    Hello
    I found your gimp plugin version (luce) very good
    But looking LICENSE I see the use of it in commercial work is forbidden, right?
    I wanted to know if I understand wrong.
    thank you

    • amicoperry amicoperry

      Hello,
      Luce for photoshop is under Creative Commons Attribution 4.0 International License.
      The source code is under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
      For the gimp version you should contact Ohtsuka Yoshio, but i think the nonCommercial license is about only the source code like mine.
      Regards.

      • Jorge Carlos da Silva Jorge Carlos da Silva

        Hmmm, that makes sense. Thank you!!!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

*