Durch Farben mit der gleichen Helligkeit radeln

8

OK. Ich habe also ein Spiel, an dem ich mit ein paar farbigen Partikeln arbeite. Jeder von ihnen bekommt seine eigene Farbe, aber sie sind alle nahe an einem bestimmten Farbton.

Um dies besser zu erklären, verwende ich den HSV-Farbraum und habe eine globale Variable, die von 0 bis 360 (H) wechselt, und jedes der spezifischen Partikel addiert oder subtrahiert eine zufällige Menge davon.

Geben Sie hier die Bildbeschreibung ein Ich benutze HSV, weil es für mich der einfachste Weg ist, durch Farben zu blättern, weil Sie einfach H ändern können.

Das sieht sehr gut aus und alles, aber die Partikel sollen reines Licht sein, das gefärbt ist. Im Moment sind alles Kreise, die mit dem Farbton gefärbt sind, aber später könnte ich Glüheffekte und andere Schattierungstechniken hinzufügen.

Das Problem ist, dass nicht alle Schattierungen (ich lege mich nicht mit H oder V an) gleich sind, was die Helligkeit betrifft, die unsere Augen sehen, und dies verursacht Probleme. Wenn zum Beispiel alle Blautöne sind, sehen die Dinge ziemlich dunkel aus.

Natürlich muss ich im Shader diese HSV-Farben in RGB-Farben konvertieren und beim Rechnen schnell erkennen, was falsch war ... die Farben hatten nicht die gleiche Leuchtdichte!

Soweit ich weiß, ist (0.2126*color.r + 0.7152*color.g + 0.0722*color.b)die Luminanz ungefähr so ​​hoch, weshalb alles ausgeschaltet ist.

Ist dies ein Weg, um es zu bekommen, damit ich immer noch all die verschiedenen Farbsättigungen (Farben auf den Rädern Grad) erhalten kann, während ich eine hohe Leuchtdichte beibehalte? Vielleicht sollte ich mit einer anderen Art von Farbe als HSV arbeiten, oder vielleicht ist es eine Formel, die eine Farbe im Grad x auf dem Farbkreis mit einer Luminanz von y findet?

Vielen Dank!

J.Doe
quelle
Dem sind leider Grenzen gesetzt. Wenn Sie sich einen wahrnehmungsgleichmäßigen Farbraum wie das Munsell-Farbsystem ansehen, werden Sie feststellen, dass helles Gelb einen viel höheren wahrgenommenen Wert hat als ein starkes Blau . Das heißt, wenn Sie einen einheitlichen wahrgenommenen Wert / Luminanz beibehalten möchten, können Sie entweder ein sattes Königsblau mit einem dunklen Ocker im gelben Farbton oder ein leuchtendes Gelb mit hellem Babyblau erhalten. In beiden Fällen opfern Sie irgendwo im Farbkreis eine gewisse Sättigung.
DMGregory
1
Wie Sie bereits bemerkt haben, basieren RGB und HSL auf möglichen Bildschirmfarben und nicht auf menschlichen Augen. Schauen Sie sich HUSL und HCL an . Manchmal benutze ich auch L * a * b * .
Amitp
@amitp Diese Farbräume scheinen ziemlich neu zu sein und ich sehe einen Unterschied darin, wie sie Farbräume definiert und wie sie konvertiert werden. Welche Quelle wäre dafür am zuverlässigsten?
J.Doe
Ich bin in einem Bus, also schreibe ich besser keine formelle Antwort, aber hier liegt das Problem: Sie müssen ein Gleichungssystem lösen, in das Sie drei Variablen einfügen: Farbton, Luminanz und Sättigung. Hier suchen Sie also nach einem bestimmten Wert für H und S, der die Bedingung für eine bestimmte Luminanz erfüllt. Nicht ganz schwer. Sie werden jedoch bald feststellen, dass einige Farben nicht so leuchtend sind wie andere (versuchen Sie, ein Blau zu finden, das so leuchtend ist wie ein 100-V-Gelb). Daher möchten Sie möglicherweise die Werte festklemmen, um auf dem Bildschirm darstellbare Werte zu erhalten.
Gustavo Maciel
Ja, ich habe daran gearbeitet. Ich habe eine rekursive Formel in Gang gebracht ... UND eine nicht rekursive (die nicht ganz funktioniert).
J.Doe

Antworten:

2

HCY könnte besser für Ihre Bedürfnisse sein. Laut der HSL- und HSV-Seite von Wikipedia ist das Problem, das Sie mit HSV haben - dass dasselbe "V" mit unterschiedlichen Farbtönen nicht der menschlichen Wahrnehmung entspricht - mit HSL ähnlich, aber HCY könnte Ihren Bedürfnissen entsprechen - dem "Y" in HCY steht für "Luma":

Luma ist ungefähr ähnlich [in der Helligkeit zum ursprünglichen Farbbild], unterscheidet sich jedoch bei hoher Farbintensität etwas. Im Gegensatz dazu weichen HSL L und HSV V wesentlich von der Wahrnehmungshelligkeit ab.

HCY wird auf der Wikipedia-Seite als "luma / chroma / hue" beschrieben. Auf dieser Seite wird anscheinend die Kurzform "HCY" verwendet, und es wird gezeigt, wie sie in und aus RGB konvertiert wird.

Jibb Smart
quelle
2
Ihr alternativer Teilungsvorschlag funktioniert nicht für Farben wie Blau (0, 0, 1) - da wir möglicherweise den Bereich unserer Primärfarben sättigen, bevor wir die gewünschte Luma erreichen. Ein blauer Leuchtstoff auf dem Bildschirm des Players kann nicht willkürlich hell gesteuert werden (obwohl HDR den Rest des Bildschirms dimmen könnte, um die Illusion zu erzeugen, dass das Blau genauso hell ist. Oder Sie könnten Ihr Luma-Ziel auf 0,0722 setzen, um dies zu können Teilen Sie jede Farbe in diese Luma, auf Kosten sehr dunkler Farben insgesamt)
DMGregory
Guter Punkt. Ich werde diesen Teil der Antwort verbessern.
Jibb Smart
Es gibt eine Reihe von Möglichkeiten, den alternativen Vorschlag zu verbessern, aber er wird ziemlich komplex, bevor tatsächlich die Ergebnisse erzielt werden, die OP wahrscheinlich wünscht. Deshalb habe ich meine Alternative entfernt. HCY sollte ausreichen.
Jibb Smart
Ich experimentiere mit all dem. Ich werde in ein paar Tagen aktualisieren, um zu sehen, wie sich diese Farbräume vorbereiten. Vielen Dank!
J.Doe
@DMGregory Könnten Sie bitte näher erläutern, was Sie unter "Setzen Sie Ihr Luma-Ziel auf 0,0722, um eine beliebige Farbe in diese Luma zu unterteilen, auf Kosten sehr dunkler Farben insgesamt" verstehen?
J.Doe