Ciclando attraverso i colori con la stessa luminosità


8

Ok. Quindi ho un gioco sul quale sto lavorando con un mucchio di particelle colorate. Ognuno di loro ottiene il proprio colore, tuttavia sono tutti vicini a una tonalità specifica.

Per spiegare meglio sto usando lo spazio colore HSV, e ho una variabile globale che va da 0-360 (H) e ciascuna delle particelle specifiche aggiunge o sottrae una quantità casuale da quella.

inserisci qui la descrizione dell'immagine Uso HSV perché è il modo più semplice per scorrere i colori perché puoi semplicemente cambiare H.

Sembra molto bello e tutto, tuttavia si suppone che le particelle siano pura luce colorata. In questo momento sono solo dei cerchi colorati con l'ombra, ma in seguito potrei aggiungere effetti di bagliore e altre tecniche di ombreggiatura.

Il problema è che non tutte le sfumature (non scherzo con H o V) sono uguali per quanto riguarda la luminosità che i nostri occhi vedono, e questo causa problemi. Ad esempio, quando sono tutte sfumature di blu, le cose sembrano piuttosto scure.

Ovviamente nello shader devo convertire questi colori HSV in colori RGB e facendo un po 'di matematica ho visto rapidamente cosa non andava ... i colori non avevano la stessa luminanza!

A quanto ho capito, la luminanza è approssimativamente (0.2126*color.r + 0.7152*color.g + 0.0722*color.b)ed è per questo che tutto è spento.

È un modo per ottenerlo in modo che io possa ancora ottenere tutti i diversi chroma (colori sui gradi delle ruote) mantenendo un'alta luminanza? Forse dovrei lavorare con un diverso tipo di colore rispetto a HSV, o forse la loro è una formula che trova un colore a gradi x sulla ruota dei colori con luminanza di y?

Grazie mille!


Sfortunatamente ci sono dei limiti. Se osservi uno spazio cromatico percettivo uniforme come il sistema di colori Munsell, vedrai che il giallo brillante ha un valore percepito molto più alto di un blu intenso . Ciò significa che se si desidera mantenere uniforme valore percepito / luminanza, allora si può ottenere sia una ricca blu reale abbinato a un ocra scuro nel colore giallo, o di un giallo brillante con il blu pallido bambino. Ad ogni modo sacrifichi un po 'di saturazione da qualche parte nella ruota dei colori.
DMGregory

1
Come hai notato, RGB e HSL sono progettati attorno ai possibili colori dello schermo e non attorno agli occhi umani. Dai un'occhiata a HUSL e HCL . A volte userò anche L * a * b * .
tra il

@amitp quegli spazi colore sembrano essere abbastanza nuovi e sto vedendo alcune differenze nel modo in cui sono definiti gli spazi colore e in che modo vengono convertiti. Quale fonte sarebbe la più affidabile per questo?
J.Doe,

Sono su un autobus, quindi è meglio non scrivere una risposta formale, ma ecco cosa si nasconde sotto il problema: dovrai risolvere un sistema di equazioni in cui inserisci tre variabili: Tonalità, Luminanza e Saturazione. Quindi qui stai cercando un valore specifico, dato H e S, che soddisfi la condizione di avere una certa luminanza. Non abbastanza difficile. Ma presto scoprirai che alcuni colori non possono diventare più luminosi di alcuni (prova a trovare un blu luminoso come un giallo da 100 V), quindi potresti voler bloccare i valori, al fine di ottenere valori rappresentabili sullo schermo.
Gustavo Maciel,

Sì, ci ho lavorato. Ho una formula ricorsiva in corso ... E una formula non ricorsiva (che non funziona abbastanza).
J.Doe,

Risposte:


2

HCY potrebbe essere migliore per le tue esigenze. Secondo la pagina HSL e HSV di Wikipedia , il problema che stai riscontrando con HSV - che la stessa "V" con tonalità diverse non corrisponde alla percezione umana - è simile a HSL, ma HCY potrebbe soddisfare le tue esigenze - il "Y" in HCY è per "luma":

Luma è approssimativamente simile [nella leggerezza all'immagine a colori originale], ma differisce in qualche modo con un elevato croma. HSL L e HSV V, al contrario, si discostano sostanzialmente dalla leggerezza percettiva.

HCY è descritto nella pagina di Wikipedia come "luma / chroma / hue". Questa pagina , invece, sembra utilizzare la scorciatoia "HCY" e mostra come convertirla da e verso RGB.


2
Il tuo suggerimento di divisione alternativa non funzionerà con colori come il blu (0, 0, 1), perché possiamo finire per saturare la gamma delle nostre primarie prima di raggiungere il luma desiderato. Un fosforo blu sullo schermo del giocatore non può essere guidato arbitrariamente in modo brillante (anche se l'HDR potrebbe oscurare il resto dello schermo per provare a dare l'illusione che il blu sia così luminoso. Oppure potresti impostare il tuo obiettivo di luminanza su 0,0722 per essere in grado di dividere qualsiasi colore a quel luma, al costo di colori molto scuri nel complesso)
DMGregory

Buon punto. Migliorerò quella parte della risposta.
Jibb Smart

Esistono molti modi per migliorare il suggerimento alternativo, ma diventa piuttosto complesso prima di ottenere effettivamente il tipo di risultati che OP probabilmente vuole, quindi ho rimosso la mia alternativa. HCY dovrebbe bastare.
Jibb Smart,

Sto facendo un po 'di sperimentazione con tutto questo. Mi aggiornerò tra un paio di giorni per vedere come si preformano questi spazi colore. Grazie mille ragazzi!
J.Doe,

@DMGregory potresti per favore spiegare di più su cosa intendi con "imposta il tuo obiettivo di luminanza su 0,0722 per poter dividere qualsiasi colore con quella luminanza, a scapito dei colori molto scuri in generale"?
J.Doe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.